Dump文件

article/2025/10/22 1:07:58

1. Dump文件

1. Dump文件介绍

Dump文件(Dump File),也叫转储文件,以.DMP为文件后缀。dump文件是进程在内存中的镜像文件,通过转换然后存储成以.DMP后缀的文件。dump文件根据存储时的选项不同,会生成不同大小的文件,其中记录信息也自然有所不同。

2. Dump文件分类

程序分两种,内核模式程序和用户模式程序,也即Ring0程序和Ring3程序。Dump文件是伴随着程序而生成的,所以Dump文件也同样分两种。 
1. Kernel-Mode Dump Files(内核模式Dump文件),主要是驱动程序,此文不涉及。 
2. User-Mode Dump Files(用户模式Dump文件),主要是应用程序及服务程序,此文所讲。 
用户模式Dump文件又分Full User-Mode Dumps和Minidumps。前者生成的是完整的内存快照,所以文件比较大。后者依然生成选项,生成包含不同信息的Dump文件。此文以Minidumps文件来分析调试。

3. Dump文件生成方式

  1. 通过WinDbg工具的命令 
    用WinDbg来Attach崩溃提示窗口的process,然后输入.dump /m C:\myapp.dmp命令,即可生成默认的miniDump文件(只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息)。
  2. 通过Windows任务管理器,选择指定进程,右键生成转储文件(此时的转储文件即为Full User-Mode Dumps,包含所有信息,所以文件比较大)。
  3. 通过代码在程序崩溃时生成Dump文件。
#include <DbgHelp.h>
#pragma comment(lib, "Dbghelp.lib")
// 此函数需要包含上面头文件和引入相应的库
LONG WINAPI ExceptionFilter(EXCEPTION_POINTERS* _pExcp) 
{   HANDLE hFile = CreateFile(  "d:\\Format.dmp",   GENERIC_WRITE,   0,   NULL,   CREATE_ALWAYS,   FILE_ATTRIBUTE_NORMAL,   NULL);  if (INVALID_HANDLE_VALUE == hFile)  {return EXCEPTION_CONTINUE_EXECUTION;}MINIDUMP_EXCEPTION_INFORMATION einfo = {0};einfo.ThreadId = ::GetCurrentThreadId();  einfo.ExceptionPointers = _pExcp;  einfo.ClientPointers = FALSE;  MiniDumpWriteDump(GetCurrentProcess(),   GetCurrentProcessId(),   hFile,   MiniDumpNormal,  // 指定生成默认的Minidump文件&einfo,   NULL,   NULL);  CloseHandle(hFile);   return   EXCEPTION_EXECUTE_HANDLER;   
}// 下面函数放在当前模块的入口函数处,指定ExceptionFilter替换原生的异常处理
// 即当原本要弹出崩溃提示窗口前,需要经过此函数处理,可以处理完立即退出,也可以继续
SetUnhandledExceptionFilter(ExceptionFilter); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

2. 分析Dump文件

1. 使用Visual Studio

  • 选择与生成Dump文件相同版本的VS。
  • 启动VS并打开Dump文件。
  • 必须保证生成Dump文件的程序的PDB文件和源代码相一致。
  • VS2005打开Dump文件时,直接按F5调试,代码会停在出错的地方,通过Call Stack窗口查看。
  • VS2010打开Dump文件时, 
    Dump 
    需要通过Set symbol paths设置符号文件路径,也即PDB文件路径。然后点击Debug with Native Only,代码即会暂时在出错的地方,通过Call Stack窗口查看相关信息。

2. 使用WinDbg

  • 选择相应版本的WinDbg,x86还是AMD64(也即X64,因为64桌面架构系统是AMD最新发布)。
  • File->Open Crush Dump,打开指定的Dump文件。
  • File->Symbol File Path,添加srv*D:\Symbols*http://msdl.microsoft.com/download/symbols
  • File->Symbol File Path,添加程序的PDB文件夹路径。这样可以调试系统DLL,也可以调试自有程序。
  • 然后在WinDbg命令行中输入!analyze -v,等待WinDbg分析完毕。
  • WinDbg
  • 通过上图,即可以看到代码崩溃的行数。

3. 自定义崩溃窗口

  1. 通常Windows会提供一个默认的崩溃提示窗口,或者是程序直接闪退。 
    此处输入图片的描述
  2. 重写ExceptionFilter函数,即可以重新定义崩溃窗口,用以提示用户发送相关信息给软件提供商。 
    此处输入图片的描述
  3. 示例代码 
    示例代码是Win32类型的DLL,导出接口SetCustomUnhandledExceptionFilter在Solution的启动Project的最开始调用一次即可。 

http://chatgpt.dhexx.cn/article/pkQBJsOn.shtml

相关文章

DUMP文件分析1:DUMP文件简介

1.1 DUMP文件类型 Windows下Dump文件分为两大类&#xff0c;内核模式Dump和用户模式Dump。内核模式Dump是操作系统创建的崩溃转储&#xff0c;最经典的就是系统蓝屏&#xff0c;这时候会自动创建内核模式的Dump。用户模式Dump进一步可以分为完整Dump&#xff08;Full Dump&…

VS中dumpbin.exe工具的使用

用VS2010生成的.obj文件、.lib库、.dll库、.exe执行文件&#xff0c;如果想查看其中这些文件或库包含了哪些函数以及相关的信息(符号清单)&#xff0c;可以通过VS2010自带的dumpbin工具来完成。 dumpbin.exe为Microsoft COFF二进制文件转换器&#xff0c;它显示有关通用对象文…

查看dll或exe文件的依赖项——使用vs自带的dumpbin工具

在使用vs写程序的时候&#xff0c;我们经常会将程序生成为dll或是exe文件&#xff0c;而这些文件通常也会需要依赖其他库的dll才能单独使用。那我们该如何确定某个dll或是exe文件依赖了哪些dll呢&#xff1f;这个问题可以通过使用vs自带的dumpbin工具来解决。下面详细介绍其使用…

用dumpbin.exe工具查看DLL

用dumpbin.exe工具查看DLL&#xff0c;dumpbin.exe是VS自带的工具。我装的是VS2010&#xff0c;所以路径是&#xff1a;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\下就可以看到dumpbin.exe了。 怎么使用dumpbin.exe呢&#xff1f;因为dumpbin.exe有可…

dump文件,windbg

dump文件&#xff0c;在VC中的调试还是非常非常非常有用的&#xff0c;因为我们也不会经每一行代码都加上日志&#xff0c;当然如果你愿意&#xff0c;也可以每一行都加上日志&#xff1b; 在Windows上&#xff0c;添加dump文件方法&#xff1a; 方法一&#xff1a;一个是在程…

dump分析

在项目运行过程中会产生很多的数据&#xff0c;如果这些数据是强引用是不会被垃圾回收器回收的&#xff0c;如果不及时手动清理则会越来越多&#xff0c;造成内存溢出。 在启动时在jvm命令增加内存溢出生成dump文件&#xff0c;这样在内存溢出的时候就会生成内存快照文件&#…

dumpbin工具的使用(配图)

WINR CMD进入指令界面 作用&#xff1a;配置dumpbin在CMD的运行环境 vs2010->VC->bin Dumpbin所在位置&#xff1a;X86系统 和X64系统的可运行文件 双击运行可使用&#xff0c;显示可运行的指令 查看静态库的信息要用命令行来实现&#xff1a; dumpbin /LINKERMEMBE…

VS2010中dumpbin工具的使用

用VS2010生成的.obj文件、.lib库、.dll库、.exe执行文件&#xff0c;如果想查看其中这些文件或库包含了哪些函数以及相关的信息(符号清单)&#xff0c;可以通过VS2010自带的dumpbin工具来完成。 dumpbin.exe为Microsoft COFF二进制文件转换器&#xff0c;它显示有关通用对象文…

VS自带工具:dumpbin的使用

用VS2010生成的.obj文件、.lib库、.dll库、.exe执行文件&#xff0c;如果想查看其中这些文件或库包含了哪些函数以及相关的信息(符号清单)&#xff0c;可以通过VS2010自带的dumpbin工具来完成。 1.输入Dumpbin -imports calldll.exe查看它的输入信息&#xff0c;可以看到它加载…

DUMPBIN工具的使用

dumpbin.exe是微软二进制文件转储器。显示有关通用对象文件格式 (COFF) 的二进制文件的信息。 可以使用 DUMPBIN 检查 COFF 对象文件、 COFF 对象、 可执行文件和动态链接库 (Dll) 的标准库。 dumpbin.exe所在路径是 vs安装目录\VC\bin\dumpbin.exe。 我的电脑VS安装路径是E:…

Java中常见异常及异常处理方式

Java异常的继承体系结构 java.lang.Throwable是Java语言中所有错误或异常的超类&#xff0c;在Java中只有Throwable类型的实例才可以被抛出&#xff08;throw&#xff09;或者捕获&#xff08;catch&#xff09;&#xff0c;它是异常处理机制的基本组成类型Error类是指Java运行…

23、Java——常见异常的原因和解决办法

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;乐趣国学的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

java各种异常总结

一、java异常汇总 1.Throwable 是所有异常的祖先&#xff0c;Throwable有两个子类&#xff0c;Error和Exception; 2.Error是错误&#xff0c;表示运行应用程序中出现了严重错误&#xff0c;都是通过Error抛出的&#xff0c;一般程序无法处理&#xff1b; Exception是异常&am…

Java中常见的异常类型

异常类型 在 Java 中所有异常类型都是内置类 java.lang.Throwable 类的子类&#xff0c;即 Throwable 位于异常类层次结构的顶层。Throwable 类下有两个异常分支 Exception 和 Error&#xff0c;如图 1 所示。 Throwable 类是所有异常和错误的超类&#xff0c;下面有 Error 和…

Java常见的10个异常

1、NullPointerException&#xff1a; 空指针异常&#xff0c;当操作一个 null 对象的方法或属性时会抛出这个异常。是一个很头疼的异常&#xff0c;因为它是运行时异常&#xff0c;不需要手动捕获&#xff0c;但运行时碰到这个异常会中断程序。 2、OutOfMemoryError&#xff1…

MFC程序

第一个MFC 界面程序 创建C 空项目 #include <afxwin.h> #include <atlimage.h> #include "resource.h"//继承一个模态框 每一个窗口 对应一个 类 class Login :public CDialog {private:HICON h_icon;//图标类public://构造函数 并且 调用 父类的构造函…

最全的基于MFC的ActiveX控件开发教程

转自&#xff1a;http://www.cnblogs.com/qguohog/archive/2013/01/22/2871805.html 浏览器插件之ActiveX开发&#xff08;一&#xff09; 一般的Web应用对于浏览器插件能不使用的建议尽量不使用&#xff0c;因为其涉及到安全问题以及影响用户安装&#xff08;或自动下载注册安…

MFC经验

MFC框架各部分指针获取方式: 记住&#xff0c;是获取指针 MFC消息流程图: string CString char* 的互相转换: string 转 CString   CString.Format("%s", string.c_str()); //用c_str()比data()好    char 转 CString   CString.Format("%s",…

C++ MFC程序入门

1. 选择“MFC应用程序”,命名后选下一步 2. 点“下一步” 3. 选择“基于对话框” 4. 仅勾选“主框架”