使用 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文件:

      

      

      

posted @ 2017-08-21 15:27  那一剑的風情  阅读(4680)  评论(0编辑  收藏  举报