Winows下程式崩潰自動建立Dump檔案以方便跟蹤問題
阿新 • • 發佈:2018-12-10
首先定義一個預設的異常處理回撥函式:
LONG CrashHandler(struct_EXCEPTION_POINTERS* pExceptionInfo) { std::string dumpFileName = "./CrashDump.dump"; HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Get Dump Info MINIDUMP_EXCEPTION_INFORMATION dumpInfo; dumpInfo.ExceptionPointers = pExceptionInfo; dumpInfo.ThreadId = GetCurrentThreadId(); dumpInfo.ClientPointers = TRUE; // Write Dump MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL); CloseHandle(hDumpFile); return EXCEPTION_EXECUTE_HANDLER; }
然後在程式一開始呼叫API函式來設定這個回撥,這樣當程式異常崩潰的時候就會在當前目錄生成CrashDump.dump檔案,方便除錯跟蹤:
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CrashHandler);
---------------------------------------