Windows 性能分析器缺少 ImageId 事件

标签 windows delphi debugging windows-performance-analyzer

我有一个应用程序,我想使用 Windows Performance Analyzer 对其进行分析。一切正常,但我没有从我的应用程序中获得任何合理的堆栈跟踪。

有问题的应用程序是一个演示应用程序。如果一切顺利,这是为了让我感觉良好。然后我想分析另一个应用程序。因为我可以完全控制我的演示应用程序,所以我包含了一些标记函数,它们应该显示在堆栈跟踪中。

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

Process Explorer Stack Trace

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

尽管如此,我还是使用 UIforETWWindows 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 编写的。

最佳答案

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

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

关于Windows 性能分析器缺少 ImageId 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52026645/

相关文章:

windows - 如何在 Windows 中通过命令行创建快捷方式?

c++ - Windows环境下的Chromium调试

Linux - Git Credentials - 如何删除用户名/密码组合的实例?

c++ - 如何选择应用程序应链接到的 VC 2008 DLL 的版本?

java - 无法在 gradle.properties 中设置基于 Windows 的路径

delphi - 为什么我不能将字节数组传递给采用 TByteDynArray 的例程?

delphi - Inno Setup 无法导入 DLL

delphi - 平移时如何获取 TScrollBox 在 TLayout 中的位置?

c - 调试后的程序恢复执行后崩溃

java - 仅执行一个周期的摆模拟