用户模式转储文件
本文概述了用户模式转储文件,以及如何使用它们来帮助解决错误和崩溃。
有关分析转储文件的信息,请参阅分析用户模式转储文件。
用户模式转储文件的类型
可以使用多种类型的用户模式崩溃转储文件。 不同类型的转储文件分为两类:
通过分析转储文件,可以获得大量信息。 但是,任何转储文件都无法提供通过使用调试器调试崩溃所获取的信息量。
完整用户模式转储
完整用户模式转储是基本用户模式转储文件。 完整用户模式转储文件包括:
- 进程的整个内存空间。
- 程序的可执行映像。
- 句柄表。
- 其他有助于调试器重建转储发生时正在使用的内存的信息。
可以将一个完整用户模式转储文件收缩为一个迷你转储中。 若要收缩完整用户模式转储文件,请先在调试器中加载转储文件。 然后,使用 .dump(创建转储文件)命令以小型转储格式保存新的转储文件。
尽管名称如此,但最大的小型转储文件包含的信息比完整用户模式转储文件更多。 例如,.dump /mf
和 .dump /ma
命令创建的文件比 .dump /f
命令更大、更完整。
在用户模式下,.dump /m
[MiniOptions] 通常是最佳选择。 使用此开关创建的转储文件的大小可能从非常小到非常大不等。 通过指定正确的 MiniOptions 开关,可以准确控制包含的信息。
小型转储
小型转储文件的大小和内容因转储的程序以及执行转储的应用程序和所选的选项而异。 有时,一个小型转储文件的大小适中,包含了完整的内存和句柄表。 其他情况下,小型转储文件要小得多。 例如,小型转储文件可能仅包含有关单个线程的信息,也可能只包含堆栈中引用的模块的信息。
术语小型转储具有误导性,因为最大的小型转储文件包含的信息比完整用户模式转储文件更多。 例如,.dump /mf
或 .dump /ma
创建的文件比 .dump /f
更大、更完整。 因此,建议使用 .dump /m
[MiniOptions] 而不是 .dump /f
来创建所有用户模式转储文件。
如果使用调试器创建小型转储文件,则可以选择要包含的信息。 .dump /m
命令包括有关组成目标进程的已加载模块的基本信息、线程信息和堆栈信息。 可以使用下表中所述的任何开关选项修改基本命令:
.dump 选项 |
对转储文件的影响 |
---|---|
/ma |
创建包含所有可选添加的小型转储。 /ma 选项等同于 /mfFhut 。 它会在小型转储中添加完整内存数据、处理数据、未加载模块信息、基本内存信息和线程时间信息。 |
/mf |
将完整内存数据添加到小型转储。 目标应用程序拥有的所有可访问提交页面都将包括在内。 |
/mF |
将所有基本内存信息添加到小型转储。 此开关会向小型转储添加包含所有基本内存信息的流,而不仅仅是有效内存的相关信息。 调试器可以使用这些信息,在调试小型转储时重建进程的完整虚拟内存布局。 |
/mh |
将与目标应用程序相关的句柄数据添加到小型转储。 |
/mu |
将未加载的模块信息添加到小型转储。 此选项仅适用于 Windows Server 2003 和更高版本的 Windows。 |
/mt |
将更多线程信息添加到小型转储。 线程信息包括线程时间,在调试小型转储时,可以通过 .ttime(显示线程时间)来显示线程时间。 |
/mi |
将辅助内存添加到小型转储。 辅助内存是堆栈或后备存储上指针引用的任何内存,以及围绕此地址的一小块区域。 |
/mp |
将进程环境块和线程环境块数据添加到小型转储。 如果需要访问有关应用程序进程和线程的 Windows 系统信息,这些信息非常有用。 |
/mw |
将所有提交的读写专用页面添加到小型转储。 |
/md |
将可执行映像中的所有读写数据段添加到小型转储。 |
/mc |
在映像中添加代码节。 |
/mr |
从堆栈的小型转储部分删除并存储不用于重新创建堆栈跟踪的内存。 局部变量和其他数据类型值也会被删除。 此选项不会使小型转储变小(未使用的内存部分只是被清零),但如果要保护其他应用程序的隐私,它会很有用。 |
/mR |
从小型转储中删除完整的模块路径。 仅包含模块名称。 如果要保护用户目录结构的隐私,此选项非常有用。 |
可以组合使用这些开关选项。 例如,使用命令 .dump /mfiu
创建一个中等大小的小型转储,其中包含已卸载的内存和辅助内存。 使用命令 .dump /mrR
创建一个小型转储,用于删除某些用户的信息。 有关完整语法的详细信息,请参阅 .dump(创建转储文件)。
用于创建转储文件的工具
可以使用多种不同的工具来创建用户模式转储文件:
ProcDump
ProcDump 是一个命令行实用工具,可用于监视应用程序的 CPU 峰值,并在峰值期间生成崩溃转储。 管理员或开发人员可以使用崩溃转储文件来确定峰值的原因。 ProcDump 还包括对挂起窗口的监视(通过使用与 Windows 和任务管理器使用的窗口挂起相同的定义)和未经处理的异常。 可以使用 ProcDump 根据系统性能计数器的值生成转储。 ProcDump 还可用作可嵌入到其他脚本中的常规进程转储实用工具。
有关使用 Sysinternals ProcDump 实用工具创建用户模式转储文件的信息,请参阅 ProcDump。
WinDbg 和 CDB
控制台调试器 (CDB) 和 Windows 调试器 (WinDbg) 是 Windows 软件开发工具包和 Windows 驱动程序工具包中包含的调试工具。 请参阅下载并安装 WinDbg Windows 调试器中的安装选项。
可以使用 CDB 或 WinDbg 以多种方式创建用户模式转储文件:
- 自动创建转储文件。
- 调试时创建转储文件。
- 收缩现有转储文件。
有关这些工具的详细信息,请参阅 Windows 调试入门指南和使用 CDB 进行调试。
自动创建转储文件
发生应用程序错误时,Windows 可能会根据事后调试设置以多种方式之一做出响应。 如果这些设置指示调试工具创建转储文件,则会创建用户模式内存转储文件。 有关详细信息,请参阅启用事后调试。
调试时创建转储文件
当 CDB 或 WinDbg 调试用户模式应用程序时,还可以使用 .dump(创建转储文件)命令创建转储文件。
此命令不会导致目标应用程序终止。 通过选择特定的命令选项,可以创建一个小型转储文件,其中包含所需的信息量。
收缩现有转储文件
可以使用 CDB 或 WinDbg 收缩转储文件。 若要收缩转储文件,请开始调试现有的转储文件。 然后,使用 .dump
命令创建较小的转储文件。
时间旅行调试
调试用户模式应用程序的另一个选项是时间旅行调试 (TTD)。 TTD 是一种工具,可以在进程运行时使用它来记录进程。 可以重播调试器会话的录制,以查找错误。 可以轻松地转到录制的不同部分,了解导致错误的情况以及如何解决问题。
TTD 比崩溃转储文件具有显著的优势,崩溃转储文件通常会丢失导致失败的代码执行。 在代码执行中向后移动的能力对于确定根本原因非常有用。
有关详细信息,请参阅时间旅行调试概述。
另请参阅
- 了解如何分析用户模式转储文件。
- 获取从转储文件中提取信息的提示。