我有一个 Windows minidump(C 代码)和相应的 exe 文件。不幸的是,我没有完全匹配的 .pdb 文件,但我有包含完全相同代码的 .pdbs,只是在不同时间构建而成。在 Windbg 中,我可以使用:
.symopt+0x40
即使是不匹配的符号文件,也要告诉它加载任何东西。在这种特定情况下,这很有效,我能够获得正确的调用堆栈。 我只是想知道Visual Studio是否有这样的功能。我们在这里使用几乎所有不同版本的VS,因此无论可能在哪个版本中都无所谓。谢谢。
我有一个 Windows minidump(C 代码)和相应的 exe 文件。不幸的是,我没有完全匹配的 .pdb 文件,但我有包含完全相同代码的 .pdbs,只是在不同时间构建而成。在 Windbg 中,我可以使用:
.symopt+0x40
即使是不匹配的符号文件,也要告诉它加载任何东西。在这种特定情况下,这很有效,我能够获得正确的调用堆栈。 我只是想知道Visual Studio是否有这样的功能。我们在这里使用几乎所有不同版本的VS,因此无论可能在哪个版本中都无所谓。谢谢。
虽然没有覆盖方式,但是回答这个问题的帖子中提到了一种修改PDB文件以使其与EXE匹配的方法。
在第一个答案的评论区里,有人提供了一本名为《Windows 2000秘籍:程序员的烹饪书》的PDF书籍链接。作者详细讲解了PDB文件格式。就像我之前说过的,我已经将PDB文件加载到十六进制编辑器中,并翻转了一些比特,看起来好像把年龄/签名匹配了,但是不起作用。在使用W2k秘籍书中的工具“爆炸”PDB成包含在其中的流之后,我发现它们在流3中隐藏了另一个对于年龄的引用!!!翻转那个数字之后,它在windbg中得到了匹配。
不确定您是否想花这么多功夫,但看起来是可行的。如果这是为了生产支持而做的话,那么值得您去尝试。
我听说在VS2019(16.7..16.8左右)中,他们切换到了多线程PDB文件生成器以加快速度。
一个副作用是,由不同线程生成的文件部分可能以不同的顺序出现在文件中。
总之,比以往任何时候都更重要的是,您使用与EXE一起构建的PDB而不是其他任何PDB。