故障转储 - WinDbg - 强制 PDB 文件匹配不起作用?



我有一个客户的应用程序的故障转储,该应用程序是使用我一直在 WinDbg 中分析的非常旧版本的 dll(发布版本,没有原始符号)构建的。

为了获得更多信息,我在发布模式下重建了dll,这次使用符号,使用相同的编译器版本,我相信与最初构建dll时的设置相同。 我将符号文件添加到我的符号路径,但 WinDbg 扩展名 !itoldyouso 告诉我转储中的模块与 PDB 文件不匹配。 启用SYMOPT_LOAD_ANYTHING也无济于事。

itoldyouso告诉我它们不匹配,因为模块没有pdb sig(值0),而我创建的重新创建的符号文件(具有有效的pdb sig)。 如何让它们匹配?

你试过.reload /i foo.dll吗?

对于详细输出,请尝试:

!sym noisy;.reload /i foo.dll;x foo!*test*

尝试 chkmatch (http://debuginfo.com/tools/chkmatch.html) - 它能够覆盖 PDB 文件中的签名,以便 exe 和 PDB 匹配。另外,前段时间我写了一篇关于"离线"检查pdb文件的文章,也许你会发现一些有用的东西:http://lowleveldesign.wordpress.com/2011/12/09/pdb-file-out-of-debugger/。

不幸的是,您的 DLL :(没有匹配的符号。根据我的理解,现在的任何尝试都无法为您提供完全匹配的 PDB。

回收一些应该有帮助的旧线程:

是否可以在创建 DLL 后(重新)创建 PDB 文件

用于查找 dll (或) exe 和 PDB 文件是否匹配的工具

你最好的选择是

a. 将代码同步回 DLL 发布的时间

b. 使用相同的工具集构建和创建 PDB。

c. 使用 .reload/i 选项加载符号

最新更新