我无法通过更改系统设置来创建我的流程的minidump。所以我的问题是 :
系统崩溃时是否会为用户进程创建一个小型转储
如果是,我需要配置哪个设置
或者我是否必须以编程方式创建minidump。
调查崩溃时小型车的效果如何
我正在使用Windows XP,C ++,VC6
答案 0 :(得分:28)
您需要以编程方式创建一个minidump(有一个例外,请参阅下一个链接)。 CodeProject有一个很好的article on MiniDumps。基本上,您希望使用dbghelp.dll
,并使用函数MiniDumpWriteDump()
(请参阅MSDN on MiniDumpWriteDump)。
此类转储的有效性在很大程度上取决于应用程序。有时,对于优化的二进制文件,它们实际上是无用的。此外,没有经验,堆/堆栈损坏错误将导致您误入歧途。
但是,如果优化器对你来说不是太难,那么转储做帮助就会出现一大类错误,即所有具有堆栈跟踪的错误+本地的值使用的变量很有用,即许多纯虚函数调用事物(即错误的破坏顺序),访问冲突(未初始化访问或缺少NULL检查)等。
顺便说一句,如果您的维护策略以某种方式允许它,将您的应用程序从VC6移植到可接受的东西,如VC8或9.您将自己做一件大事。答案 1 :(得分:15)
答案 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可能值得一看。在远程最终用户计算机上运行时,这具有在调试器内部发生崩溃的许多优点。