dump文件 -- 1.内核模式的崩溃转存文件

 

---来源于,本人学习windbg帮助文档时候,边看边翻译。希望对讨厌e文的朋友带来些方便。 我将会尽可能的持续翻译。

翻译并不是从windbg帮助文档开始处翻译,翻译是从帮助文档中对dump文件的介绍开始的地方进行翻译

 

当内核发生错误,Microsoft Windows 会默认显示蓝屏并显示出bug的检查信息。但是,这里有几种可替换的行为可供选择:

Ø  联接并进行内核调试

Ø  写入一个内存崩溃转存文件

Ø  系统自动启动

Ø  写一个内存崩溃转存文件后,并且系统自动重启

下面部分将介绍如何 创建和分析内核模式的内存转存文件。有三种不同的崩溃转存文件,但是需要知道没有任何转存文件能比直接进行系统调试有用。

 

1.1   内核转存文件的种类

有三种模式的内核崩溃转存文件:A, 全内存转存文件 ;  B,内核内存转存文件;  C,局部内存转存文件。

这些文件之间的不同点在于文件大小,全内存转存文件是最大的,它包含最多的信息;内核内存转存文件稍微小一些,最小的是 局部内存转存文件仅64KB

大一些的文件的优势在于,它包含了更多的信息,对你找出崩溃的原因更有帮助。

小的内存转存文件的优势在于创建更快。更快的速度创建文件是很有意思的,如果你正在运行一个服务器,你希望服务器能在崩溃后尽快的启动,但是重新启动必须是在内存转存文件创建 完毕后。

在全内存转存或内核内存转存文件被创建后,我们可以用大的内存转存文件去创建小的内存转存文件,具体细节参考 .dump命令。

注意:很多信息都可以从内核转存文件里获取。但是没有内核转存文件能提供直接进行内核调试如此多的信息。

 

1.1.1 全内存转存文件

                                一个完整的内存转存文件是最大的内核调试模式的转存文件。这种文件包含所有出错时候的物理内存信息。

                                转存文件需要至少和你内存大小等同的磁盘空间在你的启动分区中;它能存下你整个RAM1M大小的数据。

                                全内存转存文件默认存放在 %SystemRoot%\Memory.dmp

                                如果第二次发生错误,新的全内存转存文件将会被创建并覆盖以前的文件。

1.1.2 内核内存转存文件

                                内核内存转存文件包含在崩溃时候所有内核使用的内存的信息

                                 这种文件明显小于全内存转存文件。通常,这种文件的大小是内存的三分之一大小。当然,具体的大小是有很大差异的,这个取决于你的具体环境。

                                这种文件不会包含未分配的内存信息,或者任何的分配给用户模式程序的内存信息。它只包含分配给Windows内核和硬件抽象层的数据,同时也包含分配给内核模式的驱动程序和其它内核模式的程序的内存信息。

                                在大多数使用情况下,这种内存转存文件是最有用的。它明显小于全内存转存文件,同时它不包含与崩溃无关的内存的信息。

                          因为这种dump文件不包含用户模式的可执行文件的内存镜像崩溃时刻的信息,如果这些信息很重要,你需要设置可执行文件的路径信息。

1.1.3 局部内存转存文件

局部内存转存文件明显的小于另外两种文件,它只有64KB大小,它只需要64KB的磁盘空间来存放。

这种转存文件包含如下信息:

Ø  BUG检查信息和参数信息,也有其它关于蓝屏信息的数据

Ø  处理器上下文信息(PRCB)针对发生崩溃的处理器

Ø  进程信息和内核上下文处理进程的崩溃信息

Ø  线程信息和内核线程的崩溃信息

Ø  内核崩溃线程的调用堆栈信息,如果这些大于16KB,只有最开始部分的16KB信息会被包括。

Ø  被加载的驱动程序列表

Windows XP或更新版本的Windows上,如下的项也被包括:

Ø  加载和没有被加载的所有模块的列表信息

Ø  调试数据块,它包含所有的关于系统的基本调试信息

Ø  额外还有一些Windows标识的内存页,这些用于调试是非常有用的,这些包含有崩溃发生时候寄存器所指向的数据页,和组建失败时候请求的具体数据。

Ø  (Intel Itanium 处理器)内部存储信息

Ø  (Windows Server 2003 和更新版本) WindowsSKU信息,如 ’Professional’, ’Server’.

这些dump文件在空间很有限的情况下是非常有用的。但是因为信息的量很有限,错误可能不是由正在执行的进程引起的,有可能并不能通过分析文件找到错误。

因为这些dump文件没有包含可执行文件在崩溃时候的内存情况,如果这些执行文件非常重要,你就需要去设置好执行文件路径。

如果第二次bug再被检测到一个小的dump文件会被创建,以前的dump文件会被保存。每个文件会被给与不同的名字,名字中包含有当时的日期。比如mini022900-01.dmp 表示文件是在2000年,二月,29号的时候创建的。所有的小的dump文件都被保存在%SystemRoot%\Minidump.

posted @ 2009-11-27 17:26  tianhu  阅读(889)  评论(0编辑  收藏  举报