1. 程式人生 > 其它 >WinDbg 分析dump

WinDbg 分析dump

1、生成dump檔案。

在程式碼捕獲異常,並將異常寫入dump檔案。

#include "stdafx.h"
#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(int
argc, char* argv[]) { cout<<"Enter Main Function"<<endl; SetUnhandledExceptionFilter(TopLevelExceptionFilter); //設定異常捕獲函式 TopLevelExceptionFilter int *pValue = NULL; cout<<"Invalid Access"<<endl; *pValue = 1; //寫 0地址,程式崩潰 cout<<"Finish Main Function"<<endl; return 0; }

編譯後執行exe檔案,併產生dump檔案。

2、使用windbg設定分析dump檔案。

設定符號表路徑:

設定原始碼路徑:

匯入dmp檔案:

檔案匯入後如下圖所示:

使用命令:!analyze -v分析dmp檔案:

這裡起個拋磚引玉的作用,讀者也可以除錯自己的程式。筆者在10年前除錯windows驅動程式時windbg則是不可多得的利器。