Debugging Tools for Windows

Minidump

只包含需要的和进程相关的内存信息的用户模式dump文件称为minidump

Minidump的大小和内容由被转储的程序和进行转储的程序共同决定。有时候,minidump可以很大并且包含完整的内存和句柄表。另一些时候,也可以很小 — 例如,可能只包含单个线程的信息,或者仅包含堆栈中实际引用到的模块的信息。

名字"minidump"实际上容易令人误解,因为最大的minidump 文件实际比"完整"用户模式dump包含更多信息。例如,.dump /mf.dump /ma 会比.dump /f 创建更大更完整的文件。由于这些原因,在创建用户模式dump文件时更加推荐使用.dump /m[MiniOptions] 而不是.dump /f

如果使用调试器创建minidump文件,可以精确选择所包含的信息。简单的.dump /m 命令仅包含进程的已加载模块、线程信息和调用堆栈这些基本信息。可以使用下面这些选项来修改:

.dump选项 dump文件中的作用
/ma 创建一个包含所有附加选项的minidump。/ma 选项和/mfFhut 一样 — 它将完整的内存数据、句柄数据、已卸载模块信息、基本信息和线程时间信息写入minidump。
/mf 将完整内存数据加入minidump。所有目标程序中已交付的能访问的页面都会包括进去。
/mF 将所有基本内存信息包含进minidump中。这会将一个流加入到包含完整基本内存信息的minidump中,而不单是可使用的内存。这样可以使得调试器能够重建minidump生成时进程的完整虚拟内存布局。
/mh 在minidump中包含和目标进程相关的句柄信息。
/mu 在minidump中包含已卸载模块信息。仅在Windows Server 2003和之后版本的Windows中可用。
/mt 在minidump中包含附加的线程信息。包括可以在调试minidump时使用.ttime (Display Thread Times)进行显示的线程时间。
/mi 在minidump中包含次级内存(secondary memory)。次要内存是由堆栈中的指针或备份存储(backing store)中引用到的任何内存,加上该地址周围的一小段区域。
/mp 在minidump中包含进程环境块(PEB)和线程环境块(TEB)。这在想访问程序的进程和线程相关的Windows系统信息时很有用。
/mw 将所有已交付的可读写的私有页面包含进minidump。
/md 在minidump中包含可执行映像中所有可读写得数据段。
/mc 加入映像中的代码段。
/mr 从minidump中去掉对重建调用堆栈无用的堆栈和存储内存部分。局部变量和其他数据类型值也被删除。这个选项不会使得minidump变小(因为这些内存节仅仅是变成0),但是当想保护其他程序中的机密信息时有用。
/mR 在minidump中去掉完整的模块路径。仅包含模块名。如果想保护用户的目录结构时该选项有用。
/mk "FileName" (仅Windows Vista)在用户模式minidump之外还创建一个内核模式minidump。内核模式minidump的内容仅限于和用户模式minidump中相同的线程。FileName 必须用引号括起来。

这些选项可以进行组合。例如,.dump /mfiu 命令可以用来创建一个相当大的minidump,或者.dump /mrR 命令可以用来创建一个能保护用户隐私的minidump。完整的语法细节,查看.dump (Create Dump File)

关于minidump文件内容的详细信息,查看Microsoft Windows SDK中的DbgHelp参考。

Build machine: CAPEBUILD