当前位置: 首页 > article >正文

MiniDumpWriteDump函数生成dmp文件

MiniDumpWriteDump函数生成dmp文件

  • 一:概述
  • 二: CreateDump.h
  • 三:CreateDump.cpp
  • 四:main测试
  • 五:winDbg分析

一:概述

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

二: CreateDump.h

#pragma once
#include <string>
#include <windows.h>
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>
#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, &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(&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文件
命令窗口输入: !analyze -v


http://www.kler.cn/a/159500.html

相关文章:

  • jvm调优方式
  • LeetCode654.最大二叉树
  • 31-Shard Allocation Awareness(机架感知)
  • 如何实现主备租户的无缝切换 | OceanBase应用实践
  • 物料数据对接:轻易云助力聚水潭与金蝶云星空集成方案
  • Linux服务器定时执行jar重启命令
  • 【华为数据之道学习笔记】2-建立企业级数据综合治理体系
  • MySQL Shell拷贝一个库到一个新库
  • 二手物品交易系统源码小程序H5闲置物品转让APP成品
  • 前端React基础面试题
  • 【element-plus使用】el-select自定义样式、下拉框选项过长等问题解决
  • 【 Go语言使用xorm框架操作数据库】
  • 第十一届蓝桥杯青少组省赛Python中高级组真题及赏析
  • 无懈可击的身份验证:深入了解JWT的工作原理
  • SpringCloud-服务消费者Fegin调用时无法获取异常信息
  • 3090微调多模态模型Qwen-VL踩坑
  • 精通Git(第2版)读书笔记
  • Guava中的函数式编程
  • el-from表单实现lable字体大小改变
  • C++基础 -45- 类的静态数据成员
  • 深度学习之图像分类(十五)DINAT: Dilated Neighborhood Attention Transformer详解(一)
  • AOP记录操作日志
  • 【EI会议征稿中】第三届光学与机器视觉国际学术会议(ICOMV 2024)
  • 【译】 Spring AOP API
  • Java-宋红康-(课P132)-多线程的概念
  • GO学习之 单例模式 sync.Once