当一个进程因为未处理异常而终止时,Windows错误报告(Error Reporting,简称WER)会创建关于未处理异常及其执行上下文的错误报告。
如果得到用户的许可,这个报告就会通过安全信道发送给Microsoft 的服务器,在那里它会和数据库里的已知问题做比较。如果数据库里已经有这个问题的解决方案,服务器会将它发送给用户,这样用户就可以采取相应步骤来继续完成自己的工作。
有时,我们可能想让应用程序通过调用一系列的Windows错误报告函数定制错误报告。
下面是我们可能需要定制错误报告的三种情况:
1、我们在编写自己的未处理异常过滤程序;
2、我们想要应用程序在未处理异常没有发生的情况下也生成报告;
3、我们想往错误报告里添加更多信息;
定制问题报告的一种简单方式是指出哪些数据块或者文件需要添加到为进程生成的每个问题报告里。
要添加任意数据块,我们可以调用:
HRESULT WerRegisterMemoryBlock( PVOID pvAddress, DEORD dwSize);
要添加任意文件到问题报告中,我们只需调用:
HRESULT WerRegisterFile( PCWSTR pwzFilename, WER_REGISETER)_FILE_TYPE regFileType, DWORD dwFlags );
这两个函数都存在于wer.dll中,并在werapi.h中声明。
已发送报告的跟踪信息保存在当前用户的AppData\Local\Microsoft\Windows\ WER\ ReportArchive 目录。
未发送报告队列保存在当前用户的AppData\Local\Microsoft\Windows\ WER\ ReportQueue 目录。
在以后版本的Windows中,dump文件的名字可能会改变。以后的版本将会包含错误程序的名字,但是后缀名.hdmp/.mdmp保持变。比如MyApp.exe.hdmp 和 MyApp.exe.mdmp 会被用来代替Memory.hdmp 和 MiniDump.mdmp
参考文献:Windows 核心编程(第五版)