win32下生成dmp文件

#include  <dbghelp.h>
#pragma comment(lib,  "dbghelp.lib")
#include <eh.h>// 别忘记将编译器设定成 /EHa!

set_terminate(my_terminate_handler);

SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);

LONG WINAPI MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionPtrs)
{
    // Do something, for example generate error report
     //..
     // Execute default exception handler next
 ExceptionHandler2(pExceptionPtrs);
    return EXCEPTION_EXECUTE_HANDLER;
}

void my_terminate_handler()
{
     // Abnormal program termination (terminate() function was called)
      // Do something here
      // Finally, terminate program
 std::cout << "terminate.\n";
 exit(1);
}

 

unsigned long ExceptionHandler2(LPEXCEPTION_POINTERS pExceptionPointers)
{
 char szFile[512];

 SYSTEMTIME stLocalTime;
 GetLocalTime( &stLocalTime );

 sprintf_s(szFile, "dmp_%04d%02d%02d_%02d-%02d-%02d.dmp",stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
  stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond);
 
 WCHAR wszClassName[256]; 
 memset(wszClassName,0,sizeof(wszClassName)); 
 MultiByteToWideChar(CP_ACP,0,szFile,strlen(szFile)+1,wszClassName, 
 sizeof(wszClassName)/sizeof(wszClassName[0])); 

 HANDLE hDmpFile = ::CreateFile(wszClassName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);

 MINIDUMP_EXCEPTION_INFORMATION stInfo = {0};

 stInfo.ThreadId = GetCurrentThreadId();

 stInfo.ExceptionPointers = pExceptionPointers;

 stInfo.ClientPointers = TRUE;

 BOOL bOk = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDmpFile, MiniDumpNormal, &stInfo, NULL, NULL);

 return bOk;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值