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

rockchip rk3566 android11 网口log报错: DMA engine initialization failed

问题描述:上电初始化前将网口插入,然后上电初始化网口能够正常使用,且能够找到PHY,ifconfig 查看能够有eth0 产生,网口正常使用且能够热插拔,但上电初始化时,不插入网口,就会报DMA engine initialization failed 错误,DMA 初始化的时候出错了。 分析:一般产生这个问题可以认为是GMAC 的工作时钟出问题了。先测量时钟引脚是否有时钟,时钟频率以及幅度等指标是否正常,主要确认以下几个方面: 1.IOMUX 出错,检查时钟脚寄存器值是否正确。 2.时钟方向以及配置

qq_48709036的博客 2万+

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

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

liulilittle的博客 604

量子-经典混合架构与动态QUBO建模

量子-经典混合架构与动态QUBO建模的结合,是当前量子计算与经典计算融合领域的前沿方向。通过将量子计算的并行性与经典计算的灵活性结合,该技术为解决复杂动态优化问题(如实时调度、金融投资组合优化、电力系统控制等)提供了全新的方法论。:将发电机组调度分解为QUBO(启停决策)与非QUBO(功率分配)子问题,通过3块ADMM协调;c_i(t) $随外部环境(如电力需求、市场价格)动态调整。量子-经典混合架构与动态QUBO建模的结合,标志着优化计算从。:每分钟根据市场波动调整QUBO的收益率-风险系数;

百态·数智思维 | 聚焦大数据、量化与未来AI 1333

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

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

Darker的博客 2448

画个板子玩一玩STM32F030F4P6,也许是最便宜的32bit MCU

前言,什么是STM32F030F4P6 STM32目前最便宜的芯片之一应该就是这一块,STM32F030F4P6,这一个芯片没有USB,但是其他都有,引脚少,价格低廉,如果找不到原厂,可以买替代的国产芯片,性能也一样。 不管怎么样也是Cortex-M0,比8bit和16bit的性能都强,总的来说就是低价,引脚少,体积小的同时,还容易开发,有很多模拟输入可玩,还有SPI,硬件I2C等等 所以,这一款MCU真的是从理论来说又便宜又好用,非常适合把玩。 画个板,最小系统 STM32F030其..

arenascat的博客 2万+

流媒体学习之路(mediasoup)——simulcast 与 svc 简介(7)

流媒体学习之路(mediasoup)——simulcast 与 svc(7) 文章目录流媒体学习之路(mediasoup)——simulcast 与 svc(7)

qw225967的博客 7339

也谈Release版本排错

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

673

技术面 - 手撕算法题整理

这篇博客整理了华为OD面试中涉及的算法题,包括LeetCode热门题目、OD原题和需要手写的算法,如二分查找、冒泡排序等。建议优先刷"hot100"的LeetCode题目,全刷OD原题,以及掌握手撕算法的基本原理。

m0_73659489的博客 1023

windbg Adplus,抓取dump的方便工具

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

yyyzlf的专栏 2280

基于Simulink的四足机器人关节力矩优化仿真建模示例

高自由度:每个腿至少有3个自由度(DOF),增加了控制的复杂性。非线性动力学:涉及多体系统的相互作用,包括接触力、摩擦力等。能量消耗:减少不必要的能量消耗是提升续航能力和效率的关键。可以是最小化能量消耗或最大化稳定性等。matlab深色版本% 示例代码通过本指南,我们介绍了如何基于Simulink搭建一个四足机器人的关节力矩优化模型,并进行了仿真以验证其基本功能。

amy_mhd的博客 171

lammps案例:reaxff势模拟Fe(OH)3高温反应过程

所有的reaxff模拟,如:氧化、腐蚀、热裂解、燃烧等模拟,均可采用此模拟框架,只需要更换data文件、势文件,代码中的control文件可以不写,电荷平衡文件也可以用reaxff替换。该案例主要模拟Fe(OH)3在高温下的反应过程,主要代码来自lammps自带的案例。lammps自带案例没有产物输出,故在此基础上稍加修改,增加了产物输出命令。如果需要系统学习反应势的模拟,可考虑报名培训课程。本文分享一个reaxff反应势的案例。in文件代码已经注释,以供参考。大家好,我是小马老师。

lammps_jiayou的博客 1965

MiniDump文件的生成(二)

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

kecise的专栏 7595

【RTD】二分法查找和分段线性插值算法在RTD中应用

二分法查找和分段线性插值算法在RTD中的典型应用。

只要思想不滑坡,想法总比问题多。 2368

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

MiniDump文件的生成(三)

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

kecise的专栏 4084

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

Echo的博客 1528

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

(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、付费专栏及课程。

余额充值