MiniDumpWriteDump函数生成dmp文件

一:概述

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

相关推荐

  1. MiniDumpWriteDump函数生成dmp文件

    2023-12-05 15:54:08       45 阅读
  2. 数据库DMP格式备份文件

    2023-12-05 15:54:08       47 阅读
  3. 【Oracle impdp导入dmp文件(windows)】

    2023-12-05 15:54:08       13 阅读
  4. matlab 轨迹生成函数

    2023-12-05 15:54:08       15 阅读
  5. ARM_dsp_math函数使用

    2023-12-05 15:54:08       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-05 15:54:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-05 15:54:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-05 15:54:08       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-05 15:54:08       20 阅读

热门阅读

  1. Xshell远程登录AWS EC2 Linux实例

    2023-12-05 15:54:08       48 阅读
  2. Github项目-CNNResnet9-残差神经网络水果多分类项目

    2023-12-05 15:54:08       39 阅读
  3. sklearn教程:titanic泰坦尼克号数据集

    2023-12-05 15:54:08       34 阅读
  4. 快速学习PyQt5的高级自定义控件

    2023-12-05 15:54:08       34 阅读
  5. 达梦8搭建DataWatch集群

    2023-12-05 15:54:08       25 阅读
  6. MySQL 学习笔记(刷题篇)

    2023-12-05 15:54:08       36 阅读
  7. Shell 脚本自动化备份与恢复实践

    2023-12-05 15:54:08       34 阅读