崩溃时如何为我的进程创建小型转储?

新手上路,请多包涵

我无法通过更改系统设置从我的进程中创建小型转储。所以我的问题是:

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

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

  • 还是我必须以编程方式创建小型转储。

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

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

原文由 Satbir 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 447
2 个回答

您需要以编程方式创建一个小型转储(有一个例外,请参阅下一个链接)。 CodeProject 有 一篇关于 MiniDumps 的好文章。基本上,您想使用 dbghelp.dll ,并使用功能 MiniDumpWriteDump() (参见 MiniDumpWriteDump 上的 MSDN )。

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

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

顺便说一句,如果您的维护策略允许,请将您的应用程序从 VC6 移植到可接受的位置,例如 VC8 或 9。您会帮自己一个大忙。

原文由 gimpf 发布,翻译遵循 CC BY-SA 2.5 许可协议

我意识到这是一个老问题,但就系统设置(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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题