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文件,其過程如下:
- 顯式加載
DBGHELP.DLL
,並定位到MiniDumpWriteDump
函數地址 - 調用
MiniDumpWriteDump
函數生成DumpFileNamePrefix
前綴的minidump文件 - 調用
ContextDump
函數生成當前堆棧日誌文件 - 創建進程
CmdLine
如果指定,這裏一般會調用上傳程序把相關日誌記錄上傳到遠程服務器,由工程師統一調查處理。 - 創建進程
ExeNameToReboot
如果指定