1.首先包含 头文件
#include <dbghelp.h>
2.编写自己的 unhandle exception函数
LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *lpTopLevelExceptionFilter)
{
if( IDYES == ::MessageBox(0,"Click yes to save crash dump file, click No to cancel it", "Crash Report",MB_YESNO) )
{
//生成 mini crash dump
BOOL bMiniDumpSuccessful;
TCHAR* szFileName = "c://test.dmp";
TCHAR* szVersion = "v1.0";
DWORD dwBufferSize = MAX_PATH;
HANDLE hDumpFile;
MINIDUMP_EXCEPTION_INFORMATION ExpParam;
hDumpFile = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);
ExpParam.ThreadId = GetCurrentThreadId();
ExpParam.ExceptionPointers = lpTopLevelExceptionFilter;
ExpParam.ClientPointers = TRUE;
bMiniDumpSuccessful = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
hDumpFile, MiniDumpWithDataSegs, &ExpParam, NULL, NULL);
}
return EXCEPTION_EXECUTE_HANDLER;
}
3在程序的开始处注册自己的回调函数
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
4. 在工程中链接dbghelp.lib
google brakpad可以保存dump的文件,也可以进行多进程间通过命名管道来保存dump文件,但是一直没有试成功。
5. 打开windbg,然后选择“open crash dump”,就可以打开dmg文件了
6.设置好源文件路径,输入.ecxr就能看到crash的地方了。