1、Crash Dump文件
Crash Dump(后缀名为:.dmp)文件是进程的内存镜像,可以把程序运行时的状态完整的保存下来,是调试异常程序重要的方法,所以程序崩溃时,除了日志文件,dump文件便成了我们查找错误的最后一根救命的稻草。
2、在Windows中使用Windows Error Reporting保存Crash Dump文件
产生Crash Dump文件的方法不止这一种,这里我介绍这种使用Windows Error Reporting(以下简称WER) 的方法。
相较于其他方法WER的优势在于:
1.从Windows Server 2008以后,WER就加入了Windows中,我们现在的系统不需要再安装什么软件,仅仅只需要设置一下配置文件,然后启动服务便可以捕获Crash Dump文件了。
2.和使用其他工具的方式来比较,WER不会影响性能,这使得我们在生产环境上也可以随意打开这项服务,并且毫无副作用。
3、配置Windows Error Reporting
a) 设置WER
WER的配置项在注册表中。
1、打开regedit(注册表编辑器)。
2、找到下面这个项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
3、在他下面创建一个项,名字为你要检测的程序名。
此项中需要4个值配置
值:DumpFolder, 类型:REG_EXPAND_SZ - 顾名思义,就是存储dump的位置
值:DumpCount, 类型:REG_DWORD - 最大保留的dump个数,默认为10.
值:DumpType, 类型:REG_DWORD - Dump类型,0:Custom dump, 1: Mini dump, 2: Full dump. 默认值为1
值:CustomDumpFlags, 类型:REG_DWORD - 没怎么用,暂时不解释。
b)启动Windows Error Reporting Server服务
服务启动后如果相应程序出现了崩溃的情况,WER就会自动将Crash Dump保存到指定的目录
4、打开Dump文件
Vs2008将pdb和dmp文件放在一起,用vs2008打开dmp文件调试即可,程序会停到程序崩溃的点。
Vs2015直接打开dmp,在右侧有一个设置符号路径的选项,设置pdb的路径之后再调试程序也会停到崩溃的地方。
需要注意的点:
1.dmp文件和pdb的对应是非常严格的,不同版本的pdb和dmp文件肯定是对应不上的,应当完整的保存pdb文件,以便在出现问题时好查找。
2.Windows Error Reporting Server服务每当触发一次dump,就会变成非启动状态,因此在设置此服务时,应当设置启动类型为自动。
3.在配置WER时,需要注意的是Count大小的设置,如果dmp文件个数超过Count的个数,会进行滚动覆盖,即新的dmp会覆盖旧的dmp。