SetUnhandledExceptionFilter(CustomFilter);
LONG __stdcall CustomFilter(EXCEPTION_POINTERS* pep)
{
// 生成dump文件名
CString strDumpFile;
CTime tCur = CTime::GetCurrentTime();
strDumpFile.Format(_T("%sdump files\\_%s.dmp"), GetAppPath(), tCur.Format(_T("%Y%m%d%H%M%S")));
// 创建dump文件
CreateMiniDump(pep, strDumpFile);
RunCrashReporter(strDumpFile);
DWORD dwProgressID = GetCurrentProcessId();
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProgressID);
if (INVALID_HANDLE_VALUE != hProcess)
{
::TerminateProcess(hProcess, -1);
::CloseHandle(hProcess);
}
return EXCEPTION_EXECUTE_HANDLER;
}
void RunCrashReporter( LPCTSTR lpDumpFile )
{
CString strExcute ;
strExcute.Format( _T("%sCrashLog.exe"),GetAppPath() );
ShellExecute(NULL, _T("open"), strExcute, strCommand, NULL, SW_SHOWNORMAL);
}
windbg常用cmd: !analyze -v
之后用lm命令看是否加载成功pdb文件.
STACK_TEXT, 可以看调用堆栈.