1. 程式人生 > >Winows下程式崩潰自動建立Dump檔案以方便跟蹤問題

Winows下程式崩潰自動建立Dump檔案以方便跟蹤問題

首先定義一個預設的異常處理回撥函式:

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);

---------------------------------------