MiniDump文件的生成(一)

C++程序中dump文件生成方法详解 最近项目中新作成了一个动态链接库,长时间运行后,偶尔会崩溃。根据log分析,被调用的动态库函数最外层catch到了这个异常,但是不能定位哪里出了问题。另外虽然上层exe是有dump文件输出处理的,但是在C++中,如果异常被捕获并处理的情况下,系统就不会生成dump文件了。如果仍希望在try-catch块中捕获异常的同时生成dump文件,就必须在catch块中手动调用生成dump文件的函数。这样可以在异常被捕获后仍然生成dump文件以供后续分析。本文详细介绍下怎么生成dump文件。 阅读详情

使用DbgHelp提供的MiniDumpWriteDump函数可以在程序崩溃的时候产生包含足够多信息的MiniDump文件供调试程序使用。

1.      MiniDumpWriteDump的声明如下


详见: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680360(v=vs.85).aspx

2. 作为示例,下面的代码段将在程序执行的当前目录下生成文件名为MyDump.dmp的DMP文件:

DWORD CreateMiniDump(EXCEPTION_POINTERS *pExceptionPointers)
{
	CHAR	szFileName[MAX_PATH];
	HANDLE	hDumpFile = NULL;
	MINIDUMP_EXCEPTION_INFORMATION	mdei;
	//
	memset(&mdei, 0x00, sizeof(MINIDUMP_EXCEPTION_INFORMATION));
	mdei.ThreadId	= GetCurrentThreadId();
	mdei.ExceptionPointers	= pExceptionPointers;
	mdei.ClientPointers		= FALSE;
	//
	// create dump file
	//
	memset(szFileName, 0x00, MAX_PATH);
	GetModuleFileName(NULL, szFileName, MAX_PATH);
	PathRemoveFileSpec(szFileName);
	strcat(szFileName, "\\MyDump.dmp");	
	hDumpFile = CreateFile(
			szFileName,
			GENERIC_READ | GENERIC_WRITE,
			FILE_SHARE_READ | FILE_SHARE_WRITE,
			NULL,
			CREATE_ALWAYS,
			FILE_ATTRIBUTE_NORMAL,
			NULL
			);
	if(hDumpFile == INVALID_HANDLE_VALUE)
	{
		nRetCode = GetLastError();
		sprintf(lpErrStr, "CreateFile: %d\n", nRetCode);
		goto EXIT;
	}
	//
	BOOL bRetCode = MiniDumpWriteDump(
		GetCurrentProcess(),
		GetCurrentProcessId(),
		hDumpFile,
		MiniDumpNormal,
		&mdei,
		NULL,
		NULL
		);
	if(bRetCode != TRUE)
		return(GetLastError());

	return(0);
}
3. 说明:可以通过指定MINIDUMP_TYPE的值来让MiniDumpWriteDump函数生成包含不同信息的DMP文件。MINIDUMP_TYPE由下述枚举定义:

  

  详细说明:http://msdn.microsoft.com/en-us/library/windows/desktop/ms680519(v=vs.85).aspx。


异常处理与MiniDump详解 4 MiniDump 阅读详情

相关推荐

Windows 应用生成MiniDump文件的方法笔记

Windows应用在yu // 创建Dump文件 void CreateDumpFile(LPCTSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException) { HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Dump信息 MINID

sesiria的博客 1725

使用MiniDumpWriteDump API 来生成程序的Dump

MiniDumpWriteDump是MS DbgHelp.dll 中一个API, 用于导出当前运行的程序的Dump. 这个dll程序系统中就有, 但是很多软件, 都在自己的安装目录下保存了这个.dll的最新的版本. 为了测试这个API, 参考网上一些资料, 写了一个简单的C++ 程序. 目的是当有异常发生的时候, 自动生成Dump文件供之后的分析. 有了Dump文件, 我们就可以使用WinDBG

学而时习之 不亦乐乎 1万+

Clickhouse基于breakpad生成minidump文件,方便问题定位

查看github发现之前有大佬基于以前的分支有个MR,但是一直没有合并到社区,想来是有什么其他的原因,同时由于现在master的代码有些许差异,所以还需要进行部分改造。可以修改代码,构造一个段错误,也可以直接向进程发送一个信号量的方式进行异常构造,验证core文件的生成,为了方便,此处采用直接发送信号量的方式。因为有的时候core文件很大,可能因为磁盘空间不足,无法生成,那么此时就需要用breakpad的转换工具了,此处可以参考其他文章。修改文件清单如下图所示,详见附件。生成的文件默认在ck的日志目录下。

weixin_43317111的博客 980

【小沐学C++】C++ 捕获程序异常奔溃minidump

并不是所有的bug都可以在发布前找到,也就是说并不是所有的抛出异常的bug都可以在发布前找到。幸运的是,微软在 Platform SDK 中包含了一个功能,可以帮助开发人员收集用户发现的异常信息。MiniDumpWriteDump函数将必要的故障转储信息写入文件,而不节省整个进程空间。此故障转储信息文件称为小型转储。这篇技术文章提供了有关如何编写和使用小型转储的信息。╮( ̄▽ ̄)╭如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???.........

爱看书的小沐 5828

异常处理并邮件发送且可防止程序崩溃

异常处理并邮件发送且可防止程序崩溃,dump, setunhandledException ,minidumpwirte, mail

别再手动配IP了!用NI-USRP Configuration Utility快速搞定USRP 2954与LabVIEW连接

本文详细介绍了如何使用NI-USRP Configuration Utility快速配置USRP 2954与LabVIEW的连接,解决传统手动IP配置的繁琐问题。通过图形化工具自动完成设备发现、IP设置和连接验证,大幅提升软件无线电实验效率,特别适合信号收发应用场景。

weixin_27102543的博客 292

VC++ MiniDumpWriteDump 保存程序的DUMP调试文件信息,类似于 Linux 下面的 core 调试信息文件。

WIN32K结构化异常筛选器函数实现:类似 catch when 的语法效果。

liulilittle的博客 604

宇树GO2-YOLOv5在Jetson Orin上的部署避坑实践

本文详细记录了在宇树GO2四足机器人搭载的Jetson Orin平台上部署YOLOv5目标检测模型的完整实践过程。文章重点分享了从ARM架构认知、网络连接解决方案、Archiconda环境搭建、PyTorch版本精准匹配到依赖安装与性能验证的核心步骤与避坑指南,旨在帮助开发者高效完成边缘计算环境下的算法部署。

app77的博客 669

跨平台 C++ 程序崩溃调试与 Dump 文件分析

本篇博客将介绍如何在代码中自动生成Dump文件,并详细解析Dump相关参数,帮助开发者快速定位Bug。

Darker的博客 2448

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。通过'中国古代文人关系网'实战案例,涵盖软件安装、本体创建、属性定义、实例填充到高级功能应用的全流程,帮助初学者快速掌握知识建模的核心技能。

weixin_26808205的博客 234

【AI开源】Understand-Anything 完整使用教程(2026最新版)

Understand-Anything是一款基于交互式知识图谱的AI学习与开发平台,能够将代码库转化为可视化知识结构,支持语义搜索、上下文问答和全流程开发。核心功能包括代码知识图谱化、AI辅助学习和多编码代理集成。支持TypeScript/JavaScript、Python等多种语言,要求Node.js 20+和16GB以上内存。提供NPM、Docker和源码三种安装方式,支持增量更新和团队知识共享。与同类产品相比,在交互式图谱、语义搜索和AI集成方面更具优势。适用于代码学习、大型项目维护和团队协作等场景。

与时俱进,开放共享 7200

也谈Release版本排错

也谈Release版本排错 邓立波 深圳,2008-6 作者联系方式: email: libodeng@gmail.com msn: libodeng@gmail.com 通常Release除错都是先通过SetUnhandledExceptionFilter捕获异常,然后生成报告文件,最后定位代码行,主要以下两种方法: (一)通过遍历调用栈,将其调用栈信息输出到文件。然后查找出错地址。 查找方式有两种: (

673

逆向实战:拼多多anti-content加密参数的全链路解析与动态对抗策略

本文深入解析了拼多多anti-content加密参数的全链路生成逻辑与动态对抗策略。通过逆向工程实战,详细拆解了包含设备指纹、用户行为采集和动态密钥生成在内的12个关键环节,并提供了可持续对抗的精准模拟方案和自动化更新机制,帮助开发者有效应对拼多多的反爬体系。

weixin_30687051的博客 158

windbg Adplus,抓取dump的方便工具

2.3.2  Adplus,抓取dump的方便工具前面提到了dump文件能保存进程状态,方便分析。由于dump文件记录的是进程某一时刻的具体信息,所以保存dump的时机非常重要。比如程序崩溃,dump应该选在引发崩溃的指令执行时(也就是1st chance exception发生的时候)获取,这样分析dump的时候就能够看到问题的直接原因。Adplus是跟Windbg在同一个目录的VBS脚

yyyzlf的专栏 2280

金融学习之十三——数据去极值和标准化处理

拿到数据后,数据中可能会存在一些超大或极小的值,这些值与其他的值离得较远,显得格格不入,我们称其为离群点,有时也称为异常点。对于这些值,它的存在会导致影响最终的分析结果,带偏我们的分析。举个简单的例子,10个人的收入分别为2000,2500,2300,2425,2512,2375,2700,2265,2345,10000000,只算前9个,平均值就是2380,但加上最后一个,平均值就是1002144.2,就可能严重带偏最后分析的结果。因此,对于这样的数据,我们需要将其去除或修改。 (一)数据去极值 数据去极

ryo007gnnu的博客 7166

企业AI选型大揭秘:扣子(Coze) Bot与微信对话开放平台深度剖析

本文对比分析了字节跳动的扣子(Coze)Bot和腾讯的微信对话开放平台两款AI聊天机器人解决方案。扣子(Coze)Bot凭借强大的大模型支持、丰富的插件生态、低代码开发及多平台部署能力,在功能丰富度和灵活性方面表现突出,适合技术实力强、业务场景复杂的企业。微信对话开放平台则依托微信生态优势,在客户服务和营销推广场景中更具优势,其零门槛接入方式更适合技术能力较弱的企业。企业在选型时应综合考虑规模、预算、业务场景和技术能力等因素,选择最适合的AI解决方案,以充分发挥AI技术价值,提升企业竞争力。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 433

MiniDump文件的生成(二)

在《MiniDump文件生成(一)》中简单的介绍了一下怎样在程序崩溃的时候生成供调试使用的DMP文件,本文将详细的介绍一下MINIDUMP_TYPE中的每一种类型以及针对每一种类型所生成的DMP文件中将包含哪些特定信息。 首先来看一下,Windows对MINIDUMP_TYPE结构的定义 1. MiniDumpNormal     这是最常见的一种类型,通常情况下是函数MiniDumpW

kecise的专栏 7595

学Simulink--基于高比例可再生能源渗透的复杂电网建模场景实例:新能源高渗透下传统同步机主导系统的动态响应建模

摘要:本文详细介绍使用MATLAB/Simulink构建高比例可再生能源渗透的电网系统模型。主要内容包括:系统结构设计(新能源发电、同步发电机、电网等模块)、详细建模步骤(从创建项目到集成各模块)、关键控制算法实现(如MPPT和调速器控制)以及仿真分析。通过该模型可研究新能源高渗透率下传统同步机系统的动态响应特性,为电力系统稳定性分析提供有效工具。文章包含示例代码和典型仿真结果,展示了频率、电压等关键参数的稳定性表现。

xiaoheshang_123的博客 86

window下miniDump生成dump文件简单使用

minidump.h #pragma once #include <windows.h> #include <DbgHelp.h> #include <stdlib.h> #include <time.h> #pragma comment(lib, "dbghelp.lib") #pragma once inline BOO...

ybbydlf的博客 1477

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MiniDump文件的生成(三)

本文将详细的介绍MiniDumpCallback函数使用。使用该函数可以让MiniDumpWriteDump 1) 忽略某一可执行模块的信息(全部或部分); 2)忽略某一线程的信息(全部或部分); 3)将用户指定的内存空间的内容写入生成的DMP文件中。 1. MiniDumpCallback的声明如下: CallbackParam是用户为MiniDumpCallback自定义的参数。

kecise的专栏 4084

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[ Effective minidump ] windows C++ 如何生成dump/dmp文件

[Effective minidump] windows C++ 如何生成dump/dmp文件Effective minidump简介Minidump类型MiniDumpNormalMiniDumpWithFullMemoryMiniDumpWithPrivateReadWriteMemoryMiniDumpWithIndirectlyReferencedMemoryMiniDumpWithDataSegsMiniDumpWithCodeSegsMiniDumpWithHandleDataMiniDumpW

Echo的博客 1528

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

(Windbg调试一)minidump崩溃捕捉

(Windbg调试四)dump崩溃捕捉一,系统的异常处理顺序二,SetUnhandleExceptionFilter函数三,Minidump四,代码演示 平常我们编写c++代码时,发生崩溃,编译器都可以帮我们捕捉到并且定位到具体的代码,这是因为编译器接收到了操作系统发送过来的程序异常通知并进行了处理。但是在使用我们软件的用户环境上,没有编译器帮我们处理这个异常,操作系统会使用它的异常处理机制:弹出...

bajianxiaofendui的博客 1万+

MiniDump不生成或者生成0字节

通过分析发现是另一个线程在退出时出现了宕机,但是主线程退出时还没来得及调用或者未完全调用完生成MiniDump文件,整个进程就结束了。简单粗暴的方法就是主函数退出前休眠一段时间,让异常处理程序有充分的时间生成MiniDump。今天的MiniDump却不能正常工作,在ExceptionFilter函数中打日志,时而有输出,时而没输出,有输出都是在函数开头的日志有输出,后面的就没输出了。今天在使用C写一个Windows多线程程序时,发现退出过程中有段错误,为了方便快速的定位问题,我使用了MiniDump。

witton的专栏 2096

windows上如何在另一台电脑上查看minidump文件,方法一,使用VS并提供pdb文件exe文件;方法二,使用windbg

是的,MINIDUMP文件可以在另一台电脑的WinDbg中打开进行分析。MINIDUMP文件是Windows系统产生的一种二进制文件,用于记录程序崩溃时的状态,通常用于调试和故障排查。此外,如果MINIDUMP文件包含敏感信息(如用户数据、密码等),在分析和共享时需要谨慎处理,以确保信息安全。符号文件包含有关Windows系统和应用程序的调试信息,有助于WinDbg更准确地分析MINIDUMP文件。可以使用WinDbg提供的各种命令和工具来分析MINIDUMP文件,查找程序崩溃的原因。

2401_86127755的博客 1553

Qt工程生成MiniDump文件

关于Dump的文件介绍在这里,今天要介绍的是如何在Qt工程生成Dump文件。 首先我们在Qt的pro文件(工程配置文件)要取消优化,并加入调试信息,如下: #加入调试信息 QMAKE_CFLAGS_RELEASE += -g QMAKE_CXXFLAGS_RELEASE += -g #禁止优化 QMAKE_CFLAGS_RELEASE -= -O2 QMAKE_CXXFLAGS_RELEA...

hai7song的专栏 1647
上一篇: GUIDReporter:辅助调试USB设备的一个小工具
下一篇: win32 函数调用方式总结
kecise
博客等级 码龄16年 70粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值