使用 WinDbg 分析dump文件


步驟一:

  生成dump文件。

#include <Windows.h>  
#include <iostream>  
#include <DbgHelp.h>
#include <tchar.h>
using namespace std;

#pragma comment(lib, "dbghelp.lib")

LONG WINAPI TopLevelExceptionFilter(struct _EXCEPTION_POINTERS *pExceptionInfo)    
{  
    cout << "Enter TopLevelExceptionFilter Function" << endl;    
    HANDLE hFile = CreateFile( _T("project.dmp"),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);  //創建dmp文件
    MINIDUMP_EXCEPTION_INFORMATION stExceptionParam;    
    stExceptionParam.ThreadId    = GetCurrentThreadId();    
    stExceptionParam.ExceptionPointers = pExceptionInfo;    
    stExceptionParam.ClientPointers    = FALSE;    
    MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),hFile,MiniDumpWithFullMemory,&stExceptionParam,NULL,NULL);  //寫dmp文件
    CloseHandle(hFile);    
    getchar();  
    return EXCEPTION_EXECUTE_HANDLER;  
}  

int main()  
{  
    cout<<"Enter Main Function"<<endl;  
    SetUnhandledExceptionFilter(TopLevelExceptionFilter);   //設置異常捕獲函數 TopLevelExceptionFilter
    int *pValue = NULL;
    //int a = 1;
    //pValue = &a;
    //*pValue = 2;
    //cout<<*pValue<<endl;
    cout<<"Invalid Access"<<endl;  
    *pValue = 1;    //寫 0地址,程序崩潰
    cout<<"Finish Main Function"<<endl;  
    getchar();  

    return 0;  
} 

 

  1. 把dbghelp.dll 放置在生成的exe路徑下:

    

  2. 執行exe,生成dmp文件:

    

 

步驟二:

  使用 WinDbg 分析 dmp 文件。

  1.安裝WinDbg

  2.設置WinDbg

    a.設置符號表路徑:

      

      

    b.設置源代碼路徑:

      

       

    c.dmp文件導入:

      

      

 

    d.使用命令:!analyze -v 分析dmp文件:

      

      

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM