本实例基于VS开发,利用Windbg程通过序崩溃生成的dump文件进行简单的分析,借此了解dump分析的主要流程。
- 什么是dump文件?
即内存存储文件,一个进程或系统在某个给定时间的快照。也是内存镜像,保存了程序的执行状态。
通俗地理解,dump文件是程序发生异常甚至崩溃时,保存当时程序运行状态的文件,主要用来分析程序崩溃原因或蓝屏原因。
- 如何生成dump文件?
方法一:使用任务管理器
前提:程序运行崩溃后,没有自动退出的情况下。
任务管理器找到相应进程,右键选择“创建转储文件”,会在默认目录下生成该程序的dump文件。
方法二:使用Windbg抓取
前提:程序运行崩溃后,没有自动退出的情况下。
运行程序exe,在“Attach to a Process…”中选择对应程序
输入命令: .dump [/ma/mdi] [存放路径]
- 如何用Windbg打开dump文件?
-
“Symbol file path ”设置pdb文件目录
pdb文件:保存程序的基本数据(变量名、参数等以及其对应行数),在vs链接时形成。
-
“Source file path”设置对应源代码目录(sln所在的目录)
-
“open crash Dump”打开调试的dump文件
注意:若报错如下:
dump文件需要加载wow64exts才能访问32位数;执行命令:.load wow64exts
将32位dump转为64位;执行命令:!sw
- 这个例子使用简单的空指针崩溃test。
一般先执行命令:!analyze -v
根据STACK_TEXT(显示崩溃时的调用堆栈信息)分析:最终崩溃位置:在wmain函数(主函数),
根据FAULTING_SOURCE_CODE分析:可以看出是调用了空指针而导致的崩溃。
不过从现实的例子来说,只看FAULTING_SOURCE_CODE是不能准确定位的,需要结合STACK_TEXT显示的各函数相对位置,结合代码分析。