Release版本崩溃/闪退调试dump文件方法

一、程序中加入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
  • 在Windbg最下方输入栏中输入分析指令
!analyze -v
# C++  调试  windbg 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×