C++ 什么时候创建内存转储文件?
我已将windows 7配置为在崩溃时创建迷你转储文件,但当我的应用程序崩溃时,没有创建转储文件。对答案的搜索让我想起了何时创建转储文件、何时windows崩溃或何时我的应用程序崩溃 在我的例子中,当我的应用程序崩溃时,我正在寻找转储文件。我收到一个典型的崩溃对话框,其中说明: 应用程序已停止工作 Windows可以联机检查该问题的解决方案 ->联机检查解决方案并关闭程序 ->关闭程序 ->调试程序C++ 什么时候创建内存转储文件?,c++,debugging,windows-7,crash,C++,Debugging,Windows 7,Crash,我已将windows 7配置为在崩溃时创建迷你转储文件,但当我的应用程序崩溃时,没有创建转储文件。对答案的搜索让我想起了何时创建转储文件、何时windows崩溃或何时我的应用程序崩溃 在我的例子中,当我的应用程序崩溃时,我正在寻找转储文件。我收到一个典型的崩溃对话框,其中说明: 应用程序已停止工作 Windows可以联机检查该问题的解决方案 ->联机检查解决方案并关闭程序 ->关闭程序 ->调试程序 那么,当我的应用程序崩溃时,我可以为它生成转储文件吗?我不能在开发机器上产生这个bug,所以我想
那么,当我的应用程序崩溃时,我可以为它生成转储文件吗?我不能在开发机器上产生这个bug,所以我想从转储文件返回。是否有任何其他选项可以跟踪bug的来源(到源代码)?当Windows崩溃时,会创建迷你转储。它并不是为了让应用程序崩溃 如果要调试应用程序的崩溃,可以在启动后将其附加到调试器。当应用程序崩溃时,单击“调试”按钮也会这样做。例如,您可以使用MS Visual Studio的调试器来执行此操作 有关将进程附加到MS Visual Studio调试器的帮助,请参见此页: 编辑:删除以下文本,因为这可能无法按预期工作(Thomas的评论)
您也可以从task manager创建转储文件,但是您仍然需要一个调试器来分析它,实际上我不确定您是否能够在应用程序崩溃时获取转储文件。如果可以,最好的方法是在目标计算机上调试进程,方法是在进程启动后或崩溃发生时将其附加到调试器。当您获得崩溃对话框时,转到任务管理器,找到该进程,右键单击该进程,然后选择“创建转储文件”。转储文件在用户的AppData/Local/Temp文件夹中创建;它将被命名为%AppData%\Local\Temp\.DMP;如果创建多个文件,它将是-1.DMP,等等。您可以将转储文件移动到开发机器上,并在Visual Studio中打开它。然后,Visual Studio将表现为在调试程序中运行进程时,在崩溃点点击“全部中断”按钮。首先,有不同的位置可以配置“在崩溃时创建小型转储”设置,这是完全不同的
%LOCALAPPDATA%\CrashDumps
下创建,并具有命名方案app.exe..dmp
不推荐使用任务管理器创建崩溃转储,因为它不会考虑应用程序的易失性,这可能会在以后引起麻烦。请参阅。
您可以从任务管理器中的任何正在运行的进程创建转储。@antlersoft这正是我需要的,它是在崩溃时创建的吗?如果你能告诉我是怎么做的。当有人调用MiniDumpWriteDump()时。如果你想让它自动化,谷歌“wer create dump”。问题是崩溃发生在目标机器上的发布构建中。我仍然可以安装调试器,但从IDE启动调试器时不会发生这种情况。即使从命令行启动调试器,也可以将文件附加到调试器。只需启动调试器并单击“附加进程”,然后在正在运行的进程列表中选择该进程。您也可以单击“调试”按钮,在它崩溃后附加它。任务管理器不是一个好的选择,因为它不会创建正确位的转储。@shrike:谢谢。看看为什么bitness和其他东西很重要。根据Thomas Weller的回答,“它不是为了应用程序崩溃。”这句话似乎不正确。如果将“启动和恢复”对话框配置为创建用户转储文件(=小内存转储?),则应在应用程序崩溃时创建该文件?这听起来很有希望,但您是否确定,当它只是发出一条消息,表明它已停止工作且基本上没有响应时,它仍将创建转储文件?:)@zar-进程仍在内存中,可以让调试器附加,因此您可以创建转储。您是否执行过此操作,并因此分析了转储?您将很难使用它,因为它会在断点处停止,而不是您希望出现的异常。任务管理器不是一个好的选择,因为它不会创建正确比特数的转储。因此,请将您的答案与@ThomasWeller结合起来,我相信这个文件可能是自动创建的,因为我已经为用户模式选择了迷你转储文件?但我在%AppData%文件夹中找不到该文件。那里没有文件,只有文件夹。转储文件的名称应该是什么?非常有用的答案;没有