使用WinDbg进行故障转储分析——用户模式
用户模式转储文件
用户模式转储文件有两类,分别是完全用户模式转储文件和小型转储文件。这两种的差异在于大小。小型转储文件更紧凑一些。需要注意虽然我们可以通过分析转储文件来获取很多信息,但是任何转储文件都不能提供与实际使用调试器直接调试故障所得到一样多的信息。
完全用户模式转储文件
这个转储文件包括进程的整个内存空间、程序的可执行映像本身、句柄表和其他信息,这些信息对于调试器重建转储发生时正在使用的内存非常有用。
我们可以将一个用户模式的完全转储文件缩小为一个小型转储文件。只需要将dump文件加载到调试器中,然后使用 .dump 命令以小型转储文件的格式保存新的转储文件。
虽然被命名为小型转储文件,但是实际上最大的小型转储文件包含的信息要比完整的用户模式转储文件要多。比如 .dump /mf 或者 .dump /ma 命令将创建一个比 .dump /f 创建的文件更大更完整的dump文件。
用户模式下通常使用 .dump /m[MiniOptions] 命令。通过这种命令可以创建或者很小或者很大的转储文件,我们只需要指定MiniPotions就可以精确控制dump文件包含哪些信息。
小型转储文件
小型转储文件只包含与进程关联的内存选定部分。
小型转储文件的大小取决于被转储的程序和和执行转储操作的应用程序。有时候小型转储文件非常大,并包含整个内存和句柄表。但是通常小型转储文件都很小,甚至只包含关于单个线程的信息。所以我们不要被“小型转储文件”这个名字误导。
创建用户模式转储文件
自动创建转储文件
当应用程序出现错误时,Windows可以通过几种不同的方式进行响应,具体取决于事后调试设置。如果这些设置指示调试工具创建转储文件,则将创建一个用户模式的内存转储文件。
调试时创建转储文件
当WinDbg正在调试用户模式应用程序时,我们可以直接使用 .dump 命令来创建转储文件。这个命令不会导致应用程序终止。
分析用户态转储文件
安装符号文件
分析程序之前需要安装生成转储文件的Windows版本的符号文件。这个不是必须的。但是我们必须要安装导致系统生成dump文件的应用程序的符号文件。
启动windbg
windbg -y SymbolPath -i ImagePath -z DumpFileName
如果以及打开windbg,直接通过File➡Open Crash Dump或者使用CTRL+D快捷键打开崩溃转储。
分析转储文件
对完整用户转储文件的分析类似于对实时调试会话的分析。分析用户模式的迷你文件的方式与完整的用户转储相同。然而,由于保存的内存少得多,所以可以执行的操作受到了更大的限制。