windows - 无法让 xperfview 加载 DLL 的符号

标签 windows profiling xperf

我一直在用 xperf 竭尽全力为我正在分析的工具获取符号。我在该工具中运行的代码分为 .exe 和 .dll——要分析的重要内容位于 .dll 中。我运行了 xperf:

xperf -on PROC_THREAD+LOADER+INTERRUPT+DPC+PROFILE -stackwalk profile

然后我运行了一下我的工具,然后

xperf -d profile.etl

然后我尝试了 xperfview。我加载了配置文件,打开“加载符号”,然后打开了汇总表。根本没有符号——从字面上看,模块在功能列中出现了“未知”。我已经在这方面搜索了其他线程,这是我尝试过的:

  1. 我设置了我的环境变量,_NT_SYMBOL_PATH 和 _NT_SYMCACHE
  2. 我清除了符号缓存并运行 xperf -symbols -i profile_results.etl。
  3. 我从最新版本的 Windows 调试工具复制了 dbghelp.dll 并重复了上述操作。

完成所有这些之后,我现在可以为大多数不是我自己的代码的模块正确显示函数名称,但我无法显示我的 dll。 dll 正在 Release模式下编译(优化),但我专门设置 Visual Studio 项目来创建 pdb,我已经验证 pdb 存在并且它位于我的 _NT_SYMBOL_PATH 上的目录中。有谁知道我该如何解决这个问题,或者至少进一步调试它?

最佳答案

您可以 set some environment variables在符号加载期间启用诊断日志记录:

  • DBGHELP_DBGOUT = 1
  • DBGHELP_LOG = C:\dbghelp.log

关于windows - 无法让 xperfview 加载 DLL 的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8596687/

相关文章:

ruby - 如何让 ruby​​ 1.9.3 将换行符写入文本文件?

java - 如何在Java中存储配置文件?

c++ - 如何让 Very Sleepy 探查器识别 C++ 二进制文件中的函数名称?

java - 如何在 Java 中分析分布式应用程序?

sdk - Xperfview : What's the difference between CPU sampling and CPU Usage?

windows性能记录器记录具体过程

windows - XPerfViewer 与新的 Storport Provider?

windows - 为什么 d3 图表中的日期在 ubuntu 的 firefox 中显示为凌晨 1 点,而在 windows 的 firefox 中显示为日期和日期?

c# - 在 Windows 8 应用程序中使用 C# 从 NTP 服务器获取时间

c++ - 试图通过 system() 运行字符串命令