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

时间:2009-10-10 06:31:12

标签: c++ windows debugging minidump

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

  • 系统崩溃时是否会为用户进程创建一个小型转储

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

  • 或者我是否必须以编程方式创建minidump。

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

我正在使用Windows XP,C ++,VC6

5 个答案:

答案 0 :(得分:28)

您需要以编程方式创建一个minidump(有一个例外,请参阅下一个链接)。 CodeProject有一个很好的article on MiniDumps。基本上,您希望使用dbghelp.dll,并使用函数MiniDumpWriteDump()(请参阅MSDN on MiniDumpWriteDump)。

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

但是,如果优化器对你来说不是太难,那么转储帮助就会出现一大类错误,即所有具有堆栈跟踪的错误+本地的值使用的变量很有用,即许多纯虚函数调用事物(即错误的破坏顺序),访问冲突(未初始化访问或缺少NULL检查)等。

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

答案 1 :(得分:15)

感谢所有观看和回复特别感谢gimpf,我用互联网和msdn搜索。

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

effective minidumps

答案 2 :(得分:4)

我们在Firefox中使用Google Breakpad,虽然这至少需要Visual C ++ 2003.好的一面好处是它还支持OS X和Linux。

答案 3 :(得分:2)

我最终在Windows上使用CrashRpt(要求我将整个代码库和工具链从MinGW移动到本机Microsoft C / C ++编译器),以及在Linux上使用google-breakpad。

答案 4 :(得分:1)

如果你有一些空余的AQtrace可能值得一看。在远程最终用户计算机上运行时,这具有在调试器内部发生崩溃的许多优点。