欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++软件添加dump调试打印日志

程序员文章站 2022-09-14 17:40:42
#include #pragma comment(lib, "dbghelp.lib") LONG WINAPI TopLevelExcepti...
#include

#pragma comment(lib, "dbghelp.lib")

LONG WINAPI TopLevelExceptionFilter(struct _EXCEPTION_POINTERS *pExceptionInfo)
{
//cout << "Enter TopLevelExceptionFilter Function" << endl;
  TCHAR szPath[MAX_PATH] = { 0 };
  TCHAR szFileName[MAX_PATH] = { 0 };
  TCHAR* szVersion = "v1.0";
  TCHAR dwBufferSize = MAX_PATH;
  SYSTEMTIME stLocalTime;
  GetLocalTime(&stLocalTime);
  CreateDirectory(szFileName, NULL);
  StringCchPrintf(szFileName, MAX_PATH, "%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp",
  szVersion, stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
  stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond,
  GetCurrentProcessId(), GetCurrentThreadId());

  HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
 MINIDUMP_EXCEPTION_INFORMATION stExceptionParam;
stExceptionParam.ThreadId = GetCurrentThreadId();
stExceptionParam.ExceptionPointers = pExceptionInfo;
stExceptionParam.ClientPointers = FALSE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpWithFullMemory, &stExceptionParam, NULL, NULL);
CloseHandle(hFile);
getchar();

return EXCEPTION_EXECUTE_HANDLER;
}

//-----------------------------------------------------------------------------------------

在程序最开始的地方调用这个函数

SetUnhandledExceptionFilter(TopLevelExceptionFilter);