<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    DMP文件的生成和使用

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    1、生成dmp的程序

    #include  <dbghelp.h> 
    #pragma comment(lib,  "dbghelp.lib")


    //設置異常處理回調函數
    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;
    }

    2、調試dump文件

        1)用windbg。

        2)用vc,把dmp文件和exe, pdb文件放在同一目錄下, 然后用編譯器(如vc)打開, 然后開始調試就會中斷到剛才中斷的地方.


    3、以下是網上搜集到的條件,尚未驗證是否是必需的,如果不能正確的生成dmp,可嘗試以下方法

        1)SetUnhandledExceptionFilter()并不能處理所有的異常,比如CRT異常需要調用_set_invalid_parameter_handler()才行

        1)要設置c運行庫異常處理函授。這樣當出錯后,會引發你的異常處理,你的處理中,可以直接丟掉或重新啟動你的exe,或寫入log文件。

        2)注意生成的release應用程序需要開啟“生成調試信息”選項。

        2)使用VS2008的話,不需要開啟“生成調試信息”選項就可以生成的。

        3)編譯release版本的時候同時生成map文件,具體可以在網上查找一下關于map文件的使用方法。

        3)生成可執行文件時在工程屬性設置里的“調試”選項里將“生成映射文件”設置為“是”。這主要是用來在出錯時通過dump和map文件對錯誤定位。

    4、其他工具

        1)生成dump文件需要Dr.Watson,它是Windows自帶的調試工具,只要對它進行了設置,程序出錯后就可以在相應目錄下找到dump文件。可參見如下資料:http://hi.baidu.com/mryongzhang/blog/item/11a774edf9b513d72e2e2167.html

        2)adplus是最有用的工具,http://support.microsoft.com/kb/286350/

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全