Windows代码内存崩溃转储示例

#include <windows.h>
#include <DbgHelp.h>
#pragma comment ( lib , "dbghelp.lib")

// 内存Dump回调函数
static LONG WINAPI MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
    char  lpModuleDir[MAX_PATH] = {0};
    TCHAR szFileName[MAX_PATH] = {0};
    HANDLE hFile;
    SYSTEMTIME st = {0};

    GetLocalTime(&st);
    //cutil_file_GetModuleDir(g_hDllModule, lpModuleDir);
    sprintf(szFileName, _T("%s\\Huan_%04d%02d%02d%02d.dmp"), "E:\\", st.wYear, st.wMonth, st.wDay, st.wHour);

    DebugOut("开始记录dump");

    hFile = CreateFile(szFileName, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, 
        CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL );
    if (hFile!=INVALID_HANDLE_VALUE)
    {
        MINIDUMP_EXCEPTION_INFORMATION ExInfo;

        memset(&ExInfo, 0, sizeof(ExInfo));
        ExInfo.ThreadId = GetCurrentThreadId();
        ExInfo.ExceptionPointers = pExceptionInfo;
        ExInfo.ClientPointers = FALSE;
        MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(), hFile, 
            MiniDumpWithDataSegs, &ExInfo, NULL, NULL );
        CloseHandle(hFile);
    }

    printf("dump记录完毕");

    return EXCEPTION_EXECUTE_HANDLER;
}

int main(int argc, char *argv[]) 
{
    // 设置内存崩溃转储
    SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);

    int * p = NULL;
    *p = 123;

    system("pause");
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值