首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xperf无法加载我的DLL的符号

xperf无法加载我的DLL的符号
EN

Stack Overflow用户
提问于 2010-05-01 00:56:11
回答 3查看 4.8K关注 0票数 1

我试图使用xperf来分析我的DLL,但它拒绝使用我的DLL的PDB文件。在使用-symbols的.etl上运行xperf时,我得到:

代码语言:javascript
复制
DBGHELP: mydll- private symbols & lines
         C:\mydll\debugu\mydll.pdb - unmatched

这让我相信它认为我的PDB与应用程序正在使用的DLL不匹配。这是错误的;它是匹配的。我已经使用procexp确认了应用程序所链接的DLL的路径,完全重新构建了项目,等等。它仍然认为它不匹配。

有什么想法可能是错误的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-01 10:41:20

对不起,我问了这个问题,然后就忘了。

实际上有两个问题。

第一个问题是,xperf实际上使用的是我的符号的一个较旧的缓存版本。已通过从符号缓存中将其删除来修复此问题。

第二个问题是,当我在xperfview中加载符号时,实际上并没有将最新的pdb放到符号缓存中。不过,pdb位于一个目录中,我确认该目录包含在_NT_SYMBOL_PATH变量中。不幸的是,我不记得确切的命令用来解决这个问题,但我相信它是一个'xperf file.etl -symbols‘变体。此命令正确解析了etl,并在遇到相关符号时加载/缓存了所有相关符号。在此之后,xperfview可以正确地显示我的符号。

请注意,每当我的pdb发生变化时,我都必须重新运行该命令,因为xperfview仍然不会触及符号缓存中已经没有的任何内容。我仍然不确定为什么它会在我的机器上表现成这样,其他人似乎没有这个问题。

票数 2
EN

Stack Overflow用户

发布于 2010-07-22 00:37:43

尝试将系统环境变量_NT_SYMBOL_PATH设置为指向您的.pdb文件Symbols,使其指向c:\ _NT_SYMCACHE_PATH。请参阅http://msdn.microsoft.com/en-us/library/ff191023(VS.85).aspx上有关XPerf符号处理的文档

在WindowsItPro .com上也有一篇很好的博客文章"Under the covers XPerf“,它介绍了XPerf中的符号处理。

请注意,我需要用正确的值设置系统环境变量,xperfview没有选择在批处理文件中设置环境(在启动XPerfView后立即检查跟踪,配置符号路径菜单选项)

票数 2
EN

Stack Overflow用户

发布于 2016-06-01 08:56:23

我刚刚在上发布了一个类似问题的answer,所以可能与这里遇到的问题有关……

基本上,如果动态加载动态链接库,可能会给XPerf带来有关符号加载的问题。

就我个人而言,我猜测这是关于XPerf中的逻辑决定是否甚至尝试加载给定模块的符号。例如,“加载所有EXE及其IAT条目”(这将跳过所有动态DLL-这看起来不是这样的,但类似的事情正在发生)

编辑:

我最近和一位同学讨论了这个问题,并了解到XPerf将正确地“决定”为以编程方式加载的DLL加载符号... IF DLL将一直加载到进程终止。

因此,对于在执行期间加载和卸载的DLL,以及在终止时卸载的DLL...XPerf将跳过加载这些符号的尝试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2746254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档