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则是不可多得的利器。