2011-04-19 48 views
0

得到这个调用堆栈当我打开Visual Studio 2005中一个Windows崩溃转储:由于不匹配/缺少* system *二进制文件导致崩溃转储中的调用堆栈无效?

> myprog.exe!app_crash::CommonUnhandledExceptionFilter(_EXCEPTION_POINTERS * pExceptionInfo=0x0ef4f318) Line 41 C++ 
    pdm.dll!513fb8e2() 
    [Frames below may be incorrect and/or missing, no symbols loaded for pdm.dll] 
    [email protected]() + 0x1c7 bytes 
    ... 

望着模块加载信息:

... 
'DumpFM-V235_76_1_0-20110412-153403-3612-484.dmp': Loaded '*C:\Program Files\Common Files\Microsoft Shared\VS7Debug\pdm.dll', No matching binary found. 
... 

我们看到,这个二进制甚至没有装,因为用于分析转储的机器与生成转储的机器不同。

我现在还没有访问这台机器 - 我可以以某种方式修复这个堆栈,或者我总是需要确切的二进制文件在这个确切的路径位置吗?

+0

您是否尝试过在Windbg内加载转储? – Naveen 2011-04-19 18:25:31

+0

@Naveen - 尚未尝试WinDBG。但为什么应该有什么区别?我只是没有这个DLL在这个位置,它appparently也不会通过MS的符号服务器获取。 – 2011-04-19 18:31:56

回答

1

如果你绝对要在Visual Studio调试此转储,那么你就可以逃脱复制从产生的转储到您的.dmp文件是同一文件夹中的计算机的系统DLL文件。这样,它将加载这些二进制代码,而不是试图在调试系统上的相同路径中找到它们,因为它们在原始系统上(可能包含相同模块的不同版本)。

由于Naveen指出,虽然在WinDBG中加载转储时不会出现这个问题(因为我还没有理解)。这就是为什么当我从客户端获得转储时,我总是在WinDBG中分析它们。

如果您需要关于使用WinDBG进行故障转储分析的帮助,以下Web站点上有关于此主题的信息:http://www.dumpanalysis.org/

+0

“在WinDBG中加载转储时,你不会遇到这个问题”...... WinDBG的做法究竟有什么不同? (什么,不是如何)还有一个不同的二进制文件,在MS符号服务器上没有可用于pdm.dll的符号。当然,WinDBG无法做到魔术? – 2011-05-30 06:35:53

+1

你的问题是:“我将永远需要在这个确切的路径位置确切的二进制文件”。你没有说你在调试器机器上没有二进制文件(.dll)或.pdbs。 WinDbg与VS的不同之处在于,从我的经验来看,它从来没有关于丢失的二进制文件。当我有没有.DLL文件的.pdb文件时,WinDbg仍然会加载.pdb并尽其所能。 VS会完全拒绝加载符号,所以甚至没有空间去做任何事情。当然,没有二进制文件或pdb文件,我没有任何建议。 – franmon 2011-06-02 01:49:34

+0

接受答案。 ** WinDBG,unlinke VS,不需要实际的二进制文件**,只需dump-image和pdb文件就足够了。 – 2013-10-08 10:13:52

1

另一种选择是使用DebugInfo.com人员的ModuleRescue工具。这将扫描转储文件,允许您选择不加载符号的模块,然后生成一个假模块,其中只有足够的信息供调试器从符号服务器加载符号。

当Visual Studio无法加载此模块的符号并打开一个对话框要求您查找符号时,只需将您的调试器指向该假模块并且它将正确加载。

这个工具基本上和WinDbg做的一样,尽管工作流程不同。

相关问题