我无法通过更改系统设置从我的进程中创建小型转储。所以我的问题是:
- 系统崩溃时是否会为用户进程创建一个小型转储
如果是,我需要配置哪个设置
还是我必须以编程方式创建小型转储。
调查崩溃时小型转储的效果如何
我正在使用 Windows XP、C++、VC6
原文由 Satbir 发布,翻译遵循 CC BY-SA 4.0 许可协议
我意识到这是一个老问题,但就系统设置(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 上生成和管理用户模式故障转储的最简单方法。
原文由 Vasilios Magriplis 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您需要以编程方式创建一个小型转储(有一个例外,请参阅下一个链接)。 CodeProject 有 一篇关于 MiniDumps 的好文章。基本上,您想使用
dbghelp.dll
,并使用功能MiniDumpWriteDump()
(参见 MiniDumpWriteDump 上的 MSDN )。这种转储的效果在很大程度上取决于应用程序。有时,对于优化的二进制文件,它们实际上是无用的。此外,如果没有经验,堆/堆栈损坏错误会导致您误入歧途。
但是,如果优化器对您来说不是太难,那么转储 确实有 帮助的一大类错误,即具有堆栈跟踪 + 本地使用变量的值的所有错误都是有用的,即许多纯虚拟-函数调用事物(即错误的销毁顺序)、访问冲突(未初始化的访问或缺少 NULL 检查)等。
顺便说一句,如果您的维护策略允许,请将您的应用程序从 VC6 移植到可接受的位置,例如 VC8 或 9。您会帮自己一个大忙。