如何在崩溃时为我的进程创建minidump?

Sat*_*bir 31 c++ windows debugging minidump

我无法通过更改系统设置来创建我的流程的minidump.所以我的问题是:

  • 当系统崩溃时,系统是否会为用户进程创建一个minidump

    如果是,我需要配置哪个设置

  • 或者我必须以编程方式创建minidump.

  • 在调查崩溃时小型泵的效果如何

我使用的是Windows XP,C++,VC6

gim*_*mpf 28

您需要以编程方式创建一个minidump(有一个例外,请参阅下一个链接).CodeProject有一篇关于MiniDumps的好文章.基本上,您要使用dbghelp.dll,并使用该函数MiniDumpWriteDump()(请参阅MiniDumpWriteDump上的MSDN).

这种转储的有效性在很大程度上取决于应用程序.有时,对于优化的二进制文件,它们实际上是无用的.此外,没有经验,堆/堆栈损坏错误将导致您误入歧途.

但是,如果优化器对你来说不是太难,那么转储确实有一大堆错误,即所有具有堆栈跟踪+本地使用变量值的错误都是有用的,即许多纯虚拟错误函数调用事物(即错误的销毁订单),访问冲突(未初始化访问或缺少NULL检查)等.

顺便说一句,如果您的维护策略以某种方式允许它,将您的应用程序从VC6移植到可接受的东西,如VC8或9.您将自己做一件大事.


Sat*_*bir 15

感谢所有观看和回复特别感谢gimpf,我在网上搜索和msdn.

我在debugInfo.com上发现了一篇很好的文章.这个值得一读:

有效的小型转储


小智 6

我意识到这是一个老问题,但就系统设置(OP 的第一个点)而言,您可以启用设置以使用 Windows 错误报告的内置自动崩溃转储生成。此处记录: https: //learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps。由于这需要提升,因此最好手动设置(假设您是管理员)或在应用程序安装时设置。如果您的应用程序不需要提升,我不建议在运行时设置它。

本质上,您可以在下面创建一个新密钥HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\<app_name.exe>并自定义其中的选项。这样做的好处是,故障转储是自动生成的,您可以控制它们的存储位置、类型和包含的信息,以及保留多少转储。

这可能是在 Windows 上生成和管理用户模式故障转储的最简单方法。


Ted*_*rek 5

我们在 Firefox 中使用Google Breakpad,尽管这至少需要 Visual C++ 2003。好处是它还支持 OS X 和 Linux。