dump文件生成---備忘

先調用SetUnhandledExceptionFilter()設置異常處理函數,這樣在發生未處理的異常時系統就會調用你設置的異常處理函數,再在你的異常處理函數裏調用MiniDumpWriteDump()生成dmp文件就可以了,就兩個函數而已,函數用法請查看MSDN。

(PS:SetUnhandledExceptionFilter()並不能處理所有的異常,比如CRT異常需要調用_set_invalid_parameter_handler()纔行。)

//設置異常處理回調函數
SetUnhandledExceptionFilter(UnhandledExceptionFilter);
 
 
//異常處理代碼
//EXCEPTION_EXECUTE_HANDLER equ 1 表示我已經處理了異常,可以優雅地結束了  
//EXCEPTION_CONTINUE_SEARCH equ 0 表示我不處理,其他人來吧,於是windows調用默認的處理程序顯示一個錯誤框,並結束  
//EXCEPTION_CONTINUE_EXECUTION equ -1 表示錯誤已經被修復,請從異常發生處繼續執行  
LONG UnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
    CString   strDumpFile; 
    strDumpFile.Format("%d",CTime::GetCurrentTime().GetTickCount());
    strDumpFile   +=   ".dmp "
    HANDLE   hFile   =   CreateFile(strDumpFile,   GENERIC_WRITE,   FILE_SHARE_WRITE,  
                         NULL,   CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,   NULL   ); 
 
    if   (hFile!=INVALID_HANDLE_VALUE) 
    
        MINIDUMP_EXCEPTION_INFORMATION   ExInfo; 
 
        ExInfo.ThreadId   =   ::GetCurrentThreadId(); 
        ExInfo.ExceptionPointers   =   ExceptionInfo; 
        ExInfo.ClientPointers   =   NULL; 
 
        //   write   the   dump 
        BOOL   bOK   =   MiniDumpWriteDump(GetCurrentProcess(),   GetCurrentProcessId(),   hFile,   MiniDumpNormal,   &ExInfo,   NULL,   NULL   ); 
        CloseHandle(hFile); 
    
 
    theApp.PostThreadMessage(WM_QUIT,0,0);
    return EXCEPTION_EXECUTE_HANDLER;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章