使用 Win7/64 分析 XP/32 计算机上生成的 Windows 故障转储?
我们在分析在我们的开发计算机上的客户 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_d08d7da 0442a985d< /code>
(我从 codeguru 上的论坛帖子< /a> 链接到一篇 msdn 文章 .)
Visual Studio (2005) 现在无法再正确解析故障转储的二进制文件。
如何让 Visual Studio 解析转储文件的所有正确的二进制文件?
注意:我已经正确设置了符号服务器。大多数系统 DLL(kernel32.dll 等)的公共符号和我们自己的 DLL 的符号都已正确加载。只是驻留在 WinSxS 文件夹中的 DLL 符号未加载,因为 Vista/7 似乎对这些 DLL 使用了与 XP 不同的路径方案,因此 Visual Studio 无法找到本地开发计算机上的dll(不是 pdb),因此无法加载转储文件的相应符号。
We have a problem with analyzing our Windows crash-dumps that were created on customer Windows XP/32 boxes on our development machines.
Many of our development machines are now Win7/64 boxes, but it appears that the crash-dumps generated under Windows XP cannot full resolve their binary dependency, thereby leading to warnings when displaying the call stacks in Visual Studio (2005).
For example, the msvcr80.dll cannot be resolved when loaded from a Win7 machine when the dump was generated on Windows XP:
On XP, the WinSxS path appears to be C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_e6967989\msvcr80.dll
-- on Win7, the WinSxS path to the same DLL version seems to be: x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_d08d7da0442a985d
(I got this info from a forum thread on codeguru that link to an msdn article.)
Visual Studio (2005) can now no longer correctly resolve the binaries for the crash-dump.
How can I get Visual Studio to resolve all the correct binaries for my dump file?
Note: I have already correctly set up the symbol server. The public symbols for most system DLLs (kernel32.dll, etc) and our symbols of our own DLLs are correctly loaded. It is just that the symbols of DLLs that reside in the WinSxS folder are not loaded, because it appears that Vista/7 uses a different path scheme for these DLLs than XP does and therefore Visual Studio cannot find the dll (not the pdb) on the local dev machine and so cannot load the corresponding symbols for the dump file.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
尝试使用 symchk.exe,它可以帮助您从转储文件中提取符号和二进制文件。 (或从目录)
http://msdn .microsoft.com/en-us/library/ff558845%28v=VS.85%29.aspx
symchk可以在windbg包中找到
try to use symchk.exe, it help you to pull symbols and binaries from a dump file. (or from a directory)
http://msdn.microsoft.com/en-us/library/ff558845%28v=VS.85%29.aspx
symchk could be found in the windbg package
我认为在这种情况下应该使用 WinDbg 来分析转储。然后你就可以摆脱这些障碍。但请记住使用 x86 版本的 WinDbg(Windows 调试工具的一部分)。
I think WinDbg should be used in this case to analyze the dumps. Then you can get rid of such roadblockers. But just remember to use x86 build of WinDbg (part of Debugging Tools for Windows).
使用 Microsoft 符号服务器:http://support.microsoft.com/kb/311503
为此,请打开选项对话框,转到 ebugging\Symbols 并添加 http://msdl.microsoft.com/ download/symbols 作为新位置;然后选择本地路径进行缓存就可以了
Use microsoft symbol server: http://support.microsoft.com/kb/311503
To do it, open the options dialog, goto ebugging\Symbols and add http://msdl.microsoft.com/download/symbols as a new location; then select a local path for caching and you are ready to go
据我了解,您难以解析的是二进制文件,而不是符号正确吗?
除了复制相应的二进制文件之外,一个选择是设置一台 x86 机器,共享它的 C 语言,然后将调试器指向该机器。
您可以将其放在虚拟机中供所有开发人员访问。解析二进制文件时,只需从虚拟机加载它们即可。
From what I understand, it's the binaries you are having difficulty resolving not the symbols correct?
Apart from copying over the respective binaries one option is to setup an x86 machine, share out it's C and just point your debugger to that machine.
You could have this in a VM for all your developers to access. When resolving the binaries just load them from the VM.