步驟一:
生成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文件: