Windows Performance Analyzer缺少ImageId事件

时间:2018-08-26 13:19:27

标签: windows delphi debugging windows-performance-analyzer

我有一个要使用Windows Performance Analyzer进行分析的应用程序。一切正常,但是我的应用程序没有任何合理的堆栈跟踪。

有问题的应用程序是演示应用程序。如果全部检查完,这会让我感觉很好。然后,我要分析另一个应用程序。由于我可以完全控制演示应用程序,因此我包含了一些标记功能,这些功能应该显示在堆栈跟踪中。

在Windwos 7 1 上运行应用程序时,Process Explorer会显示我要分析的零件的正确堆栈跟踪。这是第7-9行中带有标记功能的堆栈跟踪:

Process Explorer Stack Trace

由于我在Windows 10 VM 2 中安装了所有性能分析工具,因此我开始在那里进行性能分析。首先要注意的是:Process Explorer没有显示正确的堆栈跟踪。我实现的标记功能无处可寻。

尽管如此,我还是使用 UIforETW Windows Performance Recorder 记录了性能跟踪。在WPA中打开它们并专注于目标应用程序时,这是堆栈跟踪:

WPA Stack Trace

所有我感兴趣的信息都丢失了。堆栈显示为<Application>.exe!<Missing ImageId event>

我做错了什么?


如果这可以给您提示,请安装以下相关软件:

1:Windows 7计算机已安装Visual Studio(C#)。

2:Windows 10 VM没有安装Visual Studio,但安装了WinDBG(预览版)和Windows Performance Toolkit。

我标记了,因为目标应用程序是用Delphi编写的。

2 个答案:

答案 0 :(得分:2)

Windows 10 WPA(以及Windows 8.1,在较小程度上)放弃了对较早调试符号格式的支持;它现在仅支持MSVC 7以来的标准“ RSDS”格式。使用较旧符号文件格式的PE文件(例如,VB6生成NB10 PDB文件)将导致“ Missing ImageId event”错误。

(消息本身在技术上是不正确的;即使在跟踪文件中也可能存在ImageId,但它正在查找ImageId / DbgID_RSDS事件,无法为非RSDS PDB生成该事件)

答案 1 :(得分:0)

<Missing ImageId event> 当会话没有与“NT Kernel Logger”合并时也会被报告,“NT Kernel Logger”提供了一些必要的信息来解析符号。

停止会话的“正确”方法是:

xperf.exe -stop my_trace -stop -d merged_trace.etl

请注意,第二个 -stop 需要停止另一个会话(隐式“NT Kernel Logger”),并且 -d 将两者合并到 merged_trace.etl 中。