何时准确创建了内存转储文件?

时间:2016-06-17 21:26:40

标签: c++ debugging windows-7 crash

我已经将Windows 7配置为在崩溃时创建迷你转储文件,但是当我的应用程序崩溃时,没有创建转储文件。搜索答案给我留下了confused,关于何时创建转储文件,Windows崩溃或我的应用程序崩溃?

在我的情况下,当我的应用程序崩溃时,我正在寻找转储文件。我收到一个典型的崩溃对话框,声明:

  

TheApp Application已停止工作

     

Windows可以在线查看问题的解决方案

     

- >在线检查解决方案并关闭程序

     

- >关闭程序

     

- >调试程序

因此,当我的应用程序崩溃时,我可以生成转储文件吗?我不能在开发机器上产生这个bug,所以我想从dump文件中返回。是否还有其他选项来跟踪bug的来源(源代码)?

3 个答案:

答案 0 :(得分:4)

首先,有不同的地方可以配置"在崩溃时创建一个minidump"设置,完全不同。

  1. 您可以将Windows配置为在Windows崩溃时创建内核转储文件,即发生死亡蓝屏(BSOD)时。这在Windows 7的以下屏幕中完成:

    Kernel minidump for Windows crashes

  2. 您可以将Windows配置为在应用程序崩溃时创建用户模式转储文件,即代替&#34; Windows错误报告&#34;通常会出现的对话框。为此,您事先知道,然后配置名为LocalDumps (MSDN) 的注册表项。默认情况下,转储将在%LOCALAPPDATA%\CrashDumps下创建,并且它们将具有命名方案app.exe.<PID>.dmp

    WER dialog

  3. 为了完整起见,可能还有其他触发器。唯一确定的方法是:调用方法MiniDumpWriteDump (MSDN)时。

  4. 我很确定你想要上面的选项2。如果您遇到问题,请查看是否已完成所有conditions for LocalDump

    @antlersoft给出的答案不起作用,原因I have posted in my blog:在显示对话框时,Windows触发了一个断点来停止应用程序并且它已经注入了一个Windows错误报告的调用栈。总而言之,这不是调试的良好起点。

    可行的是:

    1. 附加您选择的调试器
    2. 按&#34; Go&#34;在调试器中
    3. 按&#34;调试&#34; WER对话框的按钮
    4. 确认已附加调试器的警告
    5. 点击&#34;否&#34;当被要求使用所选调试器
    6. 开始调试时

      建议不要使用任务管理器创建故障转储,因为它不会考虑应用程序的位数,这可能会在以后造成麻烦。请参阅ways to create good and useful crash dumps

答案 1 :(得分:1)

Windows崩溃时创建Minidump。它并不打算让应用程序崩溃。

如果要调试应用程序的崩溃,可以在启动后将其附加到调试器。应用程序崩溃时单击“调试”按钮也会执行相同操作。例如,您可以使用MS Visual Studio的调试器来执行此操作。

有关将进程附加到MS Visual Studio调试器的帮助,请参阅此页面: https://msdn.microsoft.com/en-us/library/3s68z0b3.aspx

编辑:删除文字后,因为这可能无法按预期工作(托马斯的评论)

您也可以从任务管理器创建转储文件,但是您仍然需要一个调试器来分析它,实际上我不确定您是否能够在应用程序崩溃时获取转储文件。如果可以,最好的方法是在目标计算机上启动或发生崩溃后将其附加到调试器上来调试该进程。

答案 2 :(得分:1)

当您收到崩溃对话框时,转到任务管理器,找到该过程,右键单击该过程,然后选择“创建转储文件”。转储文件在AppData / Local / Temp文件夹中为用户创建;它将被命名为%AppData%\ Local \ Temp \ .DMP;如果你创建多个它将是-1.DMP等。您可以将转储文件移动到您的开发机器并在Visual Studio中打开它。然后,Visual Studio将在调试器中运行该进程时,在崩溃时点击“全部中断”。