Debugging Tools for Windows |
只包含需要的和进程相关的内存信息的用户模式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参考。