调试在64位计算机上捕获的32位进程的转储

时间:2010-10-22 19:48:33

标签: visual-studio-2010 debugging 64-bit windbg crash-dumps

我最近收到了一位客户的64位故障转储 我们的流程都是32位,但客户的机器正在运行x64 Server 2008。

Visual Studio(2008和2010 Express)告诉我,我必须使用64位版本的MSVSMON.EXE,我不能,因为我没有64位计算机。< / p>

我很确定在WinDbg中有一种方法可以做到这一点,但我觉得WinDbg是敌对的。

有没有办法在32位计算机上调试64位转储,最好是使用Visual Studio?

5 个答案:

答案 0 :(得分:11)

您需要确保客户使用32位工具(adplus或DebugDiag)来捕获32位进程的故障转储。然后,您可以使用32位计算机来调试转储。

http://blogs.msdn.com/b/tess/archive/2010/09/29/capturing-memory-dumps-for-32-bit-processes-on-an-x64-machine.aspx

虽然Isalamon的评论在技术上是正确的,但是没有人愿意执行它,因为堆栈跟踪很糟糕。

让您的客户知道这是必要的,并希望他/她合作。

如果您不熟悉转储分析,Microsoft始终为您服务,http://support.microsoft.com

答案 1 :(得分:2)

我通过使用32位任务管理器( C:\ Windows \ SysWOW64 \ Taskmgr.exe )来捕获转储来解决此问题。

答案 2 :(得分:1)

是Userdump还是内核转储?看起来你得到了系统转储。如果是这种情况,那么你可以在windbg上获取!wow64exts扩展名的帮助,并且可以根本导致问题。

答案 3 :(得分:1)

根据建议使用!wow64exts.sw切换到x86模式的建议,我得到了很好的结果:

http://blogs.msdn.com/b/ntdebugging/archive/2008/06/03/how-to-debug-wow64-applications.aspx

这里有相同的建议数字:

http://blogs.msdn.com/b/msdnforum/archive/2010/03/14/how-do-i-switch-to-32bit-mode-when-i-use-windbg-to-debug-a-dump-of-a-32bit-application-running-on-an-x64-machine.aspx

此处的背景和相关命令:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384163(v=vs.85).aspx

希望除了此主题中已存在的内容之外,还可以作为此主题的合适输入的汇编。感谢。

答案 4 :(得分:0)

我同意你应该正确捕获dmp文件,但最近对这种错误捕获的dmp文件进行了一些实验。我使用WinDbg来修补SOS.dll来删除arch检查。我不是百分百确定我得到的是否有效,但至少有一些看起来如此...... https://chentiangemalc.wordpress.com/2015/04/17/experimental-use-of-64-bit-dump-of-32-bit-net-process-in-windbg/