2014-02-19 61 views
6

我有一个客户应用程序的崩溃转储,用我在WinDbg中分析过的我们的一个非常旧版本的dll(发布版本,没有原始符号)构建。崩溃转储 - WinDbg - 强制PDB文件匹配不起作用?

为了获得更多信息,我使用相同的编译器版本重新构建了释放模式下的dll,并使用相同的编译器版本,并且我相信与最初构建dll时的设置相同。我将符号文件添加到我的符号路径中,但是WinDbg扩展!itoldyouso告诉我转储中的模块与PDB文件不匹配。启用S​​YMOPT_LOAD_ANYTHING也没有帮助。

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

回答

9

你试过.reload /i foo.dll

详细输出的尝试:

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

+0

是的,它加载了foo的符号,但是在详细输出中我也看到了不匹配的报告:“DBGENG:foo.dll有不匹配的符号 - 类型”.hh dbgerr003“详细信息“ – JosephA

+0

当然,它们会被报告为不匹配,因为它们不是在构建DLL时构建的。但只要你使用相同的编译器和设置(你提到的)并且源代码根本没有改变,那么这些符号就可以工作。 –

+0

我想我是在假设下工作,除非我有一场比赛,我根本无法相信调用堆栈,虽然也许正如你所说他们永远不会匹配,但也许尽管我仍然可以有一个大多数有效的调用堆栈。 – JosephA