C++程式崩潰時,生成dmp除錯檔案
阿新 • • 發佈:2019-02-20
包含如下標頭檔案 和 引用Lib庫
#include <dbghelp.h>
#pragma comment(lib, "dbghelp.lib")
定義
在程式初始化的時候 設定如下語句LONG WINAPI MyUnhandledFilter(struct _EXCEPTION_POINTERS *lpExceptionInfo) { LONG ret = EXCEPTION_EXECUTE_HANDLER; TCHAR szFileName[64]; SYSTEMTIME st; ::GetLocalTime(&st); wsprintf(szFileName, TEXT("TCP_%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, GetCurrentProcessId(), GetCurrentThreadId()); HANDLE hFile = ::CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); if (hFile != INVALID_HANDLE_VALUE) { MINIDUMP_EXCEPTION_INFORMATION ExInfo; ExInfo.ThreadId = ::GetCurrentThreadId(); ExInfo.ExceptionPointers = lpExceptionInfo; ExInfo.ClientPointers = false; // write the dump BOOL bOK = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL ); ::CloseHandle(hFile); } else { //printf("Create File %s Failed %d\n", szFileName, GetLastError()); } ::MessageBox(NULL, "程式遇到問題需要關閉!", "提示", MB_OK); return ret; }
SetUnhandledExceptionFilter(&MyUnhandledFilter);