cc682/NetRoc
http://netroc682.spaces.live.com/
用户模式Dump文件
本节包含:
用户模式Dump文件种类
创建用户模式Dump文件
分析用户模式Dump文件
用户模式Dump文件种类
有各种不同的用户模式崩溃dump文件,但是他们可以分为两类:
完整用户模式Dump
Minidump
他们之间的差别之一是大小。Minidump通常要更加紧凑并且更容易发送给分析者。
注意 通过分析dump文件可以获得很多信息。但是没有任何dump文件能提供比直接使用调试器调试更多的信息。
完整用户模式Dump
完整用户模式dump是基本的用户模式dump文件。
这种dump文件包含进程的完整内存空间、程序本身的可执行映像、句柄表和其他对调试器有用的信息。
可以将一个完整用户模式dump"缩减"为minidump。只需要将dump文件加载进调试器中并使用.dump (Create Dump File)命令来将dump文件保存为minidump格式。
注意 和名字无关,最大的"minidump"文件实际上可以提供比完整用户模式dump更多的信息。例如,.dump /mf 或.dump /ma将创建比.dump /f 更大更完整的文件。
用户模式下,使用.dump /m[MiniOptions] 是最好的选择。通过这个开关创建的dump文件可以很小也可以很大。通过指定合适的MiniOptions 可以控制究竟需要包含哪些信息。
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参考。
创建用户模式Dump文件
有五种不同的工具可以用来创建用户模式dump文件: CDB、WinDbg、Dr. Watson、UserDump和ADPlus。
本节包含:
选择最好的工具
CDB和WinDbg
UserDump
关于使用ADPlus创建用户模式dump文件的更多信息,查看ADPlus。
关于使用Dr. Watson 创建用户模式dump文件的更多信息,查看Dr. Watson。
选择最好的工具
有五种不同的工具可用来创建用户模式dump文件。大多数情况下,ADPlus是最好的选择。
下表列出了每种工具的功能。
功能
|
ADPlus
|
Dr. Watson
|
CDB and WinDbg
|
UserDump
|
在程序崩溃时创建dump文件(即时调试)
|
是
|
是
|
是
|
是
|
在程序"挂起"时创建dump文件(停止相应但是未实际崩溃)
|
是
|
否
|
是
|
是
|
遇到异常时创建dump文件
|
是
|
是
|
是
|
是
|
程序正常运行时创建dump文件
|
否
|
否
|
是
|
否
|
对启动时就出现错误的程序创建dump文件
|
否
|
否
|
是
|
是
|
缩减已存在的dump文件
|
否
|
否
|
是
|
否
|
CDB和WinDbg
CDB和WinDbg 可以通过很多办法创建用户模式dump文件。
自动创建Dump文件
当应用程序出错时,根据即时调试设置的不同,Windows可以做出各种不同的反应。如果这些设置指示调试工具创建dump文件,则可以创建用户模式内存dump文件。
默认的即时调试设置是使用Dr. Watson 来生成dump。如果希望使用WinDbg作为即时调试器,可以使用下面这个命令来自动配置注册表:
windbg -I
如果使用CDB作为即时调试器,需要手动配置注册表。详细信息,查看启用即时调试。
在调试中创建dump文件
当CDB或WinDbg在调试用户模式程序时,可以使用.dump (Create Dump File)命令来创建dump文件。
这个命令不会造成目标进程终止。通过选择合适的命令选项,可以创建仅包含需要的信息的minidump文件。
缩减已存在的Dump文件
CDB和WinDbg也可以用来缩减dump文件。要这样做可以调试一个已存在的dump文件,然后使用.dump命令来创建尺寸更小的dump文件。
UserDump
UserDump 工具(userdump.exe),也称为用户模式进程转储工具(User-Mode Process Dump),也可以创建用户模式dump文件。
UserDump和它的文档是OEM支持工具包的一部分。
要下载该工具,可以到Knowledge Base Article Q253066站点并根据页面的指示操作。
默认的即时调试使用的转储工具是Dr. Watson。关于如何改变它的详细信息,查看启用即时调试。
分析用户模式Dump文件
本节包含:
使用CDB分析用户模式Dump文件
使用WinDbg分析用户模式Dump文件
关于如何使用Dr. Watson 分析用户模式dump文件的信息,查看查阅Dr. Watson日志文件 。
使用CDB分析用户模式Dump文件
可以使用CDB来分析用户模式内存转储文件。CDB运行的计算机的处理器平台和Windows版本不需要和创建dump文件的机器匹配。
安装符号文件
分析内存转储文件之前,需要首先安装生成dump文件的Windows版本相应的符号文件。选择用来分析dump文件的调试器需要使用这些文件。关于如何安装合适的符号文件的信息,查看安装Windows符号文件。
还需要安装产生该dump文件的程序或系统服务的用户模式进程对应的符号文件。如果是自己编写的代码,这些符号文件应该在编译和链接代码时一起生成了。如果是商业代码,可以在产品CD-ROM中查找或联系供应商获得特定符号文件。
启动CDB
使用-z 命令行选项启动CDB来分析dump文件:
cdb -y SymbolPath -i ImagePath -z DumpFileName
-v 选项(详细模式)也很有用。完整的选项列表,查看CDB命令行选项。
也可以在调试器运行之后通过.opendump (Open Dump File)命令后跟g (Go)命令来打开dump文件。这使得可以同时调试多个dump。
可以同时调试多个dump文件。通过在命令行中包含多个-z 开关(每个后跟一个不同的文件名),或者使用.opendump 将更多的dump文件作为调试目标。关于如何控制多目标调试会话的信息,查看调试多个目标。
Dump文件一般是以.dmp 或.mdmp扩展名结尾的。内存dump文件名可以使用网络共享或通用命名约定(Universal Naming Convention (UNC))。
Dump文件也经常被打包为CAB文件。如果在-z选项或.opendump 命令后指定了文件名(包含.cab扩展名),调试器可以直接从CAB中读取dump文件。但是,如果单个CAB包中存在多个dump文件,调试器一次只能读取它们中的一个。调试器不会在CAB中读取任何其他文件,即使有和dump文件关联的符号文件或其他文件。
分析完整用户模式Dump文件
分析完整用户模式dump文件和分析活动的调试会话类似。查看调试器命令参考来获得可在用户模式调试dump文件时使用的命令。
分析Minidump文件
对用户模式minidump 的分析和完整dump一样。但是,由于保存的内存要少很多,进行的操作可能受到很大限制。尝试访问内存的命令根据minidump文件内容的不同可能不能正常工作。
其他技术
关于从dump文件中读取特定种类信息的技术,查看从Dump文件获取信息 。
用WinDbg分析用户模式Dump文件
可以使用WinDbg分析用户模式内存转储文件。WinDbg运行的计算机的处理器平台和Windows版本不需要和创建dump文件的机器匹配。
安装符号文件
分析内存转储文件之前,需要首先安装生成dump文件的Windows版本相应的符号文件。选择用来分析dump文件的调试器需要使用这些文件。关于如何安装合适的符号文件的信息,查看安装Windows符号文件。
还需要安装产生该dump文件的程序或系统服务的用户模式进程对应的符号文件。如果是自己编写的代码,这些符号文件应该在编译和链接代码时一起生成了。如果是商业代码,可以在产品CD-ROM中查找或联系供应商获得特定符号文件。
启动WinDbg
使用-z 命令行选项启动WinDbg来分析dump文件:
windbg -y SymbolPath -i ImagePath -z DumpFileName
- v 选项(详细模式)也很有用。完整的选项列表,查看(R) WinDbg命令行选项。
如果WinDbg已经在运行并且处于静止模式,可以通过File | Open Crash Dump菜单命令或按下CTRL+D 快捷键打开dump文件。Open Crash Dump对话框出现时,在File name文本框输入崩溃dump文件的完整路径和文件名,或者直接在对话框中选择合适的路径和文件名。 选定文件之后,点击Open。
可以在调试器运行起来之后使用.opendump (Open Dump File) 命令后跟g (Go)命令来打开dump文件。
可以同时调试多个dump文件。通过在命令行中包含多个-z 开关(每个后跟一个不同的文件名),或者使用.opendump 将更多的dump文件作为调试目标。关于如何控制多目标调试会话的信息,查看调试多个目标。
Dump文件一般是以.dmp 或.mdmp扩展名结尾的。内存dump文件名可以使用网络共享或通用命名约定(Universal Naming Convention (UNC))。
Dump文件也经常被打包为CAB文件。如果在-z选项或.opendump 命令后指定了文件名(包含.cab扩展名),调试器可以直接从CAB中读取dump文件。但是,如果单个CAB包中存在多个dump文件,调试器一次只能读取它们中的一个。调试器不会在CAB中读取任何其他文件,即使有和dump文件关联的符号文件或其他文件。
分析完整用户模式Dump文件
分析完整用户模式dump文件和分析活动的调试会话类似。查看调试器命令参考来获得可在用户模式调试dump文件时使用的命令。
分析Minidump文件
对用户模式minidump 的分析和完整dump一样。但是,由于保存的内存要少很多,进行的操作可能受到很大限制。尝试访问内存的命令根据minidump文件内容的不同可能不能正常工作。
其他技术
关于从dump文件中读取特定种类信息的技术,查看从Dump文件获取信息 。