用户模式转储文件

本节包括:

有关分析转储文件的信息,请参阅 分析 User-Mode 转储文件

各种 User-Mode 转储文件

用户模式故障转储文件有多种,但分为两类:

完全 User-Mode 转储

小型转储

这些转储文件之间的差异是大小之一。 小型转储通常更紧凑,可轻松发送到分析师。

注意 可以通过分析转储文件来获取很多信息。 但是,任何转储文件都不能提供与实际使用调试器直接调试故障一样多的信息。

完全 User-Mode 转储

完整的用户 模式转储 是基本用户模式转储文件。

此转储文件包括进程的整个内存空间、程序的可执行文件映像本身、句柄表以及在重新构建转储时使用的内存时对调试器有用的其他信息。

可以将完整的用户模式转储文件 "收缩" 到小型转储。 只需将转储文件加载到调试器中,然后使用 . dump (创建转储文件) 命令,以小型转储格式保存新转储文件。

注意 尽管名称相同,但最大的 "小型转储" 文件实际上包含了比完整用户模式转储更多的信息。 例如, dump/mf/ma 将创建比 dump/f更大、更完整的文件。

在用户模式下, . 转储/m [MiniOptions] 是最佳选择。 用此开关创建的转储文件的大小可能会很小到非常大。 通过指定正确的 MiniOptions ,你可以精确控制所包含的信息。

小型转储

仅包含与进程关联的内存的选定部分的用户模式转储文件称为 小型转储。

小型转储文件的大小和内容因正在转储的程序和执行转储的应用程序而异。 通常,小型转储文件相当大,并且包括完整的内存和句柄表。 其他情况下,它会小得多,例如,它可能只包含单个线程的相关信息,或者只包含有关堆栈中实际引用的模块的信息。

名称 "小型转储" 会产生误导性,因为最大的小型转储文件实际包含的信息比 "完全" 用户模式转储多。 例如, dump/mf/ma 将创建比 dump/f更大、更完整的文件。 出于此原因,对于所有用户模式转储文件创建,请使用 转储/m[MiniOptions] 。转储/f

如果要使用调试器创建小型转储文件,则可以准确选择要包括的信息。 简单的 " 转储"/m 命令将包含有关构成目标进程、线程信息和堆栈信息的已加载模块的基本信息。 这可以使用以下任一选项进行修改:

dump 选项 对转储文件的影响

/ma

创建包含所有可选添加项的小型转储。 /Ma选项等效于/mfFhut --它将完整内存数据、处理数据、卸载的模块信息、基本内存信息和线程时间信息添加到小型转储。

/mf

将完整内存数据添加到小型转储。 将包括目标应用程序拥有的所有可访问的已提交页面。

/mF

将所有基本内存信息添加到小型转储。 这会将流添加到小型转储,其中包含所有基本内存信息,而不仅仅是有关有效内存的信息。 这使调试器能够在调试小型转储时重新构造进程的完整虚拟内存布局。

/mh

将有关与目标应用程序关联的句柄的数据添加到小型转储。

/mu

将卸载的模块信息添加到小型转储。 这仅在 Windows Windows Server 2003 和更高版本中可用。

/mt

向小型转储添加其他线程信息。 这包括线程时间,在调试小型转储时,可以使用 (ttime 显示线程时间)

/mi

辅助内存 添加到小型转储。 "辅助内存" 是指堆栈或后备存储中的指针所引用的任何内存以及此地址周围的小区域。

/mp

添加进程环境块 (PEB) 和线程环境块 (TEB) 数据添加到小型转储。 如果需要访问有关应用程序的进程和线程 Windows 系统信息,这会很有用。

/mw

将所有提交的读写专用页面添加到小型转储。

/md

将可执行映像内的所有读写数据段添加到小型转储。

/mc

在图像中添加代码段。

/mr

从小型转储中删除堆栈的部分,并存储用于重新创建堆栈跟踪的内存。 还会删除本地变量和其他数据类型值。 此选项不会使小型转储 (小型,因为这些内存部分只是归零) ,但如果你想要保护其他应用程序的隐私,则此选项很有用。

/mR

从小型转储中删除完整的模块路径。 只包含模块 名称 。 如果要保护用户的目录结构的隐私,这是一个非常有用的选项。

/mk "FileName"

(仅 Windows Vista) 除了创建用户模式小型转储外,还会创建一个内核模式小型转储。 内核模式小型转储将限制为存储在用户模式小型转储中的相同线程。 文件名 必须用引号引起来。

这些选项可以组合在一起。 例如, /mfiu 可用于创建相当大的小型转储,或命令 。转储/mrR 可用于创建保留用户隐私的小型转储。 有关完整的语法详细信息,请参阅 。 dump (创建转储文件)

创建 User-Mode 转储文件

有多种不同的工具可用于创建用户模式转储文件: CDB、WinDbg 和 Procdump。

ProcDump

ProcDump 是一个命令行实用程序,其主要用途是监视应用程序的 CPU 峰值,并在高峰期间生成故障转储,管理员或开发人员可以使用这些功能来确定高峰的原因。 ProcDump 还包括挂起的窗口监视 (使用 Windows 和任务管理器) 使用的相同的窗口挂起定义,并可基于系统性能计数器的值生成转储。 它还可以用作可嵌入到其他脚本中的常规进程转储实用工具。

有关使用 Sysinternals ProcDump 实用工具创建用户模式转储文件的信息,请参阅 ProcDump

CDB 和 WinDbg

CDB 和 WinDbg 可以通过多种方式创建用户模式转储文件。

自动创建转储文件

出现应用程序错误时,Windows 可以通过几种不同的方式进行响应,具体取决于事后调试设置。 如果这些设置指示调试工具创建转储文件,则将创建一个用户模式内存转储文件。 有关详细信息,请参阅 启用事后调试

在调试时创建转储文件

当 CDB 或 WinDbg 正在调试用户模式应用程序时,还可以使用 dump (创建转储文件) 命令创建转储文件。

此命令不会导致目标应用程序终止。 通过选择正确的命令选项,可以创建一个完全包含你希望的信息量的小型转储文件。

收缩现有转储文件

CDB 和 WinDbg 还可用于 收缩 转储文件。 为此,请开始调试现有转储文件,然后使用 .dump 命令创建较小的转储文件。

TTD (时间行程)

除了 CDB、WinDbg 和 Procdump 之外,调试用户模式应用程序的另一个选项是使用 TTD (时间) 。 "按时间顺序进行调试"是一种工具,可用于记录正在运行的进程的执行,然后向前和向后重播它。 使用 TTD (时行程调试) 可让你"倒带"调试器会话,而不是在找到 bug 之前重现问题,来帮助你更轻松地调试问题。

使用 TTD 可以返回时间,以更好地了解导致 bug 的条件,并多次重播它,了解如何以最佳方式解决问题。

与故障转储文件相比,TTD 可以具有优势,因为故障转储文件通常缺少导致最终失败的代码执行。

有关 TTD (时间) ,请参阅 时间旅行调试 - 概述