LONG CrashHandler(EXCEPTION_POINTERS *pException) { CString dumpFileName = GetPresentTime() +_T(".dmp"); CreateDumpFile(dumpFileName, pException); return EXCEPTION_EXECUTE_HANDLER; }
//异常处理函数 LONG CrashHandler_Player(EXCEPTION_POINTERS *pException) { SYSTEMTIME systemTime; GetLocalTime(&systemTime); wchar_t wszFile[MAX_PATH] = {0,}; wsprintf(wszFile, TEXT("Player%04d%02d%02d %02d%02d%02d.dmp"), systemTime.wYear, systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond); CreateDumpFile(wszFile, pException); return EXCEPTION_EXECUTE_HANDLER; //返回值EXCEPTION_EXECUTE_HANDLER EXCEPTION_CONTINUE_SEARCH EXCEPTION_CONTINUE_EXECUTION }
void Catch_SEH_Exception(DWORD nSeCode, PEXCEPTION_POINTERS pException) { g_theKernel.SetExceptionMode(true); //保存最后的错误代码 DWORD dwLastError = ::GetLastError(); if(!pException) return; //生成基本描述文件 TCHAR szSmallInfoFile[MAX_PATH] = {0}; if(!CreateSmallDumpInfo(pException, szSmallInfoFile, dwLastError)) { return; } //生成完整表述文件 TCHAR szBigInfoFile[MAX_PATH] = {0}; if(!CreateBigInfoFile(pException, szBigInfoFile, dwLastError)) { return; } TCHAR szDumpFile[MAX_PATH] = {0}; CreateDumpFile(pException, szDumpFile); //寻找CrashReport TCHAR szCrashReportFile[MAX_PATH] = {0}; ::GetModuleFileName(NULL, szCrashReportFile, MAX_PATH); ::PathRemoveFileSpec(szCrashReportFile); ::PathAppend(szCrashReportFile, _T("CrashReport.exe")); TCHAR szCmdLine[1024] = {0}; _sntprintf(szCmdLine, 1024, _T("%s \"%s\" \"%s\" \"%s\""), szCrashReportFile, szSmallInfoFile, szBigInfoFile, szDumpFile); //启动CrashReport STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si,sizeof(STARTUPINFO)); ZeroMemory(&pi,sizeof(PROCESS_INFORMATION)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; if (::CreateProcess( NULL, szCmdLine, NULL, NULL, FALSE,CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &pi) == FALSE) { return; } }
LONG WINAPI UnhandledExceptionFilterEx(struct _EXCEPTION_POINTERS *pException){ CreateDumpFile(szMbsFile.c_str(), pException); // TODO: MiniDumpWriteDump FatalAppExit(-1, _T("Fatal Error")); return EXCEPTION_CONTINUE_SEARCH; }