一、什么是Dump文件
二、Dump文件的类型
2.1 内核模式Dump
2.2 用户模式Dump
三、Dump文件的生成
3.1 通过调试工具生成
3.2 通过使用任务管理器生成
3.3 通过编程自动生成
四、各种抓取DUMP的工具
对于程序崩溃,最快的解决方式是生成dump文件,通过生成dump文件使用调试工具进行调试,还原程序崩溃时的状态,能够起到快速定位排查问题的作用。dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开。
2.1 内核模式Dump
Dump文件分为两大类,内核模式Dump和用户模式Dump。内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump。
2.2 用户模式Dump
用户模式Dump进一步可以分为完整Full Dump和Mini dump。Full Dump包含了某个进程完整的地址空间数据,以及许多用于调试的信息,而Mini dump则有许多类型,根据需要可以包含不同的信息,有的可能只包含某个线程和部分模块的信息。
Dump文件能够保存程序内部的内存、堆栈、句柄、线程等程序运行相关的信息,非常具有重要性。
3.1 通过调试工具生成
通过调试工具创建。调试工具如Visual Studio,Windbg以及微软提供的ADplus都可以创建DUMP,在Windbg中通过.dump命令来生成。
3.2 通过使用任务管理器生成
该方式可以生成.DMP文件,通过打开任务管理器,找到插件服务对应的进程,右击,选择创建转储文件:
.DMP文件的存放位置如下图所示:
3.3 通过编程自动生成
当程序遇到未处理异常(主要指非指针造成)导致程序崩溃死,如果在异常发生之前调用了SetUnhandledExceptionFilter()函数,异常交给函数处理。因而,在程序开始处增加SetUnhandledExceptionFilter()函数,并在函数中利用适当的方法生成Dump文件,即可实现需要的功能。
在编程过程中,可以预期的异常都通过结构化异常(try/catch)进行了处理。此时,如果发生了未预期的异常,这些异常处理代码无法处理,则转由Windows提供的默认异常处理器来进行处理,这个特殊的异常处理函数为UnhandledExceptionFilter。该函数会显示一个消息框,提示发生了未处理的异常,同时,让用户选择结束或调试该进程。也就是如下界面:
因此,为了更友好的处理未预期的异常(主要是创建内存转储),可以覆盖默认的异常处理操作。这是通过函数SetUnhandledExceptionFilter完成的,函数原型如下:
lpTopLevelExceptionFilter即异常处理函数指针,如果设置为NULL,则默认使用UnhandledExceptionFilter。因此我们可以对照lpTopLevelExceptionFilter自定义一个异常处理函数。我们需要创建内存转储。这通过函数MiniDumpWriteDump来实现。
下述代码是一个通过MiniDumpWriteDump函数来实现转储文件创建
任务管理器
任务管理器是自带抓取转储文件的工具。按住 即可打开。打开任务管理器后,在需要转储的进程上 -> ,即可自动保存转储文件到 目录下。
process explorer
比系统自带的任务管理器更强大,打开 ,在需要转储的进程上, -> -> 就可以保存转储文件了。( 抓取的信息少,但抓取的转储文件小,适合网络传输,根据自己的需要选择)
Visual Studio
简称 ,大家应该对 应该非常熟悉了,我就不多介绍了。打开 ,附加到需要转储的进程上,点击 按钮(或者按快捷键 )暂停目标进程。然后点击 -> 就可以保存转储文件了。如果不暂停目标进程, 按钮是置灰的
windbg