MiniDump文件的生成(三)

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

本文将详细的介绍MiniDumpCallback函数使用。使用该函数可以让MiniDumpWriteDump

1) 忽略某一可执行模块的信息(全部或部分);

2)忽略某一线程的信息(全部或部分);

3)将用户指定的内存空间的内容写入生成的DMP文件中。

1. MiniDumpCallback的声明如下:

CallbackParam是用户为MiniDumpCallback自定义的参数。

CallbackInput:包含了MiniDumpWriteDump传给MiniDumpCallback的数据。该数据由结构体MINIDUMP_CALLBACK_INPUT定义:

   

MiniDumpCallback根据CallbackType将MINIDUMP_CALLBACK_INPUT中的union解析成不同的结构体以从中获取需要的数据(下面会详述).

CallbackOutput:MiniDumpCallback传给MiniDumpWriteDump的数据(通常指定是否将某一特定的信息写入生成的DMP文件中)。该数据由结构体MINIDUMP_CALLBACK_OUTPUT定义:

2. 为了说明MiniDumpCallback的使用方法,首先要介绍一下定义MINIDUMP_CALLBACK_INPUT中CallbackType成员的结构体:

下面详细的说明其中几种主要回调类型的作用:

1)IncludeModiuleCallback

使用该类型,MiniDumpWriteDump询问MiniDumpCallback是否将一特定的模块信息包含在生成的DMP文件中。

MINIDUMP_CALLBACK_INPUT的union由结构体MINIDUMP_INCLUDE_MODULE_CALLBACK解析,其中包含了某一模块的信息,定义如下:

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

如果MiniDumpCallback返回TRUE,相应模块的信息将被包含在生成的DMP文件中;

如果MiniDumpCallback返回FALSE,相应模块的信息将被忽略。

MINIDUMP_CALLBACK_OUTPUT参数在该回调类型中没有被使用。

2)ModuleCallback

使用该类型,MiniDumpWriteDump询问MiniDumpCallback将模块的那些信息包含在生成的DMP文件中。

MINIDUMP_CALLBACK_INPUT的union由结构体MINIDUMP_MODULE_CALLBACK解析,定义如下:

MINIDUMP_CALLBACK_OUTPUT的union由枚举MODULE_WRITE_FLAGS定义

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

当MiniDumpWriteDump以IncludeModule回调MiniDumpCallback时,将设置一个标志值指示MiniDumpCallback那些类型的信息将被包含在生成的DMP文件中;MiniDumpCallback通过分析这些标志值并清空其中一些或者全部来通知MiniDumpWriteDump忽略掉特定的信息。

尤其要注意的是:ModuleCallback只能通过清空标志值的方式来让MiniDumpWriteDump忽略模块的一些信息而不能指示MiniDumpWriteDump增加新的信息。

3)IncludeThreadCallback

功能与IncludeModuleCallback类似。

MINIDUMP_CALLBACK_INPUT的union由结构体MINIDUMP_INCLUDE_THREAD_CALLBACK来解析,定义如下:

4)ThreadCallback

功能与ModuleCallback类似。

MINIDUMP_CALLBACK_INPUT由结构体MINIDUMP_THREAD_CALLBACK解析,定义如下:

MINIDUMP_CALLBACK_OUTPUT由枚举THREAD_WRITE_FLAGS解析,定义如下:

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

5)MemoryCallback

使用该类型,在MiniDumpCallback中指定一段内存区域让MiniDumpWriteDump将该区域的内容写入到生成的DMP文件中。

3. 作为一个总结,附上笔者实现的一个简单的DMP生成函数CreateMiniDump.使用该函数能在程序发生异常的时候生成类型为MiniDumpNormal类型的DMP文件。

下载地址:http://download.youkuaiyun.com/detail/kecise/4506403


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 阅读详情

相关推荐

程序崩溃后,利用minidump文件重现崩溃前的调用栈

windows服务器上线后,如果出现崩溃,则很难找到其崩溃问题,而通过日志文件来达到目的又需要打印太多信息,导致服务性能下降,影响业务处理,而minidump的基本可以完美的重现崩溃之前的调用信息。 BOOL make_minidump(EXCEPTION_POINTERS* e) { char name[MAX_PATH]; { char* nameEn...

蝈蝈的博客 2099

解决linux系统下java调用带breakpad异常捕获的c++ sdk必现crash问题

java通过jni去集成c++sdk时线上发现会有偶现崩溃,为了方便定位native(c++)的崩溃,sdk采用了google breakpad崩溃转储方案(Google跨平台的崩溃转储和分析框架和工具集合,breakpad支持windows、linux、macos、android、ios等。目前已有Google Chrome, Firefox, Google Picasa, Camino, Google Earth等项目使用。),更新sdk后,发现java启动后必现崩溃。

weixin_36623563的博客 535

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

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

weixin_43317111的博客 980

Dump文件的生成和使用

1 简介 第一次遇到程序崩溃的问题,之前为单位开发了一个插件程序,在本机运行没有出现问题,但把生成的可执行文件拷贝到服务器上一运行程序,刚进入插件代码,插件服务就崩溃了,当时被这个问题整的很惨,在同事的帮助下了解到,对于程序崩溃,最快的解决方式是生成dump文件,通过生成dump文件使用调试工具进行调试,还原程序崩溃时的状态,能够起到快速定位排查问题的作用。Dump文件是进程的内存镜像。可以...

不当初 15万+

HFSS螺旋线圈的优化设计与高效仿真实践

本文详细介绍了HFSS螺旋线圈的优化设计与高效仿真实践,涵盖核心参数设置、参数化建模、仿真加速技巧及结果分析。通过HFSS软件实现螺旋线圈的高效仿真,特别适用于无线充电和RFID系统设计,提升设计效率与性能验证准确性。

weixin_30235225的博客 443

CentOS 7.9安装python3.11

CentOS 7.9安装python3.11

leafseelight的专栏 1342

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

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

爱看书的小沐 5828

LibreNMS实战:5分钟搞定Docker部署与中文配置(附常见问题排查)

本文详细介绍了如何使用Docker在5分钟内快速部署LibreNMS,并完成中文界面优化。从环境准备到容器启动,再到中文语言包安装和系统配置调整,提供了完整的实战指南。同时,文章还包含常见问题排查和性能调优建议,帮助用户高效搭建网络监控系统。

e1f2g的博客 1279

dump文件,windbg

dump文件,在VC中的调试还是非常非常非常有用的,因为我们也不会经每一行代码都加上日志,当然如果你愿意,也可以每一行都加上日志; 在Windows上,添加dump文件有两种方法: 方法一:一个是在程序中添加代码; 方法二:修改注册表(参考后面的bat文件写法,在win7上用管理员程序运行);建议用这个方法,方便实用;(http://blog.youkuaiyun.com/hgy413/article/...

chinabinlang的专栏 2万+

vivado:差分信号和单端信号 的相互转换 IBUFDS OBUFDS

FPGA能处理的都是单端信号,但有些输入信号是差分的,这时候就需要把差分信号转为单端信号。

qq_52137732的博客 1万+

嘉立创EDA实战:4层板叠层设计避坑指南(附阻抗计算技巧)

本文详细解析了嘉立创EDA在4层PCB叠层设计中的实战技巧与避坑指南,涵盖经典叠层方案对比、介质厚度选择、电源系统设计及高速信号完整性优化。特别介绍了阻抗计算工具的应用,帮助工程师在高速电路设计中实现性能与成本的最佳平衡。

sea99的博客 963

导出windows密码技巧总结

一、使用RPC控制lsass加载SSP,实现DUMP LSASS绕过杀软 1.已编译好的ssp.dll(建议自己编译) spp.dll 需要修改为完整的绝对路径,测试环境是win2012 管理员权限,提取的文件在C:\Windows\Temp\temp.bin,在windows 10 可能需要system权限。 编译成功的spp.dll文件以及loader注入器: https://github.com/Mr-xn/Penetration_Testing_POC/blob/master/tools/l

渗透测试研究中心 7101

《机器学习》周志华_自学记录

第一章绪论## 1.1引言机器学习所研究的主要内容,是关于在计算机上从数据中产生"模型"(model)的算法,即"学习算法"(learning algorithm).在面对新的情况时(例如看到一个没剖开的西瓜),模型会给我们提供相应的判断(例如好瓜).如果说计算机科学是研究关于"算法"的学问,那么类似的,可以说机器学习是研究关于"学习算法"的学问.## 1.2基本术语:用于预测离散值,例如将样本分为“好瓜”或“坏瓜”。:用于预测连续值,例如西瓜的成熟度(如0.95、0.37)。

2201_75296678的博客 2530

【WinDbg 入门:用 C++ 自动生成 Dump,并学会分析崩溃现场】

这篇文章的核心不是让你记住所有 WinDbg 命令,而是建立完整的调试思路。程序注册异常处理函数↓程序发生崩溃↓异常处理函数拿到异常现场↓MiniDumpWriteDump 生成 Dump↓WinDbg 打开 Dump↓加载 PDB↓!analyze -v 看异常类型↓.ecxr 切换异常现场↓kv 查看调用栈↓dv 查看局部变量↓lmvm 查看模块和符号状态能让程序自动生成 .dmp 文件能用 WinDbg 打开 .dmp 文件能加载正确的 PDB能用!

云小逸的博客 435

【WRF数据准备】土地利用数据-MODIS MCD12Q1数据下载及制备

【WRF数据准备】MODIS静态地理数据下载及制备

WW、forever的博客 3412

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9808

终极Google Breakpad符号文件生成指南:从调试信息到可读堆栈跟踪的完整流程

Google Breakpad是一款强大的跨平台崩溃报告系统,能够帮助开发者收集应用程序崩溃时的关键信息,并将二进制数据转换为人类可读的堆栈跟踪。本文将详细介绍如何使用Breakpad生成符号文件,让你轻松解决应用崩溃难题。 ## Breakpad符号文件的重要性 当应用程序在用户设备上崩溃时,生成的minidump文件仅包含线程寄存器和堆栈的原始字节数据,缺乏函数名称和源代码位置信息。Bre

gitblog_00472的博客 942

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Breakpad 跨平台崩溃报告系统 入门指南

<br />Breakpad 既是一个函数库又是一个工具箱,它让你可以在发布应用程序给用户时移除编译器提供的调试信息,它会在一种简洁的"minidump"格式的文件中记录程序崩溃信息,并发送回你的服务器,而且可以从这些minidump文件中处理得到 C 和 C++ 堆栈记录(stack trace). Breakpad 也可以按要求给没有崩溃的程序写minidump文件. <br />Breakpad 正被 Google Chrome, Firefox, Google Picasa, Camino, Goo

adropofsnow的专栏 1311

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MiniDump文件的生成(一)

使用DbgHelp提供的MiniDumpWriteDump函数可以在程序崩溃的时候产生包含足够多信息的MiniDump文件供调试程序使用。 1.      MiniDumpWriteDump的声明如下 详见: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680360(v=vs.85).aspx 2. 作为示例

kecise的专栏 4818

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MiniDump文件的生成(二)

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

kecise的专栏 7595

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

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

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

Echo的博客 1528

MiniDump不生成或者生成0字节

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

witton的专栏 2096

Qt工程生成MiniDump文件

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

hai7song的专栏 1647
上一篇: MiniDump文件的生成(二)
下一篇: MFC:多文档视图中的子窗口枚举代码片段
kecise
博客等级 码龄16年 70粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值