1. 程式人生 > 實用技巧 >Windows C++ 程式崩潰收集工具

Windows C++ 程式崩潰收集工具

Windows C++ 程式崩潰收集工具

說明

MiniDumper(LPCTSTR DumpFileNamePrefix)

MiniDumper(LPCTSTR DumpFileNamePrefix, LPCTSTR CmdLine, LPCTSTR ExeNameToReboot /* = NULL */)

DumpFileNamePrefix 崩潰檔名字首

CmdLine 生成崩潰檔案後執行命令(包含引數)

ExeNameToReboot 生成崩潰檔案後執行指定程式

使用示例

在崩潰時呼叫指定的程式,下面的示例是呼叫CrashReport.exe上傳到指定的伺服器

#include "PostMortem.h"

char *szArgs = new char[2048];
ZeroMemory(szArgs, 2048);
StringCbPrintf(szArgs, 2048, _T("./CrashReport.exe \"dumper.wanwanol.com\" \"%s\""), g_pLogSys->GetLogFileName());
MiniDumper g_MiniDumper(_T("Client"), szArgs);
SAFE_DELETE_ARRAY(szArgs);

大致說明

MiniDumper 初始化時呼叫 Win32 API SetUnhandledExceptionFilter 註冊過濾函式TopLevelFilter
當發生崩潰時會呼叫TopLevelFilter生成minidump檔案,其過程如下:

  1. 顯式載入DBGHELP.DLL,並定位到MiniDumpWriteDump函式地址
  2. 呼叫MiniDumpWriteDump函式生成DumpFileNamePrefix字首的minidump檔案
  3. 呼叫ContextDump函式生成當前堆疊日誌檔案
  4. 建立程序CmdLine如果指定,這裡一般會呼叫上傳程式把相關日誌記錄上傳到遠端伺服器,由工程師統一調查處理。
  5. 建立程序ExeNameToReboot如果指定

Github 倉庫地址