我有一个客户应用程序的崩溃转储,该应用程序是使用我在WinDbg中分析的dll(发布版本,没有原始符号)的旧版本构建的。
为了获得更多信息,我在发布模式下使用相同的编译器版本重建了带符号的dll,我相信与最初构建dll时相同的设置。我将符号文件添加到我的符号路径,但是WinDbg扩展名!itoldyouso告诉我转储中的模块与PDB文件不匹配。启用SYMOPT_LOAD_ANYTHING也无济于事。
!itoldyouso告诉我他们不匹配,因为模块没有pdb sig(值0),而不是我创建的重新创建的符号文件(使用有效的pdb sig)。我如何让它们匹配?
答案 0 :(得分:12)
您是否尝试过.reload /i foo.dll
?
对于详细输出,请尝试:
!sym noisy;.reload /i foo.dll;x foo!*test*
答案 1 :(得分:7)
尝试使用chkmatch(http://debuginfo.com/tools/chkmatch.html) - 它能够覆盖pdb文件中的签名,因此exe和pdb将匹配。另外,前段时间我写了一篇关于“离线”检查pdb文件的帖子,也许你会发现有用的东西:http://lowleveldesign.wordpress.com/2011/12/09/pdb-file-out-of-debugger/。
答案 2 :(得分:2)
很遗憾你没有匹配的DLL符号:(根据我的理解,现在任何尝试都无法为你提供完全匹配的PDB。
回收一些应该有用的旧线程:
Is it possible to (re)create a PDB file after a DLL is made
Tool to find if dll (or) exe and PDB file match
你最好的选择是
一个。将代码同步回DLL发布时
湾使用相同的工具集构建和创建PDB。
℃。使用.reload / i选项加载符号