CMiniDump类 程序崩溃时自动保存Dump文件

#pragma once
#include <Windows.h>

class CMiniDump
{
public:
    CMiniDump( void );
    virtual ~CMiniDump( void );
    
protected:
    static BOOL GetModulePath( LPTSTR lpBuf, DWORD dwBufSize );
    static LONG WINAPI MyUnhandledExceptionFilter( EXCEPTION_POINTERS* ExceptionInfo );
};



#include "stdafx.h"
#include "MiniDump.h"
#include <imagehlp.h>
#pragma comment(lib,"DbgHelp.lib")

CMiniDump::CMiniDump( void )
{
    SetUnhandledExceptionFilter( &CMiniDump::MyUnhandledExceptionFilter );
}


CMiniDump::~CMiniDump( void )
{
}

LONG WINAPI CMiniDump::MyUnhandledExceptionFilter( EXCEPTION_POINTERS* ExceptionInfo )
{
    TCHAR sModulePath[MAX_PATH] = {0};
    GetModulePath( sModulePath, MAX_PATH );
    
    TCHAR sFileName[MAX_PATH] = {0};
    SYSTEMTIME	systime = {0};
    GetLocalTime( &systime );
    _stprintf_s( sFileName, _T( "%04d%02d%02d-%02d%02d%02d.dmp" ),
                 systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute, systime.wSecond );
                 
    _tcscat_s( sModulePath, sFileName );
    HANDLE lhDumpFile = CreateFile( sModulePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL , NULL );
    MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
    loExceptionInfo.ExceptionPointers = ExceptionInfo;
    loExceptionInfo.ThreadId = GetCurrentThreadId();
    loExceptionInfo.ClientPointers = FALSE;
    MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(), lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL );
    CloseHandle( lhDumpFile );
    
    return EXCEPTION_EXECUTE_HANDLER;
}

BOOL CMiniDump::GetModulePath( LPTSTR lpBuf, DWORD dwBufSize )
{
    TCHAR sModuleName[MAX_PATH] = {0};
    GetModuleFileName( NULL, sModuleName, MAX_PATH );
    TCHAR* pChar = _tcsrchr( sModuleName, _T( '\\' ) );
    if ( NULL != pChar )
    {
        int iPos = pChar - sModuleName;
        sModuleName[iPos + 1] = _T( '\0' );
        _tcscpy_s( lpBuf, dwBufSize, sModuleName );
        return TRUE;
    }
    return FALSE;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值