【问题标题】:Reading a Dump File in VS2010 64/32 Bit Conflict在 VS2010 64/32 位冲突中读取转储文件
【发布时间】:2013-08-16 19:23:33
【问题描述】:

我正在尝试读取 VS2010 中的转储文件,希望获得在我的发布版本中发生崩溃的位置的堆栈跟踪。但是,当我在 VS2010 中打开转储文件时,它指出

您无法调试 32 位进程的 64 位转储,您必须收集 32 位进程的 32 位转储

现在我的应用程序是 32 位的,它在 64 位系统上运行。那么这是否意味着我现在无法读取转储文件,因为它在 64 位系统上运行?有什么建议么 ?转储文件是在 Windows 7 上使用 64 位任务管理器生成的。如果我在 Windows 7 中运行 32 位任务管理器并从中生成转储文件,是否可以解决问题?

【问题讨论】:

    标签: c++ visual-studio-2010 crash-dumps


    【解决方案1】:

    您仍然可以使用 Windows 调试工具包中的 WinDbg 打开此转储。

    要在 x64 系统中为 Win32 应用程序生成良好的转储,您需要使用 MiniDumpWriteDump API 的 Win32 版本创建转储。从 appbar 内容菜单或 Ctrl+Shift+Esc 热键(以及 Process Explorer)启动的常规任务管理器属于操作系统位数,并且生成的转储没有帮助。 32 位转储可以由 Visual Studio 本身进行,附加到进程,暂停它并从菜单中保存小型转储,或者使用 32 位任务管理器直接启动:C:\Windows\SYSWOW64\taskmgr.exe

    我正在使用LogProcessExceptions 实用程序(我相信还有很多其他实用程序)来生成有关异常和交互式请求的小型转储。由于该实用程序可用于 Win32 和 x64 位,32-bit version of the tool 将为您提供所需的转储。

    【讨论】:

    • 那么当我的程序崩溃而不是使用任务栏时,我应该使用 LogProcessExceptions 生成日志吗?
    • 您有很多选择:您可以使用任何最终调用MiniDumpWriteDump 的32 位应用程序来生成您的应用程序的转储,或者甚至为此目的编写您自己的工具。它非常简单,只涉及这个单一的 API 调用。
    【解决方案2】:

    是的,使用 32 位任务管理器创建 32 位进程的转储是可行的方法。

    在 32 位进程上使用 64 位任务管理器会创建一个 wow64 故障转储,这并不是很有用。

    这是一个相关的 MSDN 博客:http://blogs.msdn.com/b/amb/archive/2012/05/28/10163879.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2019-05-20
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多