windows - Windows 性能分析器缺少 ImageId 事件
问题描述
我有一个应用程序,我想使用 Windows 性能分析器对其进行分析。一切正常,但我没有从我的应用程序中获得任何合理的堆栈跟踪。
有问题的应用程序是一个演示应用程序。如果所有检查都结束,这是为了给我一个很好的感觉。然后我想分析另一个应用程序。因为我可以完全控制我的演示应用程序,所以我包含了一些标记函数,它们应该会显示在堆栈跟踪中。
在 Windwos 7 1上运行应用程序时,Process Explorer 会显示我想要分析的部件的正确堆栈跟踪。这是第 7 - 9 行中带有标记函数的堆栈跟踪:
由于我在 Windows 10 VM 2中安装了所有性能分析工具,因此我开始在那里进行分析。首先要注意:Process Explorer 没有显示正确的堆栈跟踪。我实现的标记功能无处可寻。
尽管如此,我还是使用UIforETW和Windows Performance Recorder记录了性能跟踪。在 WPA 中打开它们并专注于目标应用程序时,这是堆栈跟踪:
我感兴趣的所有信息都丢失了。堆栈显示为<Application>.exe!<Missing ImageId event>
我做错什么了?
如果这给你一个提示,这里是安装的相关软件:
1:Windows 7 计算机已安装 Visual Studio (C#)。
2:Windows 10 VM 没有 Visual Studio,但安装了 WinDBG(预览版)和 Windows Performance Toolkit。
我标记了delphi,因为目标应用程序是用 Delphi 编写的。
解决方案
Windows 10 WPA(以及 Windows 8.1,在较小程度上)放弃了对旧调试符号格式的支持;它现在仅支持自 MSVC 7 以来已成为标准的“RSDS”格式。使用旧符号文件格式的 PE 文件(例如,VB6 生成 NB10 PDB 文件)将导致“缺少 ImageId 事件”错误。
(消息本身在技术上不正确;即使在跟踪文件中也可能有一个 ImageId,但它正在寻找一个 ImageId/DbgID_RSDS 事件,该事件无法为非 RSDS PDB 生成)
推荐阅读
- python - 确保 python 脚本不以 root 身份运行
- java - 当我更改 JAVA_HOME 时,通过 Python 的 JDBC 无法与 jpype 和 jaydebeapi 一起使用
- image - 在传递给模型进行对象检测之前预处理帧
- javascript - Javascript根据两个值计算相同的对象值数组
- rest - 我正在尝试通过 azure 数据工厂将数据从 REST API 下载到 azure 数据湖。如何在 Azure 数据工厂中传递 API 的查询参数?
- c++ - Xcode - ld:未找到架构 x86_64 的符号
- php - 警告:array_merge():使用 WooCommerce 的 Wordpress 中的参数 #1 错误消息
- javascript - 是否可以使用 jQuery 在 html 中创建多层动态表单?
- python - For循环根据空值删除列
- reactjs - 如何将描述中的 Strapi 链接更改为 HTML 链接标签