前言
Windows下Dump文件分为两大类,内核模式Dump和用户模式Dump。内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump。本文主要介绍的是用户模式Dump;
模式分类
Windows 上 Dump 文件主要分为内核模式 Dump 文件和 用户模式 Dump 文件。
内核模式 Dump 文件有:
- Complete Memory Dump(完全内存转储)
- Kernel Memory Dump(核心内存转储)
- Small MemoryDump(小内存转储)
- Automatic Memory Dump(自动内存转储)
- Active Memory Dump(活动内存转储)
用户模式 Dump 文件分为:
- Full user-mode dumps (完整用户模式转储)
- Minidumps(小型转储)
内核Dump默认配置
一般情况下,以windows10举例,内核Dump配置为自动,可以通过电脑->属性->高级系统设置-启动和故障恢复查看:
用户Dump默认配置
一般情况下,用户Dump是没有默认配置的,如果希望自己的程序能够生成Dump文件,都需要手动配置使能够自动生成Dump文件或手动生成Dump文件。
方法一:修改注册表
使用管理员权限,执行一下脚本内容,运行后: 任何程序崩溃都会在C:\xxx 产生dmp文件(full dmp)。
@echo 设置启用Dump
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:\xxx" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /f
@echo 设置Dump已经启用
参数说明
DumpFolder:文件生成路径
DumpType:
- 0 = Create a custom dump //自定义dump
- 1 = Mini dump //mini核心dump文件
- 2 = Full dum //所有dump文件,产生的文件较大
DumpCount:Dump文件数量
它也支持在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps下添加子项,为指定的exe进行单独配置:
方法二:生动创建转储文件
当windows应用程序出现无响应时,可以打开任务管理器,找到无响应的进程,右键选择创建转储文件即可,即生成崩溃对应的dmp文件,该文件一般位于 C:\Users\happy\AppData\Local\Temp目录(显然这需要用户自己动手,不合适)
方法三:通过代码设置异常回调函数
使用windows系统api,程序中加入存储Dump的代码。通过SetUnhandledExceptionFilter
设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件