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

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

.symopt+0x40 

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

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

感谢第一个答案的评论之一,我查看了“未记录的Windows 2000 Secrets:A Programmers Cookbook”一书的pdf链接。 作者详细介绍了pdb文件格式。 正如我之前所说的那样,我已经将pdb加载到hex编辑器中并翻转了一些看起来我的年龄/签名匹配,但它没有用。 好吧,在使用W2k秘密书中的实用程序将pdb“爆炸”到包含的流中之后,我发现它们隐藏了对流3中年龄的另一个引用!!!!!!! 一旦我翻过那个,它就会在windbg中匹配。

不确定你是否想要解决这个问题,但看起来它可以做到。 如果这是生产支持,那么它可能值得你花时间。

试试这个实用程序

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

有关调试信息匹配和相关问题的详细信息,请参阅此文章 。

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

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

我没有使用chkmatch,但修改exe或pdb以匹配彼此应该工作正常。

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

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

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