是否可以在Visual Studio中加载不匹配的符号?

时间:2010-09-07 15:25:29

标签: c visual-studio debugging minidump

我有一个Windows minidump(C代码)和一个相应的exe文件。不幸的是,我没有完全匹配的.pdb文件,但我确实有.pdbs包含完全相同的代码,只是在不同的时间构建。在Windbg中,我可以使用:

.symopt+0x40

告诉它加载任何东西,甚至是不匹配的符号文件。这在这个特定的实例中效果很好,我能够得到一个正确的调用堆栈。我只是好奇Visual Studio是否有这样的功能。我们在这里使用了几乎所有不同版本的VS,因此它可能属于哪个版本并不重要。谢谢。

5 个答案:

答案 0 :(得分:19)

尝试this utility

  

ChkMatch实用程序可用于检查可执行文件和调试信息文件是否匹配。它还可用于强制执行可执行文件和调试信息文件之间的匹配(如果它们兼容)。

     

有关调试信息匹配及相关问题的详细信息,请参阅此article

     

支持的调试信息格式:DBG,PDB 2.0,PDB 7.0 ......

答案 1 :(得分:4)

没有覆盖,但是this question的海报找到了修改PDB文件以使它们与EXE匹配的方法。

  

感谢其中一条评论   第一个答案,我查了一个链接   这本书的pdf“未记载   Windows 2000的秘密:程序员   食谱“。作者进入   有关pdb文件的详细信息   格式。正如我之前所说,我曾经   已经将pdb加载到十六进制中   编辑并翻了一下   看来我做了   年龄/签名匹配,但它没有   工作。好吧,使用该实用程序后   从W2k秘密书到“爆炸”   将pdb放入包含的流中,我   发现他们隐藏了另一个   参考流中的年龄   3 !!!!!!!一旦我将那个翻转为   好吧,它在windbg中匹配。

不确定你是否想要解决这个问题,但看起来它可以完成。如果这是用于生产支持,那么它可能值得您光顾。

答案 2 :(得分:3)

Visual Studio和Windbg通过将Executable标头中的时间戳与pdb文件中存储的时间戳进行比较来匹配pdbs。您可以通过运行dumpin / headers来查看时间戳。

我没有使用过chkmatch但是修改exe或pdb以便相互匹配应该可以正常工作。

请注意,此技术可能不足以调试二进制文件。 John Robbins在他的书“调试Windows”(我可以推荐)中提到他看到了几乎相同时间构建的相同源代码树的不同构建结果。

始终使用您的构建(包括发布版本)构建pdb符号,并将它们与构建产品一起存档,并包含.map文件以便进行测量。

答案 3 :(得分:0)

根据this post,可以在visual studio中使用sos windbg命令。但我不确定“.symopt”是否属于这一类。

答案 4 :(得分:0)

有人告诉我,在VS2019(16.7 .. 16.8棒球场)中,他们切换到了多线程PDB文件生成器以加快速度。

副作用是,在不同线程上生成的文件部分可能在文件中以不同顺序结束。

最重要的是,使用由EXE而非其他组件构建的PDB甚至比以前更重要。