NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----38

 

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文件获取信息

posted on 2008-05-30 15:47 NetRoc 阅读(1266) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜