我正在使用 WinAPI 在 C++/MFC 中进行编码。我的软件由本地服务和为登录的 Windows 用户提供用户界面的用户模式应用程序组成。我正在寻找一种方法来收集 .dmp 和 .hdmp 文件,以防这些模块中的任何一个发生崩溃。我知道WER应该收集它们并将它们提交给 Microsoft。有没有办法收集这些文件并将它们保存在硬盘上的某个位置?
PS。我需要它在 Windows XP SP3、Vista、7、8 下工作。
我正在使用 WinAPI 在 C++/MFC 中进行编码。我的软件由本地服务和为登录的 Windows 用户提供用户界面的用户模式应用程序组成。我正在寻找一种方法来收集 .dmp 和 .hdmp 文件,以防这些模块中的任何一个发生崩溃。我知道WER应该收集它们并将它们提交给 Microsoft。有没有办法收集这些文件并将它们保存在硬盘上的某个位置?
PS。我需要它在 Windows XP SP3、Vista、7、8 下工作。
Windows 2000 和 XP 已经使用 DrWatson 保存故障转储。运行drwtsn32.exe
允许您获取/配置日志和转储文件的路径。
Windows Vista+ 仅使用 WER,默认情况下不保存转储,但您可以启用创建用户模式转储。
我将HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\DumpType
值设置为 2 以保存完整转储,默认情况下存储在%LOCALAPPDATA%\CrashDumps
( C:\Users\dee.earley\AppData\Local\CrashDumps
) 中。
安装WinDebug 之类的调试器还可以让您在发生异常时从用户模式应用程序和服务中捕获异常。
如果您正在寻找一种在客户方面处理崩溃的方法,那么最好的解决方案是使用 google-breakpad 库。在您的情况下,异常处理程序将在磁盘上写入转储文件。
Microsoft 的 DebugDiag 工具对于监控进程以及在异常和崩溃时吐出转储文件非常有用。
http://www.microsoft.com/en-us/download/details.aspx?id=26798
我已经在多个客户环境中使用它来追踪我无法在自己的环境中重现的问题。