使用MiniDumpWriteDump API 来生成程序的Dump

简介:        MiniDumpWriteDump是MS DbgHelp.dll 中一个API, 用于导出当前运行的程序的Dump.
       MiniDumpWriteDump是MS DbgHelp.dll 中一个API, 用于导出当前运行的程序的Dump. 这个dll程序系统中就有, 但是很多软件, 都在自己的安装目录下保存了这个.dll的最新的版本.
       目的是当有异常发生的时候, 自动生成Dump文件供之后的分析. 有了Dump文件, 我们就可以使用WinDBG等调试器来分析异常发生时的情况. 其实这个功能很多软件都有, 比如QQ, 魔兽世界, 等等. 它们在出现了异常的时候会弹出一个对话框, 让用户输入异常发生时的情况, 然后把异常的dump文件用email发回, 供开发者们分析修改bug.
      不过有一点, 这里需要程序的调试符号文件(pdb文件). 对于Debug版来说, 是生成的, 但是Release版来说默认是不生成的. 可以设置VC的编译器, 让它在Release版的时候也生成调试信息. 这带来一个新的问题, 因为.pdb里面是保存了源文件的信息的, 为了避免泄密, 可以采用VS中的CVPack工具, 从中去除敏感的信息.
       程序需要使用Dbghelp.h 和 Dbghelp.lib . 它们可以从MSDN找到.
Code:
#include <dbghelp.h>
#pragma comment(lib,"Dbghelp.lib")

LPTOP_LEVEL_EXCEPTION_FILTER m_previousFilter;
m_previousFilter = SetUnhandledExceptionFilter(MSJUnhandledExceptionFilter);

LONG WINAPI MSJUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
CreateMiniDump(pExceptionInfo);
        return EXCEPTION_CONTINUE_SEARCH;
}

void CreateMiniDump(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
char szFile[MAX_PATH+1] = {0};
_snprintf(szFile, MAX_PATH, ".//cc_%u.dmp", time(NULL));

HANDLE hFile = CreateFile(szFile, GENERIC_ALL, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
if( INVALID_HANDLE_VALUE == hFile )
{
return;
}

MINIDUMP_EXCEPTION_INFORMATION mei;
mei.ThreadId = GetCurrentThreadId();
mei.ClientPointers = TRUE;
mei.ExceptionPointers = ExceptionInfo;

MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpWithFullMemory, &mei, NULL, NULL);
CloseHandle(hFile);
}
目录
相关文章
|
7月前
|
网络协议 API 数据处理
【网络编程】第2章(2) 应用程序接口(API)
【网络编程】第2章(2) 应用程序接口(API)
|
3月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
88 1
|
2月前
|
API 网络架构
解释 RESTful API,以及如何使用它构建 web 应用程序。
解释 RESTful API,以及如何使用它构建 web 应用程序。
87 0
|
7月前
|
API
api一键自动合约跟单模式 | 程序化交易系统开发讲解【附样板源码实例分析】
“量化交易”有着两层含义:一是从狭义上来讲,是指量化交易的内容,将交易条件转变成为程序,自动下单;二是从广义上来讲,是指系统交易方法,就是一个整合的交易系统。
|
3月前
|
JSON API 数据格式
RESTful API,以及如何使用它构建 web 应用程序。
RESTful API,以及如何使用它构建 web 应用程序。
37 0
|
8月前
|
存储 API 流计算
Flink DataStream API-概念、模式、作业流程和程序
前几篇介绍了Flink的入门、架构原理、安装等,相信你对Flink已经了解入门。接下来开始介绍Flink DataStream API内容,先介绍DataStream API基本概念和使用,然后介绍核心概念,最后再介绍经典案例和代码实现。本篇内容:Flink DataStream API的概念、模式、作业流程和程序。
Flink DataStream API-概念、模式、作业流程和程序
|
4月前
|
存储 JavaScript 前端开发
使用 HTML、CSS、JS 和 API 制作一个很棒的天气 Web 应用程序
使用 HTML、CSS、JS 和 API 制作一个很棒的天气 Web 应用程序
68 0
|
8月前
|
XML JSON 监控
应用程序接口(API)安全的入门指南
对于初学者来说,API 是指为两个不同的应用之间实现流畅通信,而设计的应用程序编程接口。它通常被称为应用程序的“中间人”。由于我们需要保护用户的持有数据、以及应用本身的完整性,因此 API 的安全性是一种“刚需”。 而对于开发人员而言,API 是一个非常好的工具。它可以在微服务和容器之间交换信息,并实现快节奏的通信交流。正如集成和互连对于应用开发的重要性那样,API 在某种程度上,驱动并增强了应用程序的设计
|
9月前
|
算法 机器人 API
现货量化机器人/合约交易/合约跟单交易所系统开发(对接API火币/币安/OK/欧易)技术详细/开发程序/功能逻辑/源码案例
  交易机器人系统架构:交易机器人系统的架构可以采用分布式架构或集中式架构。集中式架构主要由后台服务、API接口、交易核心、交易逻辑四个部分组成,而分布式架构则将交易逻辑放在不同的节点上运行。
|
9月前
|
API
合约跟单/现货量化跟单/一键跟单/对接API火币/币安/OK交易所系统开发稳定版/成熟案例/案例详细/源码程序
、合约交易是指买卖双方对约定未来某个时间按指定价格接收一定数量的某种资产的协议进行交易。The buying and selling objects of contract trading are standardized contracts formulated by the exchange,which specifies standardized information such as the type of goods,trading time,and quantity.The contract represents the rights and obligations of both