我无法通过更改系统设置来创建我的进程的小型转储文件。因此,我的问题是:
当用户进程崩溃时,系统是否会创建一个小型转储文件?
如果是,我需要配置哪些设置?
还是说我必须在程序中动态地创建小型转储文件?
研究崩溃时,小型转储文件有多有效?
我正在使用Windows XP,C ++,VC6。
你需要通过编程创建迷你转储文件(有一个例外,请参见下一个链接)。CodeProject上有一篇关于MiniDumps的好文章。基本上,你需要使用dbghelp.dll
,并使用函数MiniDumpWriteDump()
(请参阅MSDN关于MiniDumpWriteDump)。
这些转储文件有多有效取决于应用程序。有时,对于优化二进制文件,它们几乎是没有用的。此外,如果没有经验,堆栈损坏错误将使你误入歧途。
但是,如果优化器对你不是太苛刻,那么有一个大类错误在其中转储文件是有帮助的,即所有需要有堆栈跟踪+本地变量值的错误,例如许多纯虚函数调用的问题(即错误的销毁顺序),访问冲突(未初始化的访问或缺少NULL检查)等。
顺便说一句,如果您的维护策略允许,将应用程序从VC6移植到像VC8或9这样可接受的东西会使自己受益匪浅。
MiniDumpWriteDump
。如果创建了一个minidump,请使用Visual Studio 2022打开它。你的新生活开始了 :) - Chef GladiatorHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\<app_name.exe>
下创建一个新键,并在那里自定义选项。好处在于崩溃转储会自动生成,您可以控制它们存储的位置、类型和包含哪些信息,以及保留多少个转储。
这可能是在Windows上生成和管理用户模式崩溃转储最简单的方法。我最终在Windows上使用了CrashRpt(这要求我将整个代码库和工具链从MinGW迁移到本机的Microsoft C/C++编译器),在Linux上使用了google-breakpad。