一:概述

v2008及以上版本可以用。 包含CreateDump.h,CreateDump.cpp文件,main()测试例子

二: CreateDump.h

#pragma once
#include <string&gt;
#include <windows.h&gt;
using namespace std;
class CCreateDump
{
public:
    CCreateDump();
    ~CCreateDump(void);
    static CCreateDump* Instance();
    static long __stdcall UnhandleExceptionFilter(_EXCEPTION_POINTERS* ExceptionInfo);
    //声明Dump文件,异常时会自动生成。会自动加入.dmp文件名后缀
    void DeclarDumpFile();
private:
    static WCHAR    strDumpFile[MAX_PATH];
    static CCreateDump* __instance;
};

三:CreateDump.cpp

#include "stdafx.h"
#include "CreateDump.h"
#include <DbgHelp.h&gt;
#pragma comment(lib,  "dbghelp.lib")

CCreateDump* CCreateDump::__instance = NULL;
WCHAR  CCreateDump::strDumpFile[MAX_PATH] = { 0 };

CCreateDump::CCreateDump()
{
}

CCreateDump::~CCreateDump(void)
{

}

long  CCreateDump::UnhandleExceptionFilter(_EXCEPTION_POINTERS* ExceptionInfo)
{

    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 = FALSE;
        //   write   the   dump
        BOOL   bOK = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &amp;ExInfo, NULL, NULL);
        CloseHandle(hFile);
        if (!bOK)
        {
            DWORD dw = GetLastError();
            //写dump文件出错处理,异常交给windows处理
            return EXCEPTION_CONTINUE_SEARCH;
        }
        else
        {    //在异常结束
            return EXCEPTION_EXECUTE_HANDLER;
        }
    }
    else
    {
        return EXCEPTION_CONTINUE_SEARCH;
    }
}

void CCreateDump::DeclarDumpFile()
{
    SYSTEMTIME syt;
    GetLocalTime(&amp;syt);
    char c[MAX_PATH];
	::swprintf_s(strDumpFile, _countof(strDumpFile) - 1, L"%04d-%02d-%02d_%02d%02d%02d.dmp", syt.wYear, syt.wMonth, syt.wDay, syt.wHour, syt.wMinute, syt.wSecond);
    SetUnhandledExceptionFilter(UnhandleExceptionFilter);
}

CCreateDump* CCreateDump::Instance()
{
    if (__instance == NULL)
    {
        __instance = new CCreateDump;
    }
    return __instance;
}

四:main测试

int main()
{
	CCreateDump::Instance()->DeclarDumpFile();

	int ag=0;
	int bg=2;
	int cg =bg/0;
	std::cout<<cg<<std::endl;
    return 0;
}

五:winDbg分析

百度网盘下载地址
提取码:cc70
1) 设置.dmp、.pdb文件所在路径
在以下两个地方设置路径
file->symbol search path
file->source search path

2)分析.pdb
file->open crash
选择 .dmp文件
命令窗口输入: !analyzev

原文地址:https://blog.csdn.net/cxd1314520/article/details/134749138

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_30316.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注