如何生成dump文件

#include <Dbghelp.h>
#include <time.h>

1、调用的函数定义


typedef BOOL (*MiniDumpWriteDump_PTR)(
                                      HANDLE hProcess,
                                      DWORD ProcessId,
                                      HANDLE hFile,
                                      MINIDUMP_TYPE DumpType,
                                      PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
                                      PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
                                      PMINIDUMP_CALLBACK_INFORMATION CallbackParam
                                      );

void CreateMiniDump(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
    HMODULE hModule = ::LoadLibrary(_T(".\\dbghelp.dll"));
    if( NULL == hModule )
        return;
    MiniDumpWriteDump_PTR pfnMiniDumpWriteDump = (MiniDumpWriteDump_PTR)GetProcAddress(hModule, "MiniDumpWriteDump");
    if( NULL == pfnMiniDumpWriteDump )
    {
        FreeLibrary(hModule);
        return;
    }
    TCHAR szFile[MAX_PATH+1] = {0};
    _sntprintf_s(szFile, sizeof(szFile),MAX_PATH, _T(".\\control_%u.dmp"), time(NULL));
    HANDLE hFile = CreateFile(szFile, GENERIC_ALL, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
    if( INVALID_HANDLE_VALUE == hFile )
    {
        FreeLibrary(hModule);
        return;
    }
    MINIDUMP_EXCEPTION_INFORMATION mei;
    mei.ThreadId = GetCurrentThreadId();
    mei.ClientPointers = TRUE;
    mei.ExceptionPointers = ExceptionInfo;

    (*pfnMiniDumpWriteDump)(GetCurrentProcess(), GetCurrentProcessId(), hFile,
        MiniDumpWithFullMemory,
        &mei, NULL, NULL);
    CloseHandle(hFile);
    FreeLibrary(hModule);
}
LONG WINAPI CCCtrl_UnhandledExceptionFilter(
struct _EXCEPTION_POINTERS* ExceptionInfo
    )
{
    OutputDebugString(_T("ESCControl meet unhandled SEH exception! Quit!\n"));
    CreateMiniDump(ExceptionInfo);

    ::SetErrorMode(SEM_NOGPFAULTERRORBOX);
    ::ExitProcess(1);
    return EXCEPTION_EXECUTE_HANDLER;
}


2、一般放在main函数的第一行

#ifndef _DEBUG
    ::SetUnhandledExceptionFilter(CCCtrl_UnhandledExceptionFilter);
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值