dump文件生成---备忘

先调用SetUnhandledExceptionFilter()设置异常处理函数,这样在发生未处理的异常时系统就会调用你设置的异常处理函数,再在你的异常处理函数里调用MiniDumpWriteDump()生成dmp文件就可以了,就两个函数而已,函数用法请查看MSDN。

(PS:SetUnhandledExceptionFilter()并不能处理所有的异常,比如CRT异常需要调用_set_invalid_parameter_handler()才行。)

//设置异常处理回调函数
SetUnhandledExceptionFilter(UnhandledExceptionFilter);
 
 
//异常处理代码
//EXCEPTION_EXECUTE_HANDLER equ 1 表示我已经处理了异常,可以优雅地结束了  
//EXCEPTION_CONTINUE_SEARCH equ 0 表示我不处理,其他人来吧,于是windows调用默认的处理程序显示一个错误框,并结束  
//EXCEPTION_CONTINUE_EXECUTION equ -1 表示错误已经被修复,请从异常发生处继续执行  
LONG  UnhandledExceptionFilter( struct  _EXCEPTION_POINTERS * ExceptionInfo)
{
     CString   strDumpFile; 
     strDumpFile.Format( "%d" ,CTime::GetCurrentTime().GetTickCount());
     strDumpFile   +=    ".dmp "
     HANDLE    hFile   =   CreateFile(strDumpFile,   GENERIC_WRITE,   FILE_SHARE_WRITE,  
                         NULL,   CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,   NULL   ); 
 
     if    (hFile!=INVALID_HANDLE_VALUE) 
    
         MINIDUMP_EXCEPTION_INFORMATION   ExInfo; 
 
         ExInfo.ThreadId   =   ::GetCurrentThreadId(); 
         ExInfo.ExceptionPointers   =   ExceptionInfo; 
         ExInfo.ClientPointers   =   NULL; 
 
         //   write   the   dump 
         BOOL    bOK   =   MiniDumpWriteDump(GetCurrentProcess(),   GetCurrentProcessId(),   hFile,   MiniDumpNormal,   &ExInfo,   NULL,   NULL   ); 
         CloseHandle(hFile); 
    
 
     theApp.PostThreadMessage(WM_QUIT,0,0);
     return  EXCEPTION_EXECUTE_HANDLER;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值