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, 可以看调用堆栈.
本文介绍了一种自定义异常过滤器的方法,该过滤器在遇到未处理的异常时生成dump文件并运行崩溃报告程序。此外,还介绍了如何使用Windbg进行基本的调试操作。
881

被折叠的 条评论
为什么被折叠?



