WinDbg 分析dump
阿新 • • 發佈:2021-06-24
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(intargc, 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則是不可多得的利器。