我们在分析在我们的开发机器上的客户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),因此无法加载转储文件的相应符号。
答案 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包中找到