使用Win7 / 64分析在XP / 32计算机上生成的Windows故障转储?

时间:2011-02-21 13:13:51

标签: c++ windows visual-studio windbg crash-dumps

我们在分析在我们的开发机器上的客户Windows XP / 32盒上创建的Windows崩溃转储时遇到问题。

我们的许多开发机器现在都是Win7 / 64机器,但似乎在Windows XP下生成的崩溃转储无法完全解析其二进制依赖关系,因此在Visual Studio(2005)中显示调用堆栈时会出现警告。

例如,在Windows XP上生成转储时,从Win7计算机加载时无法解析msvcr80.dll:

在XP上,WinSxS路径似乎是C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_e6967989\msvcr80.dll - 在Win7上,相同 DLL版本的WinSxS路径似乎是:x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_d08d7da0442a985d

(我从[{3}}获得此链接到a forum thread on codeguru的信息。)

Visual Studio(2005)现在无法再正确解析崩溃转储的二进制文件。

如何让Visual Studio解析所有我的转储文件的正确二进制文件?

注意:我已经正确设置了符号服务器。大多数系统DLL(kernel32.dll等)的公共符号和我们自己的DLL的符号都已正确加载。只是位于WinSxS文件夹中的DLL的符号是而不是加载,因为看起来Vista / 7对这些DLL使用的路径方案与XP不同,因此Visual Studio无法找到本地开发机器上的 dll pdb),因此无法加载转储文件的相应符号。

4 个答案:

答案 0 :(得分:3)

我认为在这种情况下应该使用WinDbg来分析转储。然后你可以摆脱这样的拦路战。但只记得使用x86 build of WinDbg(Windows调试工具的一部分)。

答案 1 :(得分:2)

使用微软符号服务器:http://support.microsoft.com/kb/311503
为此,打开选项对话框,转到ebugging \ Symbols并添加http://msdl.microsoft.com/download/symbols作为新位置;然后选择一个本地路径进行缓存,你准备好了

答案 2 :(得分:2)

根据我的理解,这是你难以解决的二进制文件,而不是正确的符号?

除了复制相应的二进制文件之外,一个选项是设置x86机器,分享它的C并将调试器指向该机器。

您可以在VM中为所有开发人员访问它。解析二进制文件时只需从VM加载它们。

答案 3 :(得分:1)

尝试使用symchk.exe,它可以帮助您从转储文件中提取符号和二进制文件。 (或从目录中)

http://msdn.microsoft.com/en-us/library/ff558845%28v=VS.85%29.aspx

symchk可以在windbg包中找到