一、程序中加入dump文件生成机制
#include <windows.h>
#include <DbgHelp.h>
#pragma comment( lib, "Dbghelp.lib" )
//程式异常捕获
LONG WINAPI ApplicationCrashHandler(EXCEPTION_POINTERS* pException)
{
//创建 Dump 文件
HANDLE hDumpFile = CreateFile(TEXT("crash.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // crash.dmp 崩溃生成文件名
if (hDumpFile != INVALID_HANDLE_VALUE)
{
//Dump信息
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
//写入Dump文件内容
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
}
return EXCEPTION_EXECUTE_HANDLER;
}
# main函数或DllMain中添加如下语句
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);//注册异常捕获函数
二、分析dump文件
- 运行程序生成dump文件
- 打开Windbg(注意区分32、64版本)
- 加载dump文件到Windbg
- 在Windbg最下方输入栏中设置调试符号下载路径
.sympath srv*C:\Symbols*https://msdl.microsoft.com/download/symbols
!analyze -v
评论区