NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----63

cc682/NetRoc

http://netroc682.spaces.live.com/

.ignore_missing_pages (Suppress Missing Page Errors)

.ignore_missing_pages 命令禁止当内核内存转储出现缺页时显示错误信息。

语法

.ignore_missing_pages {1|0
.ignore_missing_pages 

环境

模式

仅内核模式

目标

仅dump文件调试

平台

所有

 

注释

.ignore_missing_pages 1 命令使得在调试内核内存转储时禁止缺页错误信息。.ignore_missing_pages 0 则会显示这些命令。默认情况下调试器会显示错误信息。

如果不带参数,.ignore_missing_pages 显示当前的设置。

附加信息

关于如何调试这些Dump文件的更多信息,查看内核模式Dump

.imgscan (Find Image Headers)

.imgscan 命令在虚拟内存中查找映像头。

语法

.imgscan [Options

参数

Options

任意下面的选项:

/r Range

指定要搜索的范围。该语法的更多信息,查看地址和地址区域语法。如果仅指定一个地址,则调试器搜索从该位置开始的0x10000字节范围。

/l

为任何已找到的映像头加载模块信息。

/v

显示详细信息。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

如果不使用/r参数,调试器会搜索所有虚拟内存区域。

.imgscan 命令显示找到的任何映像头和头类型。映像头类型包括可移植映像文件头(PE)和Microsoft MS-DOS MZ头。

下面是.imgscan命令的示例。

0:000> .imgscan
MZ at 00400000, prot 00000002, type 01000000 - size 2d000
MZ at 77f80000, prot 00000002, type 01000000 - size 7d000
  Name: ntdll.dll
MZ at 7c570000, prot 00000002, type 01000000 - size b8000
  Name: KERNEL32.dll

.kdfiles (Set Driver Replacement Map)

.kdfiles 命令读取一个文件并将它的内容作为驱动替换映射。

语法

.kdfiles MapFile 
.kdfiles -m OldDriver NewDriver
.kdfiles -s SaveFile 
.kdfiles -c 
.kdfiles 

参数

MapFile

指定要读取的驱动替换映射文件。

-m

在当前关联列表(association list)中添加驱动替换关联。

OldDriver

指定目标机上的旧驱动的路径和文件名。OldDriver和语法和驱动替换文件中map之后的第一行相同。该语法的更多信息,查看映射驱动文件

NewDriver

指定新驱动的路径和文件名。该驱动可以在主控机上或者其他的网络路径中。NewDriver 的语法和驱动替换文件中map之后的第二行相同。该语法的更多信息,查看映射驱动文件

-s

创建一个文件并将当前的驱动替换连接写入进去。

SaveFile

指定要创建的文件名。

-c

删除已存在的驱动替换映射。 (该选项并不改变映射文件本身,而是清除调试器的当前映射设置。)

环境

可以在Microsoft Windows XP和之后版本的Windows中使用.kdfiles 命令。如果在之前的Windows中使用,命令不会产生错误但是也不会有任何作用。

模式

仅内核模式

目标

仅活动调试

平台

仅x86和Itanium处理器

注释

如果不带参数使用 .kdfiles ,调试器显示当前的驱动替换映射文件的路径和名字以及当前的替换关联的集合。

运行该命令时,会读取指定的MapFile文件。如果找不到文件或者没有包含适当格式的文本,调试器会显示一个状态信息"Unable to load file associations"。

如果指定文件是以正确的驱动替换映射文件格式的,调试器加载该文件并将它们作为驱动替换映射。该映射一直保持到退出调试器或者执行了另一个.kdfiles 命令为止。

读取该文件后,后来对它的改变不会作用于驱动替换映射。 (除非改变之后再次使用.kdfiles 命令)。

需求

版本: 在Windows XP之后的Windows操作系统中支持。

附加信息

驱动替换和其他内核模块的示例、驱动替换映射文件格式的说明,以及使用该功能的限制,查看映射驱动文件

.kframes (Set Stack Length)

.kframes 命令设置堆栈回溯显示的默认长度。

语法

.kframes FrameCountDefault 

参数

FrameCountDefault

指定当使用堆栈回溯命令时要显示的堆栈帧个数。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

可以使用.kframes 命令来 设置堆栈回溯显示的默认长度。该长度会控制kkbkpkPkv命令显示的帧个数,以及kd命令显示的 DWORD_PTR个数。

可以在这些命令中使用FrameCountWordCount 参数来覆盖默认长度。

如果没有执行过.kframes 命令,默认数量为20 (0x14)。

参见

k, kb, kd, kp, kP, kv (Display Stack Backtrace)

.kill (Kill Process)

用户模式下.kill 命令结束调试会话并关闭目标程序。

内核模式下.kill 命令结束目标机上的一个进程。

语法

用户模式

.kill 

内核模式

.kill Process 

参数

Process

指定要结束的进程的地址。如果省略Process或者指定为0,调试器结束当前系统状态下的默认进程。

环境

内核模式下,该命令仅在Microsoft Windows Server 2003和之后版本的Windows中支持。

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

注释

用户模式下,.kill命令结束调试会话、关闭目标程序并且将调试器返回到静止模式。

内核模式下,该命令为了终止选定进程,会在目标机上调度它。下一次目标可以运行时(例如使用g (Go) 命令),指定进程就会结束。

本地内核调试时不能使用该命令。

需求

版本: (内核模式) 在Windows Server 2003和之后的系统中支持。

附加信息

关于如何结束用户模式目标或者停止附加的更多信息,查看结束调试会话

.lastevent (Display Last Event)

.lastevent 命令显示最近一次发生的异常或事件。

语法

.lastevent 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

中断到调试器总是会产生一个异常。当调试器能够接受输入时总是存在一个最近事件(last event)的。如果使用CTRL+CCTRL+BREAKDebug | Break中断到调试器,总是会产生一个of 0x80000003异常代码。

附加信息

关于异常和事件的更多信息,查看控制异常和事件

.lines (Toggle Source Line Support)

.lines 命令启用或者禁用对源码行信息的支持。

语法

.lines [-e|-d|-t]

参数

-e

启用源码行支持。

-d

禁用源码行支持。

-t

打开或关闭源码行支持。如果.lines没有指定参数,.lines 命令的默认行为就是在是否支持源码行之间切换。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

进行源码调试前必须先启用源码行支持。这种支持使得调试器加载源码行符号。

可以通过.lines 命令或-lines 命令行选项启用源码行支持。如果已经打开了源码行支持,可以使用.lines 命令来禁用。

默认情况下,如果不使用.lines 命令,WinDbg打开源码行支持,而命令行调试器 (KD、CDB、 NTSD) 是关闭的。关于如何改变该设置的更多信息,查看设置符号选项

附加信息

源码调试以及相关命令的更多信息,查看源码模式调试

.load, .loadby (Load Extension DLL)

.load.loadby 命令将一个新的扩展DLL加载到调试器中。

语法

.load DLLName 
!DLLName.load 
.loadby DLLName ModuleName 

参数

DLLName

指定要加载的调试器扩展DLL。如果使用.load 命令,DLLName 需要包含完整路径。如果使用.loadby 命令,DLLName 应该只包含文件名。

ModuleName

指定位于DLLName 指定的扩展DLL相同目录下的模块的模块名。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

使用.load命令时必须指定全路径。

使用.loadby 命令时不需要指定路径。调试器会找到ModuleName 参数指定的模块,然后使用它的路径来加载扩展DLL。如果调试器找不到该模块或者找不到扩展DLL,会收到一条提示这个问题的错误信息。指定的模块和扩展DLL之间不需要任何关系。使用.loadby 命令是可以避免输入很长的路径的简便方法。

.load .loadby 命令完成后,就可以访问该扩展中的命令了。

要加载一个扩展DLL,可以使用下面的方法之一:

  • 使用 .load.loadby 命令。
  • 使用完整的!DLLName.ExtensionCommand 语法。如果调试器还没有加载DLLName.dll,则会在这个时候加载。

附加信息

关于如何加载、卸载和控制扩展的更多信息,查看加载调试器扩展DLL

.locale (Set Locale)

.locale 命令设置或显示当前区域。

语法

.locale [Locale

参数

Locale

指定需要的区域设置。如果省略该参数,调试器显示当前区域设置。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

区域化设置控制Unicode字符串如何显示

下面是.locale命令的示例。

kd> .locale
Locale: C

kd> .locale E
Locale: English_United States.1252

kd> .locale c
Locale: Catalan_Spain.1252

kd> .locale C
Locale: C

附加信息

关于区域设置的更多信息,查看MSDN Library中的setlocale函数。

.logappend (Append Log File)

.logappend 命令将调试器命令窗口中的事件和命令添加到指定的日志文件末尾。

语法

.logappend [/u] [FileName

参数

/u

以Unicode格式写入日志文件。如果省略该参数,调试器以ASCII (ANSI) 格式写入日志。

注意  如果添加到已存在的日志文件末尾,只有当该文件是使用/u 选项创建时才能使用/u 参数。否则日志文件中会同时包含ASCII和Unicode字符,造成阅读困难。

FileName

指定日志文件名。可以是全路径或者仅仅是文件名如果文件名包含空格,将FileName 用引号括起来。如果没有指定路径,调试器使用当前目录。如果省略FileName,调试器使用Dbgeng.log 作为名字。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

如果运行.logappend 命令时已经打开了日志文件,调试器会关闭它。如果指定已存在的文件,调试器会将新的信息添加到末尾。如果文件不存在,调试器会创建它。

附加信息

关于其他作用于日志文件的命令的更多信息,查看记录日志文件

.logclose (Close Log File)

.logclose 命令关闭任何已打开的日志文件。

语法

.logclose 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

附加信息

关于其他作用于日志文件的命令的更多信息,查看记录日志文件

.logfile (Display Log File Status)

.logfile命令查看日志文件是否存在并显示文件状态。

语法

.logfile 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

附加信息

关于其他作用于日志文件的命令的更多信息,查看记录日志文件

.logopen (Open Log File)

.logopen 命令将调试器命令窗口 中的事件和命令写入一个新的日志文件。

语法

.logopen [Options] [FileName
.logopen /d 

参数

Options

任意下面的选项:

/t

在日志文件名中添加进程ID、当前日期和时间。这些信息会插入到文件名后,扩展名之前。

/u

以Unicode形式写入日志文件。如果省略该选项,调试器以ASCII (ANSI)格式记录日志。

FileName

指定日志文件名。可以是全路径或者仅仅是文件名如果文件名包含空格,将FileName 用引号括起来。如果没有指定路径,调试器使用当前目录。如果省略FileName,调试器使用Dbgeng.log 作为名字。

/d

基于目标进程的名字或目标机和状态莱自动生成文件名。该文件总是使用.log 扩展名。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

如果运行.logopen 命令时已经打开了日志文件,调试器会关闭它。如果指定已存在的文件,它的内容会被覆盖。

.logopen /t 命令在日志文件名中加入进程ID、日期和时间。下面例子中,进程ID的16进制是0x02BC、日期是February 28, 2005、时间是9:05:50.935。

0:000> .logopen /t c:\logs\mylogfile.txt
Opened log file 'c:\logs\mylogfile_02BC_2005-02-28_09-05-50-935.txt'

附加信息

关于其他作用于日志文件的命令的更多信息,查看记录日志文件

posted @ 2008-06-30 11:23 NetRoc 阅读(622) | 评论 (0)编辑 收藏

WinDbg 文档翻译----62

     摘要: cc682/NetRoc http://netroc682.spaces.live.com/ .f+, .f- (Shift Local Context) .f+ 命令将帧序号移动到当前堆栈中的下一帧。.f- 命令将帧序号移动到当前堆栈中的上一帧。 语法 .f+  .f-   环境 ...  阅读全文

posted @ 2008-06-27 13:38 NetRoc 阅读(949) | 评论 (0)编辑 收藏

WinDbg 文档翻译----61

cc682/NetRoc

http://netroc682.spaces.live.com/

.effmach (Effective Machine)

.effmach 命令显示或更改调试器使用的处理器模式。

语法

.effmach [MachineType

参数

MachineType

指定调试器为该会话使用的处理器类型。如果省略该参数,调试器显示当前的机器类型。

可以输入下面的机器类型之一。

机器类型

说明

.

使用目标机的处理器模式。

#

使用最近一次事件的代码所执行的处理器模式。

x86

使用x86处理器模式。

amd64

使用x64处理器模式。

ia64

使用Itanium处理器模式。

ebc

使用EFI字节码处理器模式。

 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

处理器模式会影响到一些调试器特性:

  • 堆栈回溯时使用哪一种处理器分析器(unwinder)。
  • 处理使用32位还是64位指针。
  • 使用什么处理器寄存器集合。

.enable_long_status (Enable Long Integer Display)

.enable_long_status 命令指定调试器以10进制格式还是默认基数形式显示长整数。

语法

.enable_long_status 0 
.enable_long_status 1 

参数

0

以10进制形式显示所有长整数。这是调试器的默认行为。

1

以默认基数显示所有长整数。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.enable_long_status 命令作用于dt (Display Type) 命令的输出。

在WinDbg中,.enable_long_status 也作用于Locals 窗口Watch 窗口的显示。这些窗口在执行.enable_long_status后会自动刷新。

该命令仅作用于长整数的显示。使用.force_radix_output (Use Radix for Integers) 命令来控制标准整型以10进制还是默认基数显示。

注意  dv (Display Local Variables) 命令总是以当前基数显示长整数。

使用n (Set Number Base) 命令来改变默认基数。

.enable_unicode (Enable Unicode Display)

.enable_unicode 命令指示调试器是否将USHORT指针和数组作为Unicode字符串来显示。

语法

.enable_unicode 0 
.enable_unicode 1 

参数

0

将所有16位(USHORT)数组和指针显示为短整型。这是调试器的默认行为。

1

将所有16位(USHORT)数组和指针显示为Unicode字符串。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.enable_unicode 命令作用于dt (Display Type) 命令的输出。

在WinDbg中,.enable_unicode也作用于Locals 窗口Watch 窗口的显示。这些窗口在执行.enable_unicode后会自动刷新

也可以在Locals或Watch窗口的快捷菜单中选择或清除 Display 16-bit values as Unicode 来设置对USHORT数组和指针的显示。

参见

ds, dS (Display String)

.endpsrv (End Process Server)

.endpsrv 命令关闭当前process serverKD connection server

语法

.endpsrv 

环境

只有在进行通过进程服务器或者KD连接服务器的远程调试时才能使用该命令。

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.endpsrv 命令结束当前连接到灵巧客户端上的进程服务器或者KD连接服务器。

如果希望在运行进程服务器或KD连接服务器的机器上结束他们,可以使用任务管理器来结束进程 (dbgsrv.exekdsrv.exe)。

.endpsrv 命令可以结束进程服务器或KD连接服务器,但是它不能结束调试服务器。更多信息,查看控制远程调试会话

附加信息

关于这些服务器的更多信息,查看进程服务器(用户模式)KD 连接服务器(内核模式)

.endsrv (End Debugging Server)

.endsrv 命令使得调试器取消一个活动的调试服务器。

语法

.endsrv ServerID 

参数

ServerID

指定调试服务器的ID。

环境

只有当进行通过调试器的远程调试时才能使用该命令。

模式

仅用户模式

目标

活动目标、崩溃转储

平台

所有

注释

必须从调试服务器或者某个连接到调试服务器上的调试客户端上执行.endsrv 命令。

要查看调试服务器的ID,使用.servers (List Debugging Servers) 命令。

.endsrv 命令用于结束调试服务器,但是通常它不能用来结束进程服务器或KD连接服务器。一般来说,进程服务器是由DbgSrv程序启动的,而KD连接服务器由KdSrv程序启动;使用这些方法时,.endsrv 命令不能结束它们 (关于如何结束它们的信息,查看控制进程服务器会话控制KD连接服务器会话)。但是,如果某个DbgEng程序或者扩展命令通过调用 IDebugClient::StartProcessServer方法来创建进程服务器,则.endsrv 命令可以用来结束它。由于ID号是从0开始连续指派的,所以一般使用.endsrv 0就可以了。

如果取消一个调试服务器,就可以避免之后再有调试客户端附加到它上面。但是,取消调试服务器并不能让任何当前已附加到服务器上的客户端退出。

考虑到以下的情况,假设使用了下面例子的方法来启动调试服务器。

0:000> .server npipe:pipe=rabbit
Server started with 'npipe:pipe=rabbit'
0:000> .server tcp:port=7
Server started with 'tcp:port=7'

之后又决定像下面一样使用密码。

0:000> .server npipe:pipe=tiger,password=hardtoguess
Server started with 'npipe:pipe=tiger,password=hardtoguess'

但是先前的服务器仍然在运行,所以需要像下面一样关闭他们。

0:000> .servers
0 - Debugger Server - npipe:Pipe=rabbit
1 - Debugger Server - tcp:Port=7
2 - Debugger Server - npipe:Pipe=tiger,Password=*
0:000> .endsrv 0
Server told to exit.  Actual exit may be delayed until
the next connection attempt.
0:000> .endsrv 1
Server told to exit.  Actual exit may be delayed until
the next connection attempt.
0:000> .servers
0 - <Disabled, exit pending>
1 - <Disabled, exit pending>
2 - Debugger Server - npipe:Pipe=tiger,Password=*

最后,要使用.clients (List Debugging Clients) 命令确认没有人再通过先前激活的服务器附加到计算机上。

0:000> .clients
HotMachine\HostUser, last active Mon Mar 04 16:05:21 2002

警告  通过TCP、BPIPE或COM协议使用密码只能提供有限的保护,因为密码是没有加密的。通过SSL或SPIPE协议使用密码时,密码是加密的。如果需要安全的远程会话,必须使用SSL或SPIPE协议。

附加信息

关于远程调试的更多信息,查看通过调试器进行的远程调试

.enumtag (Enumerate Secondary Callback Data)

.enumtag 命令显示所有次级错误检查回调数据(econdary bug check callback data)和所有数据标签(data tags)。

语法

.enumtag 

环境

模式

仅内核模式

目标

活动目标、崩溃转储

平台

所有

注释

只有在产生错误检查后,或者调试内核模式崩溃转储文件时可以使用.enumtag 命令。

对于每个次级错误检查回调数据块,.enumtag 命令显示标签 (以GUID 格式) 和数据(以字节和ASCII 字符形式)。

例如下面这个例子。

kd> .enumtag
{87654321-0000-0000-0000000000000000} - 0xf9c bytes
  4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00  MZ..............
  B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00  ........@.......
  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  ....
  00 00 00 00 00 00 00 00 00 00 00 00              ............

{12345678-0000-0000-0000000000000000} - 0x298 bytes
  F4 BF 7B 80 F4 BF 7B 80 00 00 00 00 00 00 00 00  ..{...{.........
  4B 44 42 47 98 02 00 00 00 20 4D 80 00 00 00 00  KDBG..... M.....
  54 A5 57 80 00 00 00 00 A0 50 5A 80 00 00 00 00  T.W......PZ.....
  40 01 08 00 18 00 00 00 BC 7D 50 80 00 00 00 00  @........}P.....
  ....
  00 00 00 00 00 00 00 00                          ........

该例子中,第一段次级数据使用GUID ({87654321-0000-0000-0000000000000000})作为标签,第二段数据使用GUID ({12345678-0000-0000-0000000000000000}) 作为标签。但是该数据并不是很有用的格式。

附加信息

关于显示该数据得其他方法的信息,查看解读错误检查回调数据

.event_code (Display Event Code)

.event_code 当前事件的指令。

语法

.event_code 

环境

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

注释

.event_code 命令显示当前事件的指令指针处的16进制指令。如果可能的话,最多显示64字节的指令。

.eventlog (Display Recent Events)

.eventlog 命令显示最近一次Microsoft Win32 调试事件,例如模块加载、进程创建和终止以及线程创建和终止。

语法

.eventlog 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.eventlog 命令仅显示1024个字符。

下面是.eventlog 命令的例子。

0:000> .eventlog
0904.1014: Load module C:\Windows\system32\ADVAPI32.dll at 000007fe`fed80000
0904.1014: Load module C:\Windows\system32\RPCRT4.dll at 000007fe`fe8c0000
0904.1014: Load module C:\Windows\system32\GDI32.dll at 000007fe`fea00000
0904.1014: Load module C:\Windows\system32\USER32.dll at 00000000`76b10000
0904.1014: Load module C:\Windows\system32\msvcrt.dll at 000007fe`fe450000
0904.1014: Load module C:\Windows\system32\COMDLG32.dll at 000007fe`fecf0000
0904.1014: Load module C:\Windows\system32\SHLWAPI.dll at 000007fe`fe1f0000
0904.1014: Load module C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b6414
4ccf1df_6.0.6000.16386_none_1559f1c6f365a7fa\COMCTL32.dll at 000007fe`fbda0000
0904.1014: Load module C:\Windows\system32\SHELL32.dll at 000007fe`fd4a0000
0904.1014: Load module C:\Windows\system32\WINSPOOL.DRV at 000007fe`f77d0000
0904.1014: Load module C:\Windows\system32\ole32.dll at 000007fe`feb10000
0904.1014: Load module C:\Windows\system32\OLEAUT32.dll at 000007fe`feeb0000
Last event: Break instruction exception - code 80000003 (first chance)

.exepath (Set Executable Path)

.exepath 命令设置或显示可执行文件搜索路径。

语法

.exepath[+] [Directory [; ...]] 

参数

+

指示调试器将新的目录添加到可执行文件搜索路径末尾 (而不是替换该路径)。

Directory

指定要加入搜索路径的一个或多个目录。如果不指定Directory,则显示当前搜索路径。可以使用分号分隔多个目录。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

附加信息

关于如何改变可执行文件搜索路径的更多信息,查看可执行映像路径

.expr (Choose Expression Evaluator)

.expr 命令指定默认的表达式求值器。

语法

.expr /s masm 
.expr /s c++ 
.expr /q 
.expr 

参数

/s masm

将默认表达式类型改变为Microsoft Assembler expression evaluator (MASM)。这是调试器启动时的默认类型。

/s c++

将默认表达式类型改变为C++ 表达式。

/q

显示可用的表达式类型的列表。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

不带参数使用 .expr 时,调试器显示当前的默认表达式类型。

?? (Evaluate C++ Expression) 命令Watch窗口、和 Locals窗口总是使用C++表达式语法。所有其它命令和调试器信息窗口使用默认的表达式求值器。

关于如何控制使用哪一种语法的信息,查看表达式求值。语法的更多信息,查看 数值表达式语法

.exptr (Display Exception Pointers)

.exptr 命令显示一个EXCEPTION_POINTERS结构。

语法

.exptr Address

参数

Address

指定EXCEPTION_POINTERS结构的地址。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

.exr (Display Exception Record)

.exr 命令显示某个异常记录的内容。

语法

.exr Address 
.exr -1 

参数

Address

指定异常记录的地址。如果指定–1作为地址,调试器显示最近一次异常。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.exr 命令显示调试器在目标机上遇到的异常的相关信息。该信息包括异常地址、异常代码、异常标志和异常的各种参数的列表。

可以通过!pcr 扩展命令来得到Address

.exr 命令常常用来调试错误检查0x1E。更多信息和示例,查看Bug Check 0x1E (KMODE_EXCEPTION_NOT_HANDLED)。

.extpath (Set Extension Path)

.extpath 命令设置或显示扩展DLL搜索路径。

语法

.extpath[+] [Directory [; ...]] 

参数

+

指示调试器应该把新的目路添加到扩展DLL搜索路径末尾 (而不是替换该路径)。

Directory

指定一个或多个要添加的搜索路径。如果不指定Directory,则显示当前搜索路径。可以用分号分隔多个目录。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

附加信息

关于扩展DLL的搜索和加载的更多信息,查看加载调试器扩展DLL

posted @ 2008-06-26 10:24 NetRoc 阅读(452) | 评论 (0)编辑 收藏

WinDbg 文档翻译----60

cc682/NetRoc

http://netroc682.spaces.live.com/

.dbgdbg (Debug Current Debugger)

.dbgdbg 命令启动一个CDB的新实例,这个新的调试器会将当前调试器作为目标。

语法

.dbgdbg 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

.dbgdbg 命令和CTRL+P (Debug Current Debugger) 控制键类似。但是,.dbgdbg 更通用,因为它可以像KD和CDB中一样在WinDbg中使用,并且可以用来调试远程电脑上的调试服务器。

.detach (Detach from Process)

.detach 命令结束调试会话,但是让任何用户模式目标程序继续运行。

语法

.detach 

环境

对于用户模式活动调试,该命令仅在Windows XP和之后的系统支持。

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

该命令可以在下面这些情况下结束调试会话:

  • 调试用户模式或内核模式dump文件时
  • (Windows XP和之后的系统) 调试用户模式活动目标时。
  • 对用户模式目标进行非侵入式调试。

如果只是调试单个目标,调试器在取消附加之后会返回到静止模式。

如果正在调试多个目标,剩下的目标会继续调试会话。

附加信息

关于退出调试器和停止对目标附加的其他方法,查看结束调试会话

.dump (Create Dump File)

.dump 命令创建一个用户模式或内核模式崩溃转储文件。

语法

.dump Options FileName 
.dump /? 

参数

Options

指定下面这些选项的一个或多个。

/o

覆盖具有相同名字的dump文件。如果没有使用该选项又存在一个相同名字的文件,则dump文件不会被写入。

/f

(内核模式:) 创建一个完整内存dump

(用户模式:) 创建一个完整用户模式dump。不管怎么称呼,最大的minidump文件实际比完整用户模式dump文件包含更多信息。例如, .dump /mf.dump /ma 会创建比.dump /f创建更大更完整的文件。在用户模式下,.dump /m[MiniOptions] 总是比.dump /f更可取。

/m[MiniOptions]

创建一个小内存dump(内核模式)或者 minidump (用户模式)。如果没有指定 /f/m/m 是默认选项。

用户模式下,/m 后面可以跟附加的MiniOptions 用来指定dump文件中包含的数据。如果没有使用MiniOptions ,dump文件包含模块、线程和调用堆栈信息,但是没有其他附加信息。可以使用下面的任意MiniOptions 来改变dump文件的内容,它们区分大小写。

MiniOption

作用

a

创建一个包含所有附加选项的minidump。/ma选项相当于/mfFhut —它会在minidump中添加完整的内存数据、句柄数据、已卸载模块信息、基本内存信息和线程时间信息。

f

在minidump中包含完整内存数据。目标程序拥有的所有 可访问的已交付的页面(committed pages)都会包含进去。

F

在minidump中添加所有基本内存信息。这会将一个流加入到包含完整基本内存信息的minidump中,而不单是可使用的内存。这样可以使得调试器能够重建minidump生成时进程的完整虚拟内存布局。

h

在minidump中包含和目标进程相关的句柄信息。

u

在minidump中包含已卸载模块信息。仅在Windows Server 2003和之后版本的Windows中可用。

t

在minidump中包含附加的线程信息。包括可以在调试minidump时使用!runaway扩展命令或.ttime (Display Thread Times)命令进行显示的线程时间。

i

在minidump中包含次级内存(secondary memory)。次级内存是由堆栈中的指针或备份存储(backing store)中引用到的任何内存,加上该地址周围的一小段区域。

p

在minidump中包含进程环境块(PEB)和线程环境块(TEB)。这在想访问程序的进程和线程相关的Windows系统信息时很有用。

w

将所有已交付的可读写的私有页面包含进minidump。

d

在minidump中包含可执行映像中所有可读写的数据段。

c

加入映像中的代码段。

r

从minidump中去掉对重建调用堆栈无用的堆栈和存储内存部分。局部变量和其他数据类型值也被删除。这个选项不会使得minidump变小(因为这些内存节仅仅是变成0),但是当想保护其他程序中的机密信息时有用。

R

在minidump中去掉完整的模块路径。仅包含模块。如果想保护用户的目录结构时该选项有用。

 

这些MiniOptions 只能在创建用户模式minidump时使用。它们需要跟在 /m 修饰符后面。

/u

在dump文件名中添加日期、时间和PID。这可以确保dump文件名的唯一性。

/a

所有当前正在调试的进程创建dump。如果使用了/a,也必须使用/u 选项来保证每个文件有唯一的名字。

/b[a]

创建一个.cab 文件。如果包含该选项, FileName 会被当作CAB文件名,而不是dump文件名。会先创建一个临时的dump文件,然后将该文件打包为CAB,然后删除它。如果b后面跟了a,所有的符号和映像文件也会打包到CAB中。

/c "Comment"

指定要写入dump文件的注释字符串。如果Comment 中包含空格,则必须用双引号将它括起来。当dump文件加载时会显示这个Comment 字符串。

/xc Address

(仅用户模式minidump) 在dump文件中加入上下文记录。Address必须指定上下文记录的地址。

/xr Address

(仅用户模式minidump) 在dump文件中加入一个异常记录。Address 必须指定该异常记录开始的地址。

/xp Address

(仅用户模式minidumps) 在dump文件中加入一个上下文记录和异常记录。Address 必须指定一个包含上下文记录和异常记录指针的 EXCEPTION_POINTERS 结构的地址。

/xt ThreadID

(仅用户模式minidumps) 指定将会作为dump文件的异常线程的系统线程的ID。

/kpmf File

(仅创建内核模式完整内存dump) 指定一个包含物理内存页面数据的文件。

FileName

指定dump文件名。可以设置完整路径和文件名,或者只设置文件名。如果文件名中包含空格,则需要用引号将FileName 括起来。如果没有指定路径,会使用当前目录。

-?

显示该命令的帮助。在用户模式和内核模式下显示的文本是不同的。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

该命令可以在各种情况下使用:

  • 进行用户模式活动调试时,该命令创建目标程序的dump文件,但是目标程序不会被结束。
  • 内核模式活动调试时,该命令创建目标机的dump文件,但是目标机不会崩溃。
  • 调试dump文件时,该命令从旧文件创建出一个新的dump文件。这在有一个大的dump文件但是又想创建一个更小的文件时有用。

    可以控制dump文件的类型:

  • 内核模式下,使用/f选项来生成完整内存转储。使用/m选项(或不带选项)来生成小内存转储。.dump命令不能创建内核内存转储
  • 用户模式下,使用.dump /m[MiniOptions] 是最好的选择。虽然"m" 代表着"minidump",但是使用MiniOption创建的dump文件可以很小也可以很大。通过指定合适的MiniOptions ,可以精确的控制包含的信息。例如,.dump /ma 产生包含大量信息的dumo文件。.dump /f命令产生大小适中的"标准dump"文件,并且不能进行自定义。

    不能指定要转储的进程。所有运行中的进程都会转储下来。

    /xc/xr/xp/xt 选项用来在dump文件中保存异常和上下文信息。这使得该dump文件可以使用 .ecxr (Display Exception Context Record)

    下面的示例创建一个包含完整内存和句柄信息的用户模式minidump:

    0:000> .dump /mfh myfile.dmp 

    句柄信息可以通过!handle 扩展命令来读取。

附加信息

内核模式dump文件和对它们使用的说明,查看内核模式dump文件。用户模式dump文件和它们的使用的说明,查看 用户模式dump文件

.dumpcab (Create Dump File CAB)

.dumpcab 命令创建一个包含当前dump文件的CAB文件。

语法

.dumpcab [-aCabName 

参数

-a

使得当前加载的符号也包含在CAB文件中。对于minidump,所有以加载的映像也会包含进去。使用lml来查看加载了哪些符号和映像。

CabName

包含扩展名的CAB文件名。CabName 可以包含绝对或者相对路径;相对路径是相对于调试器启动的目录的。建议使用.cab扩展名。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

该命令只有在调试dump文件时可以使用。(这句话似乎和前面的表格有冲突。—译者注)

如果在调试活动目标时想创建CAB中的dump文件,需要使用.dump (Create Dump File) 命令。然后,打开一个使用该dump文件作为目标的新的调试会话,然后再使用.dumpcab

.dumpcab 不能将多个dump文件放入一个CAB文件中。

附加信息

关于崩溃转储的详细信息,查看崩溃转储文件

.dvalloc (Allocate Memory)

.dvalloc 命令使得Windows在目标进程中分配附加的内存。

语法

.dvalloc [OptionsSize 

参数

Options

可以是任意多个下面的选项:

/b BaseAddress

指定内存分配开始的虚拟地址。

/r

在虚拟地址空间中保留该内存,但是并不实际分配物理内存。如果使用该选项,调试器会调用VirtualAllocEx 并将 flAllocationType 参数设置为MEM_RESERVE。如果没有使用该选项,则使用的值为MEM_COMMIT | MEM_RESERVE。查看Microsoft Windows SDK获取详细信息。

Size

指定要分配的内存的字节数大小。程序可用的内存等于Size,但是实际分配的内存可能会大一些,因为它总是页面大小的整数倍。

环境

模式

仅用户模式

目标

仅活动调试

平台

所有

注释

.dvalloc 命令调用VirtualAllocEx 来在目标进程中分配新内存。被分配的内存允许读、写和执行。

要释放该内存,使用.dvfree (Free Memory)

.dvfree (Free Memory)

.dvfree命令释放目标进程拥有的已分配内存。

语法

.dvfree [/dBaseAddress Size 

参数

/d

回收分配的内存,但是并不实际释放包含内存的页面。如果使用该选项,调试器调用VirtualFreeEx 并将dwFreeType 参数设置为MEM_DECOMMIT。如果不使用该选项,则使用MEM_RELEASE。查看Microsoft Windows SDK 获取详细信息。

BaseAddress

指定已分配内存虚拟地址的开始位置。

Size

指定要释放的内存的字节数。实际释放的内存总是整数个页面。

环境

模式

仅用户模式

目标

仅活动调试

平台

所有

注释

.dvfree 命令调用VirtualFreeEx 来释放已分配的内存。如果没有使用/d 选项,则包含该内存的页面会被释放。

该命令可以用来释放.dvalloc (Allocate Memory)分配的内存。也可以用来释放目标进程拥有的任意内存块,但是释放非.dvalloc分配的内存很自然的会影响到目标进程的稳定性。

.echo (Echo Comment)

.echo命令显示注释字符串。

语法

.echo String 
.echo "String" 

参数

String

指定要显示的文本。也可以将String 用引号(")括起来。不管是否使用引号,String 都可以包含任意数量的空格、逗号和单引号 (')。如果将String 用引号括起来,还可以包含分号,但是不能包含其它引号。如果不用引号将String 括起来,它可以在除了第一个字符的任意位置包含银号,但是不能包含分号。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.echo 命令使得调试器在输入它之后立即显示String

.echo 命令当调试器遇到分号是终止(除非该分号被包含在引起来的字符串中)。这种 限制使得.echo可以用在如下面的例子显示的条件断点这样的复杂语句中。

0:000> bp `:143` "j (poi(MyVar)>5) '.echo MyVar Too Big'; '.echo MyVar Acceptable; gc' " 

.echo 命令也为调试服务器调试客户端的用户提供了简易的交流方法。关于这种情形下的更多信息,查看控制远程调试会话

.echo 命令和$$  (Comment Specifier)关键字以及 *  (Comment Line Specifier)关键字不同,因为这些关键字会使得调试器忽略输入的文本而不会显示出来。

.echocpunum (Show CPU Number)

.echocpunum 命令在调试多处理器的目标机是用来打开或关闭对处理器号的显示。

语法

.echocpunum 0 
.echocpunum 1 
.echocpunum 

参数

0

打开对处理器号的显示。

1

关闭对处理器号的显示。

环境

模式

仅内核模式

目标

仅活动调试

平台

所有

注释

如果不带任何参数使用.echocpunum ,会打开或关闭对处理器号的显示,并且显示新的状态。

默认情况下,这种显示是关闭的。

附加信息

关于如何调试多处理器计算机的更多信息,查看多处理器语法

.echotime (Show Current Time)

.echotime 命令显示当前时间

语法

.echotime 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.echotime 命令显示调试器运行的计算机上的时间。

.echotimestamps (Show Time Stamps)

.echotimestamps 命令打开或关闭对时间戳信息的显示。

语法

.echotimestamps 0 
.echotimestamps 1 
.echotimestamps 

参数

0

关闭时间戳信息的显示。这是调试器的默认行为。

1

打开时间戳信息的显示。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

不带参数使用 .echotimestamps 命令时,打开或关闭时间戳显示,并且显示新的状态。

如果打开显示,调试器会在模块加载、线程创建和其他时间时显示时间戳。

DbgPrintKdPrintDbgPrintExKdPrintEx 内核函数向主控机的缓冲区发送格式化后的字符串。该字符串会在调试器命令窗口中显示(除非禁止了这种显示)。也可以使用!dbgprint 扩展命令来显示格式化字符串。

使用 .echotimestamps来打开时间戳显示时,DbgPrint缓冲区中每条信息的时间和日期都会被显示出来。

附加信息

关于DbgPrintKdPrintDbgPrintExKdPrintEx的更多信息,查看 DbgPrint缓冲区或者 Microsoft Windows Driver Kit (WDK) 文档。

.ecxr (Display Exception Context Record)

.ecxr 命令显示当前异常关联的上下文记录。

语法

.ecxr 

环境

模式

仅用户模式

目标

仅崩溃转储(仅minidump)

平台

所有

注释

.ecxr 命令定位当前异常的上下文信息,并显示指定记录中的重要寄存器。

该命令也会指示调试器将当前异常关联的上下文记录作为寄存器上下文。运行.ecxr后,调试器就可以访问该线程的重要寄存器和调用堆栈了。该寄存器上下文一直持续到恢复目标执行、改变当前进程或线程或者使用其他寄存器上下文命令(.cxr.ecxr)时。关于寄存器上下文的更多信息,查看寄存器上下文

附加信息

关于寄存器上下文和其他上下文设置的更多信息,查看改变上下文

posted @ 2008-06-25 12:50 NetRoc 阅读(692) | 评论 (0)编辑 收藏

WinDbg 文档翻译----59

cc682/NetRoc

http://netroc682.spaces.live.com/

.cache (Set Cache Size)

.cache 命令用来设置保存从目标接收到的数据的缓冲区大小。也可以用来设置一些缓冲区和内存选项。

语法

.cache Size 
.cache Option 
.cache 

参数

Size

内核调试的缓冲区大小,以KB为单位。如果Size是0,则禁用缓存。该命令的输出以字节为单位显示缓存大小。 (默认大小是1000 KB。)

Option

可以是下面的选项之一:

hold

禁用自动缓存刷新。

unhold

关闭hold 选项(这是默认设置。)

decodeptes

所有过渡页表入口(transition page table entries (PTEs))都会被暗中解码。 (这是默认设置。)

nodecodeptes

关闭decodeptes 选项

forcedecodeptes

所有虚拟地址在访问前都要先转换为物理地址。该选项也会造成缓存被禁用。除非只关心内核模式内存,否则使用forcedecodeuser要更有用些。

forcedecodeuser

所有的用户模式虚拟地址在访问前都被转换为物理地址。该选项会造成缓存被禁用。

Note  注意,在进行活动调试时,使用.thread (Set Register Context).context (Set User-Mode Address Context).process (Set Process Context)!session之前,必须先激活forcedecodeuser (或者forcedecodeptes)。如果.thread.process 带有/p选项,则会自动设置forcedecodeuser 选项。在很多其它情况下,需要显式使用.cache forcedecodeuser命令。

noforcedecodeptes

关闭forcedecodeptesforcedecodeuser 选项(这是默认设置。)

flushall

删除整个虚拟内存缓存入口。

flushu

在缓存中删除所有有错误的区域的入口,以及用户模式入口。

flush Address

删除从Address 开始的4096字节缓存块。

环境

模式

仅内核模式

目标

仅活动调试

平台

所有

 

注释

如果.cache不带任何参数,则显示当前缓存大小、状态和选项。

.cache forcedecodeuser.cache forcedecodeptes 选项仅持续到目标机还中断在调试器中时。如果对目标进行单步或者执行,则noforcedecodeptes 状态又会开始起作用。这可以避免调试器妨碍执行或重起。

.call (Call Function)

.call 命令使得目标进程执行一个函数。

语法

.call [/vFunction( Arguments ) 
.call /c 
.call /C 

参数

/v

显示该call和参数的详细信息。

Function

指定要调用的函数。这可以是函数名(最好带有模块名),或者值等于函数地址的任何表达式。如果需要调用构造函数或析构函数,则必须提供地址 — 或者使用C++表达式来为操作符的名字语法求值 (查看 数值表达式语法获取详细信息)。

Arguments

指定传递给函数的参数。如果调用一个方法,第一个参数必须是this,并且所有其它参数跟在后面。参数之间用逗号分开并且要符合常规的参数语法。可以支持不定个数的参数。参数中的表达式使用C++表达式求值器进行求值,查看C++ 数值和操作符获取详细信息。 不能使用字符串作为参数,但是可以使用字符串指针,或目标进程可以访问的其它任何内存。

/c

清除当前线程的任何已存在的call。

/C

清除当前线程的任何已存在的call ,并且将当前线程的上下文重置为保存的上一层call的上下文。

环境

模式

仅用户模式

目标

仅活动调试

平台

仅x86和x64

 

注释

指定函数是被当前进程的当前线程调用的。

只支持 cdeclstdcallfastcallthiscall 调用约定。不能使用该方法调用托管代码。

使用.call 之后,调试器会刷新堆栈,将指令指针修改为指向被调用函数的开头,调用该函数,然后停止。使用g (Go)来恢复执行或者~. g 来执行刚才进行调用的线程。

函数返回时,会发生一次中断并且调试器显示函数的返回值。返回值也会保存在可以得到返回值类型的 $callret 伪寄存器中。

如果使用CTRL+C 或CTRL+BREAK来中断到目标中,当前线程是一个用来处理中断(breakin)的附加线程。 如果这时候使用.call命令,则会使用该额外线程来调用函数。

如果遇到了之前定义的断点,线程不会进行额外的中断。如果在用户模式断点中断时使用.call ,可以使用g来执行整个进程或者 ~. G来执行当前线程。使用g可能会造成程序行为的错误,因为已经将某个线程转移来执行新的函数了。另一方面,该线程还是保留它的锁和其他属性,所以~. g 也可能遇到死锁。

安全的使用.call的方法是,将断点设置到可以安全调用指定函数的代码位置。遇到该断点时,如果需要就可以使用.call来执行函数。如果在不能正常调用该函数的地方使用.call,则可能造成死锁或目标执行错误。

在代码中包含一些只由调试器调用而不由代码来调用的额外函数可能会很有用。例如,可以添加一些函数用来检查代码的当前状态、环境并且将这些状态信息保存到已知的内存位置。注意不能优化代码,否则这些函数会被编译器去除。这种技术应该当作最后的手段,因为如果程序崩溃,.call在调试dump文件时是不能使用的。

.call /c.call /C 命令应该仅在.call 失败,或者进入g命令前改变主意时使用。它们不能随便使用,因为放弃未完成的call会造成目标状态被破坏。

.chain (List Debugger Extensions)

.chain 按照默认的搜索顺序列举所有已加载的调试器扩展。

语法

.chain 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

附加信息

关于加载、卸载和控制调试器扩展的详细信息,查看加载调试器扩展DLL。关于执行扩展命令和默认搜索顺序的描述,查看使用调试器扩展命令

.childdbg (Debug Child Processes)

.childdbg命令控制对子进程的调试。

语法

.childdbg 0 
.childdbg 1 
.childdbg 

参数

0

阻止调试器调试子进程。

1

使得调试器对子进程进行调试。

环境

该命令仅在Windows XP和之后的系统中支持。

模式

仅用户模式

目标

仅活动调试

平台

仅x86、x64和Itanium

注释

子进程是由原始的目标进程启动的进程。

如果不带参数.childdbg 会显示子进程调试的当前状态。

附加信息

详细信息和控制对子进程调试的其他方法,查看创建新进程 (用户模式)

.clients (List Debugging Clients)

.clients 命令列举所有当前连接到调试会话中的调试客户端。

语法

.clients 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

附加信息

详细信息和在进行通过调试器的远程调试时可使用的其它命令,查看控制远程调试会话

.closehandle (Close Handle)

.closehandle 命令关闭目标程序拥有的句柄。

语法

.closehandle Handle 
.closehandle -a 

参数

Handle

指定要关闭的句柄。

-a

使得目标进程的所有句柄都被关闭。

环境

模式

仅用户模式

目标

仅活动目标

平台

所有

注释

可以使用!handle扩展命令来显示存在的句柄。

.cls (Clear Screen)

.cls命令清空调试器命令窗口中的显示。

语法

.cls 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

.context (Set User-Mode Address Context)

.context 命令用于指定用户模式地址上下文使用哪个进程的页目录,或者显示当前的用户模式地址上下文。

语法

.context [PageDirectoryBase

参数

PageDirectoryBase

指定需要的进程的页目录的基地址。用户模式地址上下文将设置为该页目录。如果PageDirectoryBase 是0,用户模式地址上下文的页目录将设置为当前系统状态。如果省略PageDirectoryBase,则显示当前的用户模式地址上下文。

环境

模式

仅内核模式

目标

活动目标、崩溃转储

平台

所有

注释

一般来说,进行内核调试时,能看到的唯一的用户模式地址空间是关联到当前进程的那个。

.context命令让内核调试器将指定的页目录作为用户模式地址上下文。该命令执行后,调试器就可以访问该虚拟地址空间了。所有用户模式内存地址都将会使用该页表来进行转换。这使得可以读些这些内存。

.process (Set Process Context) 命令具有类似的作用。但是,.context 命令将用户模式地址上下文设置为指定的页目录,而.process 命令会将进程上下文设置为指定进程。在x86处理器上,这两个命令本质上效果是一样的。但是在Itanium处理器上,单个进程可能有不止一个页目录。这种情况下,.process c命令要更加有用,因为它会将对页目录的所有访问关联到某个进程。查看进程上下文获得详细信息。

如果正在进行活动调试,除了.context 命令之外还需要执行一个 .cache forcedecodeuser 命令。这会强制调试器查找需要的内存空间的物理地址。 (这可能很慢,因为会经常造成大量数据必须通过调试电缆传输。)

如果在进行崩溃转储的调试,不需要使用.cache 命令。但是,不能访问当崩溃发生时任何被页换出的用户模式进程的虚拟地址空间。

这里有一个例子。使用!process 扩展命令来查找指定进程的页目录基址:

kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS fe5039e0  SessionId: 0  Cid: 0008    Peb: 00000000  ParentCid: 0000
    DirBase: 00030000  ObjectTable: fe529b68  TableSize:  50.
    Image: System

.....

PROCESS fe3c0d60  SessionId: 0  Cid: 0208    Peb: 7ffdf000  ParentCid: 00d4
    DirBase: 0011f000  ObjectTable: fe3d0f48  TableSize:  30.
    Image: regsvc.exe

现在使用.context命令切换到该页目录基址。

kd> .context 0011f000

这样就可以通过各种方式来查看内存空间了。例如,这是 !peb 扩展命令的输出:三

kd> !peb
PEB at 7FFDF000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No
    ImageBaseAddress:         01000000
    Ldr.Initialized: Yes
    Ldr.InInitializationOrderModuleList: 71f40 . 77f68
    Ldr.InLoadOrderModuleList: 71ec0 . 77f58
    Ldr.InMemoryOrderModuleList: 71ec8 . 77f60
        01000000 C:\WINNT\system32\regsvc.exe
        77F80000 C:\WINNT\System32\ntdll.dll
        77DB0000 C:\WINNT\system32\ADVAPI32.dll
        77E80000 C:\WINNT\system32\KERNEL32.DLL
        77D40000 C:\WINNT\system32\RPCRT4.DLL
        77BE0000 C:\WINNT\system32\secur32.dll
    SubSystemData:     0
    ProcessHeap:       70000
    ProcessParameters: 20000
        WindowTitle:  'C:\WINNT\system32\regsvc.exe'
        ImageFile:    'C:\WINNT\system32\regsvc.exe'
        CommandLine:  'C:\WINNT\system32\regsvc.exe'
        DllPath:     'C:\WINNT\system32;.;C:\WINNT\System32;C:\WINNT\system;C:\WINNT;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\PROGRA~1\COMMON~1\AUTODE~1'
        Environment:  0x10000

附加信息

关于用户模式地址上下文和其他上下文设置的更多信息,查看切换上下文

.cordll (Control CLR Debugging)

.cordll命令用于控制托管代码的调试和Microsoft .NET公共语言运行时 (CLR)。

语法

.cordll [Options

参数

Options

可以是下面这些选项中的一个或多个:

-l

加载CLR调试模块。

-u

卸载CLR调试模块。

-e

启用CLR调试。

-d

禁用CLR调试。

-D

禁用CLR调试并卸载CLR调试模块。

-N

重新加载CLR调试模块。

-lp Path

指定CLR调试模块的目录路径。

-se

启用CLR调试模块的短名称 Mscordacwks.dll

-sd

禁止使用CLR调试模块的短名称Mscordacwks.dll。相反,调试器使用CLR调试模块的长名称Mscordacwks_<spec>.dll。 关闭使用短名称可以在担心匹配错误时避免本地CLR被使用到。

-ve

打开CLR加载的详细输出。

-vd

关闭CLR模块加载的详细输出。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

.cordll 命令在内核调试时也支持。但是,如果需要的内存被页换出,它可能不能工作。

.crash (Force System Crash)

.crash 命令使得目标机产生一次错误检查。

语法

.crash 

环境

模式

仅内核模式

目标

仅活动调试

平台

所有

注释

该命令使得目标机立即崩溃。

如果启用了崩溃转储,则会生成一个内核模式dump文件。查看创建内核模式Dump文件获取详细信息。

附加信息

相关命令的概述和系统崩溃后的选项的说明,查看崩溃和重起目标机

.create (Create Process)

.create命令创建一个新的目标进程。

语法

.create [-premote RemoteOptions] [-fCommandLine 

参数

RemoteOptions

指定进程服务器要附加到的进程。该选项和-premote 选项中的一样。查看激活灵巧客户端获得详细信息。

-f

除了被创建的新进程之外,冻结所有目标程序中的所有线程。这些线程在新进程发生异常之前都会保持冻结状态。注意初始断点也是一个异常。每个线程都可以通过~u (Unfreeze Thread) 命令来解冻。

CommandLine

指定新进程的完整命令行。CommandLine 可以包含空格,而且不能用引号括起来。.create 命令之后的所有文本都被当作CommandLine的一部分,该命令后面不能跟分号和其他调试器命令。

环境

模式

仅用户模式

目标

仅活动目标

平台

所有

注释

该命令可以在CDB静止时或者已经在调试一个或多个进程时使用。WinDbg处于静止模式时不能使用。

如果命令成功,调试器会在执行下一个运行命令时创建指定进程。如果一行中使用了多次该命令,则每一个都需要一条执行命令。

多个目标进程总是一起执行的,除非它们的某些线程被冻结或挂起。

如果希望创建新进程并冻结所有以存在的目标,使用-f 选项。

如果使用了-premote选项,新进程会是一个新的系统中的一部分。详细信息,查看 调试多个目标

附加信息

详细信息和其他开始一个新进程来进行调试的方法,查看创建新进程(用户模式)

.createdir (Set Created Process Directory)

.createdir 命令控制任何通过调试器创建的进程的启动目录和句柄继承。

语法

.createdir [-i | -I] [Path

参数

-i

使得调试器创建的进程继承调试器的句柄。这是默认选项。

-I

避免调试器创建的进程继承调试器的句柄。

Path

指定由任何目标进程创建的任何子进程的启动目录。如果Path 包含目录,则必须用引号括起来。

环境

模式

仅用户模式

目标

仅活动目标

平台

所有

注释

如果.createdir 不带参数,则显示当前的启动目录和句柄继承设置。

如果没有使用过.createdir ,创建的任何进程都使用通常的默认目录作为启动目录。如果用.createdir设置了目录又想恢复成默认值,使用.createdir "" ,引号中不带任何东西。

.createdir 的设置作用于任何以.create (Create Process)创建的进程。如果没有使用Start directory文本框来覆盖设置,也作用于WinDbg的 File | Open Executable 菜单命令。

附加信息

控制该特性的其他方法和创建新进程进行调试的信息,查看创建新进程(用户模式)

.cxr (Display Context Record)

.cxr 命令显示保存在指定地址的上下文信息。也可以设置寄存器上下文。

语法

.cxr [Options] [Address

参数

Options

可以是下面这些选项的任意组合:

/f Size

强制上下文的大小的字节数等于Size。这在当上下文和实际的目标不匹配时有用 — 例如,当通过WOW64 调试在x64目标上使用x86上下文时。如果指定了非法的或矛盾的大小,会显示 "Unable to convert context to canonical form" 错误。

/w

将当前上下文写入内存,并显示写入的内存的地址。

Address

系统上下文记录的地址。省略该地址则不会显示任何上下文记录的信息,但是会重置寄存器上下文。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

上下文记录中的信息在调试因为发生了未处理异常,并且没有精确的调用堆栈信息而停止的系统时会起到帮助作用。.cxr 命令会显示指定的上下文记录的重要寄存器。

该命令也会指示调试器使用指定的上下文记录作为寄存器上下文。该命令执行后,调试器就可以访问该线程的最重要的寄存器,以及堆栈回溯。该寄存器上下文会持续到允许目标执行或使用了另一个寄存器上下文命令 (.thread.cxr.ecxr.trap)。用户模式下,改变当前进程或当前线程也会重置寄存器上下文。查看 寄存器上下文获取详细信息。

.cxr 命令常常用来调试错误检查0x1E。更多信息和示例,查看Bug Check 0x1E (KMODE_EXCEPTION_NOT_HANDLED)。

.cxr /w 命令将上下文写入内存并显示保存的地址。如果想在该上下文上设置数据断点,可以把这个地址传递给.apply_dbp (Apply Data Breakpoint to Context)

附加信息

关于寄存器上下文和其他上下文设置的更多信息,查看改变上下文

posted @ 2008-06-24 15:47 NetRoc 阅读(543) | 评论 (0)编辑 收藏

WinDbg 文档翻译----58

cc682/NetRoc

http://netroc682.spaces.live.com/

元命令

本节是用于描述可以在CDB、KD和WinDbg中使用的各种调试器元命令的参考。这些命令都是以点号(.)开头。

.abandon (Abandon Process)

.abandon 命令结束调试会话,但是仍然将目标程序保持为调试状态。该命令会将调试器返回到静止模式。

语法

.abandon 

环境

该命令仅在Windows XP和之后的系统中支持。

模式

仅用户模式

目标

仅活动调试

平台

所有

 

附加信息

如果目标保持在调试状态,新的调试器可以附加上去。查看重新附加到目标程序获取详细信息。但是,进程被放弃(abandon)一次之后,如果没有调试器附加上去,它就永远不能再恢复运行状态。

退出调试器或停止对目标的附加的其它方法,查看结束调试会话

.allow_exec_cmds (Allow Execution Commands)

.allow_exec_cmds 命令控制是否允许使用执行命令。

语法

.allow_exec_cmds 0 
.allow_exec_cmds 1 
.allow_exec_cmds 

参数

0

不允许使用执行命令。

1

允许使用执行命令。

环境

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

注释

如果没有带参数,.allow_exec_cmds 显示是否允许使用执行命令。

执行命令包括g (Go)t (Trace)p (Step)以及其它可以让目标执行的命令或WinDbg图形界面操作。

附加信息

执行命令的完整列表,查看控制调试目标

.allow_image_mapping (Allow Image Mapping)

.allow_image_mapping 命令控制是否映射映像文件。

语法

.allow_image_mapping [/r0 
.allow_image_mapping [/r1 
.allow_image_mapping 

参数

/r

重新加载调试器模块列表中的所有模块。和.reload /d等效。

0

避免映像文件被映射。

1

允许映射映像文件。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

不带参数时,.allow_image_mapping 会显示当前是否允许映射映像文件。默认情况下是允许的。

映像文件映射在调试minidump时经常使用。当DbgHelp不能访问调试记录时也会使用 (例如,内核调试时内存被页换出了)。

.apply_dbp (Apply Data Breakpoint to Context)

.apply_dbp 命令将当前进程中存在的数据断点应用到指定的寄存器上下文中。

语法

.apply_dbp [/m Context

参数

/m Context

指定要将当前进程的数据断点应用到的寄存器上下文(CONTEXT结构)在内存中的地址。

环境

模式

用户模式、内核模式

目标

仅活动目标

平台

所有

注释

数据断点(例如使用ba设置的断点)是由处理器控制的,并且关联到指定进程的地址空间中的内存位置。 .apply_dbp 命令修改指定的寄存器上下文,使得数据断点在该上下文中也被激活。

如果没有使用/m Address 参数,数据断点被应用到当前寄存器上下文。

该命令只有当目标在原生机器模式(native machine mode)时才可以使用。例如,如果目标是通过64位机器使用WOW64模拟x86处理器来运行的,该命令就不能使用。

该命令很有用的一个例子是在异常过滤器(exception filter)中。.apply_dbp 命令可以刷新异常过滤器保存的上下文。当异常过滤器退出并恢复保存的上下文时,数据断点就会被应用上去。如果不进行这种修改,数据断点就可能丢失。

附加信息

关于寄存器上下文(线程上下文)的更多信息,查看寄存器上下文

.asm (Change Disassembly Options)

.asm 命令用于控制反汇编代码如何显示。

语法

.asm 
.asm[-Options 

参数

-

使得指定选项被禁用。如果不使用减号,则启用指定选项。

Options

可以是下面这些选项的任意多个:

ignore_output_width

阻止调试器检查反汇编显示的行的长度。

no_code_bytes

(仅x86目标) 禁止显示代码字节。

source_line

在每行反汇编前面显示源码行号。

verbose

(仅Itanium目标) 除了标准反汇编信息之外,还显示bundle-type information。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

注释

使用.asm 本身来显示选项的当前状态。

该命令会作用于调试器命令窗口中显示的所有反汇编指令。在WinDbg中还会改变反汇编窗口的内容。

附加信息

汇编模式调试和相关命令的更多信息,查看汇编模式调试

.attach (Attach to Process)

.attach 命令附加到新的目标进程。

Syntax

.attach [-premote RemoteOptionsAttachOptions PID 

Parameters

RemoteOptions

指定要附加到的进程服务器。该选项和-premote 命令行选项的内容一样。查看激活灵巧客户端获得语法的详情。

AttachOptions

指定如何进行附加。可以包含任意的下面这些选项:

-b

(Windows XP和之后的系统) 阻止调试器在附加到目标进程时请求初始断点。这在目标程序已经挂起或者想避免中断目标时有用。

-e

(Windows XP和之后的系统) 允许调试器附加到一个已经被调试的进程。查看重新附加到目标程序获得详细信息。

-k

(Windows XP和之后的系统) 打开一个本地内核调试会话。查看本地内核调试获得详细信息。

-f

除了要附加的新目标之外,冻结所有目标程序中的所有线程。这些线程直到新附加的进程产生异常时才会解冻。注意初始断点也属于一个异常。每个线程可以使用~u (Unfreeze Thread) 命令来解冻。

-r

(Windows XP和之后的系统) 使得调试器附加到目标进程时让它运行起来。这在程序已经被挂起并想恢复它执行时有用。

-v

对目标进行非侵入式调试。

PID

指定新的目标程序的进程ID。

环境

模式

仅用户模式

目标

仅活动调试

平台

所有

注释

该命令可以在CDB处于静止状态或已经在调试一个或多个进程时使用。不能在WinDbg处于静止模式时使用。

如果命令成功,调试器会在下一次执行运行命令时附加到指定进程。如果该命令在一行中使用了多次,则该使用该命令几次就需要多少条执行命令。

由于非侵入式调试不能使用执行命令,所以调试器一次不能对几个进程进行非侵入式调试。这也意味着使用.attach -v 命令会使得已存在的侵入式调试会话受到限制。

多个目标进程总是会一起被执行,除非有些进程被冻结或挂起了。

如果想附加到新进程并冻结所有已存在的目标,使用-f选项。例如,可能正在调试客户端程序的崩溃问题,并且需要附加到服务端进程上而不让客户端继续运行。

如果使用了-premote 选项,新进程会作为一个新系统的一部分。详细信息,查看调试多个目标

附加信息

其他附加到进程的方法的详细信息,查看附加到运行中的进程(用户模式)非侵入式调试(用户模式)

.bpsync (Synchronize Threads at a Breakpoint)

当某个线程到达断点时,.bpsync 命令冻结所有其他线程,直到应用断点的线程单步通过了该断点。

语法

.bpsync 0
.bpsync 1

参数

0

当某个线程到达断点时,允许其他线程继续运行。这是默认值。

1

当某个线程到达断点位置时,使得所有线程停止执行。

环境

模式

仅用户模式

目标

仅活动调试

平台

所有

注释

如果可能有多个线程会执行到相同代码,.bpsync 1 命令对于捕捉到所有断点事件很有用。如果没有.bpsync,可能会有断点的触发被漏掉,因为当第一个线程到达断点时,调试器总是会暂时移除该断点。在断点被移除的短时间内,如果有其他线程也到达相同位置的代码,可能就不会触发断点。

对断点的临时移除是正常的调试器操作。当目标到达断点并恢复执行时,调试器必须要临时移除断点以使得它能执行真实代码。一旦真实代码被执行之后,调试器重新插入断点。调试器通过恢复断点(或者关闭数据断点)、单步执行、然后恢复断点来实现这个过程。

注意如果使用了.bpsync 1,有造成被冻结的线程死锁的风险。

.breakin (Break to the Kernel Debugger)

.breakin 命令从用户模式调试切换到内核模式调试。该命令在通过内核调试器控制用户模式调试器时非常有用。

语法

.breakin 

环境

模式

仅用户模式

目标

仅活动调试

平台

所有

注释

如果在引导过程中启用了内核调试并且正在运行用户模式调试器,可以使用.breakin 命令来中断操作系统并将控制传递给内核调试器。

.breakin 在调试器的进程上下文中产生一次内核模式中断。如果附加了内核调试器,则它会被激活。内核调试器的进程上下文会自动切换到用户模式调试器的进程,而不是用户模式调试器的目标进程。

该命令主要用于调试用户模式的问题需要获得系统在内核态的状态时。在用户模式会话继续前需要在内核调试器中恢复执行。

如果正在从内核调试器控制用户模式调试器并且在内核调试器中可以看到用户模式调试器提示符,该命令会暂停用户模式调试器并使得内核模式调试提示符出现。

如果系统不能中断到内核调试器,会显示一条错误信息。

该命令在使用内核调试器在用户空间设置了断点,并且这个断点被用户模式调试器而不是内核调试器捕捉到时也很有用。在用户模式调试器中执行该命令会将控制传递给内核调试器。

如果 .breakin 命令在没有在引导时启用内核调试的机器上使用,不会有任何作用。

.bugcheck (Display Bug Check Data)

.bugcheck 命令显示目标机上的错误检查(bug check)的数据。

语法

.bugcheck 

环境

模式

仅内核模式

目标

活动目标、崩溃转储

平台

所有

注释

该命令显示当前的错误检查数据。 (在崩溃的机器重起前该错误检查数据都可以访问。)

也可以在32位系统上使用dd NT!KiBugCheckData L5或者在64位系统上使用dq NT!KiBugCheckData L5来显示错误检查数据。但是,.bugcheck 命令要更可靠一些,因为它在某些时候d*命令不能使用的情况下还可以工作(例如用户模式minidump)。

发生错误检查时,!analyze 扩展命令也非常有用。

附加信息

关于错误检查的更多信息,查看错误检查(蓝屏)。每个错误检查的单独说明,查看错误检查代码参考节。

posted @ 2008-06-22 13:15 NetRoc 阅读(477) | 评论 (0)编辑 收藏

WinDbg 文档翻译----57

     摘要: cc682/NetRoc http://netroc682.spaces.live.com/ vercommand (Show Debugger Command Line) vercommand 命令显示打开调试器时使用的命令行。 语法 vercommand  环境 模式 ...  阅读全文

posted @ 2008-06-21 14:42 NetRoc 阅读(715) | 评论 (0)编辑 收藏

WinDbg 文档翻译----56

     摘要: cc682/NetRoc http://netroc682.spaces.live.com/ t (Trace) t 命令执行单条指令或源码行,并选择性的显示所有寄存器和标志位的结果。当发生子过程调用或中断时,它们的每一步也会被跟踪。 语法 用户模式 [~Thread] t [r] [= StartAddress] [Cou...  阅读全文

posted @ 2008-06-21 14:37 NetRoc 阅读(648) | 评论 (1)编辑 收藏

WinDbg 文档翻译----55

cc682/NetRoc

http://netroc682.spaces.live.com/

s (Search Memory)

s 命令搜索内存查找指定模板。

不要将该命令和~s (Change Current Processor)~s (Set Current Thread)|s (Set Current Process)||s (Set Current System) 命令混淆。

语法

s [-[[Flags]]TypeRange Pattern 
s -[[Flags]]v Range Object 
s -[[Flags]]sa Range 
s -[[Flags]]su Range 

参数

[Flags]

指定一个或多个搜索选项。每个标志都是一个单独的字母。必须将标志包含在单独的一对中括号 ([])中。除了nl和它们的参数外,中括号中不能有空格。 例如,如果要指定sw选项,使用s -[sw]Type Range Pattern命令。

可以指定下面这些标志的一个或多个:

s

保存当前搜索的所有结果。之后可以使用该结果来进行重复的搜索。

r

将当前搜索限制在上一次搜索的结果中。一个命令中不能同时使用sr 标志。使用r时,Range的值被忽略,并且调试器仅搜索上一次s命令保存下来的结果。

n Hits

指定使用s标志时要保存的结果个数。默认值是1024个结果。如果将n和其他标志一起使用,n必须是最后一个标志,后面跟它的Hits 参数。nhit之间的空格是可选的,但是在中括号中不能再添加其他空格。如果之后使用s标志的搜索发现了比指定值更多的结果,则会显示Overflow error 信息来提示所有的结果都不会被保存。

l Length

使得对任意ASCII或Unicode字符串的搜索只返回比Length 个字符长的结果。默认值为3。这个值只在使用-sa-su 标志时有用。

w

只搜索可写入的内存区域。必须用中括号包含"w"。

1

在搜索输出中仅显示匹配项的地址。该选项在使用.foreach把输出通过管道传递给其他命令作为输入时很有用。

Type

指定要搜索的内存类型。在Type 前加上连字符 (-)。可以使用下面的Type值之一。

类型

说明

b

Byte (8 位)

w

WORD (16位)

d

DWORD (32位)

q

QWORD (64位)

a

ASCII 字符串
(不一定要null结尾的字符串)

u

Unicode string
(不一定要null结尾的字符串)

 

如果省略掉Type,则会使用字节值。但是如果使用Flags,就不能省略Type

sa

搜索任何包含可打印的ASCII字符串的内存。使用l Length 标志来指定这种字符串的最小长度。默认的最小长度为3个字符。

su

搜索任何包含可打印的Unicode字符串的内存。使用l Length 标志来指定这种字符串的最小长度。默认的最小长度为3个字符。

Range

指定要搜索的内存范围。如果没有使用L? 语法则该区域不能大于256 MB。关于该语法的更多信息,查看地址和地址区域语法

Pattern

指定要搜索的一个或多个值。默认情况下这是字节值。可以在Type 中指定不同的内存类型。如果指定WORD、DWORD或QWORD 值,要使用单引号括起来 (如'Tag7')。如果指定字符串,要用双引号括起来 (例如"This string")。

-v

搜索和指定的Object 同样类型的对象。

Object

指定一个对象的地址或指向一个对象的指针的地址。之后调试器会搜索和指定的Object 类型相同的对象。

环境

模式

用户模式、内核模式

目标

活动目标,崩溃转储

平台

所有

注释

如果用调试器查找指定的字节模板,则会显示Range 内存区域中匹配模板的内容的第一个内存地址。调试器会以匹配Type 内存类型的格式显示以该位置开始的内存的摘要信息。如果Typeau,则显示内存内容和相应的ASCII或Unicode字符。

如果没有指定其他Type 值,Pattern 必须指定一系列字节。。可以输入字节值作为数值或ASCII字符:

  • 数字值按当前基数(16、 10或 8)进行解析。要改变默认基数,使用n (Set Number Base)命令。可以使用 0x 前缀(16进制)、 0n 前缀(10进制)、 0t 前缀(8进制)或0y 前缀(2进制)来覆盖默认的基数。

    注意  默认基数的特性在使用C++表达式时不同。关于这些表达式和基数的更多信息,查看表达式求值

  • 每个ASCII字符必须用单独的单引号括起来。不能使用C风格的转义字符 (如 '\0' 或'\n')。

    如果指定多个字节,必须用空格分开它们。

    s-as-u 命令分别用来搜索指定的ASCII和Unicode字符串。这些字符串不一定要null结尾。

    s-sas-su 命令搜索未指定的ASCII和Unicode字符串。这在检查某段内存是否包含可打印字符时有用。

    s-v 命令搜索和Object 对象有相同类型的对象。该命令只能用来搜索C++ 类对象或和虚函数表(Vtables)关联的其他对象。s-v命令在 Range 内存区域中搜索类的Vtables 。如果该类有多个Vtables ,搜索算法查找被一些固有的字节分开的所有的指针值。如果找到了任何普配,调试器返回对象的基地址和完整信息 — 类似DT (Display Type)命令的输出。

    下面的代码示例了如何使用s命令。假设当前基数是16,下面的命令在0012FF40 到0012FF5F的内存中搜索"Hello"。

    0:000> s 0012ff40 L20 'H' 'e' 'l' 'l' 'o' 

    下面的命令有相同作用。

    0:000> s 0012ff40 L20 48 65 6c 6c 6f 

    这个s-a命令也有相同作用。

    0:000> s -a 0012ff40 L20 "Hello" 

    这些命令定位"Hello"出现的每个地方并返回每个模板匹配项的地址 — 即字母"H"的地址。

    调试器只返回搜索区域中完整包含模板的位置。重叠的模板也能被正确找出来。 (即,在"QQQQQ"中,会找到三个"QQQ"模板。)

    下面是使用Type 参数进行搜索的示例。该命令在0012FF40 到0012FF5F的内存位置搜索双字'VUTS':

    0:000> s -d 0012ff40 L20 'VUTS' 

    在小尾(little-endian)计算机上,'VUTS' 和字节模板'S' 'T' 'U' 'V'一样。但是,对WORD、DWORD和QWORD的搜索只返回正确的字节对齐的结果。

附加信息

关于内存操作和的更多信息何内存相关命令的说明,查看读写内存

so (Set Kernel Debugging Options)

so 命令设置或显示内核调试选项。

语法

so [Options

参数

Options

可以是一个或多个下面的选项:

NOEXTWARNING

调试器找不到扩展命令时不显示警告。

NOVERSIONCHECK

不检查调试器扩展DLL的版本。

如果省略Options,则显示当前选项。

环境

模式

仅内核模式

目标

活动目标,崩溃转储

平台

所有

注释

也可以使用_NT_DEBUG_OPTIONS 环境变量来设置内核调试选项。

sq (Set Quiet Mode)

sq 命令打开或关闭安静模式。

语法

sq 
sq{e|d

环境

模式

用户模式、内核模式

目标

活动目标,崩溃转储

平台

所有

注释

sqe 命令打开安静模式,sqd命令关闭。sq 命令打开或关闭安静模式。每个这些命令都可以显示新的安静模式状态。

可以使用KDQUIET 环境变量设置KD或内核模式WinDbg的安静模式。(注意用户模式调试和内核模式调试都存在安静模式,但是只有内核模式才能识别KDQUIET环境变量。)

安静模式有下面三个限制效果:

  • 调试器不会在每次扩展DLL加载或卸载时显示信息。
  • r (Registers) 命令语法中不再必须使用等于号 (=)。
  • 内核调试时中断进目标机,会避免显示很长的警告信息。

不要将静止模式的效果和-myob 命令行选项(CDB 和KD) 或 -Q 命令行选项 (WinDbg)混淆。

ss (Set Symbol Suffix)

ss 命令设置或显示当前用来在数值表达式中进行符号匹配的后缀的值。

语法

ss [a|w|n

参数

a

指定符号后缀应该为"A",用来匹配很多ASCII版本的符号。

w

指定符号后缀应该是"W",用来匹配很多Unicode版本的符号。

n

指示调试器不应该使用符号后缀。(该参数是默认行为。)

环境

模式

用户模式、内核模式

目标

活动目标,崩溃转储

平台

所有

注释

如果使用不带参数的ss命令,则显示后缀值的当前状态。

附加信息

关于符号匹配的更多信息,查看符号语法和符号匹配

sx, sxd, sxe, sxi, sxn, sxr, sx- (Set Exceptions)

sx* 命令用来控制被调试的程序发生某个异常或特定事件时,调试器要采取的动作。c

语法

sx 

sx{e|d|i|n} [-c "Cmd1"] [-c2 "Cmd2"] [-h] {Exception|Event|*

sx- [-c "Cmd1"] [-c2 "Cmd2"] {Exception|Event|*

sxr

参数

-c "Cmd1"

指定一个当异常或事件发生时要执行的命令。该命令在异常的第一次处理机会 时执行,不管该异常是否会中断到调试器。Cmd1 字符串必须包含在引号中。该字符串可以包含多条用分号分隔的命令。-c 和括起来的命令字符串之间的空格是可选的。

-c2 "Cmd2"

指定当异常或事件发生并且没有在第一次处理机会被处理时执行的命令。该命令在异常的第二次处理机会时执行,不管它是否会中断到调试器。Cmd2 字符串必须包含在引号中。该字符串可以包含多条用分号分隔的命令。-c2 和括起来的命令字符串之间的空格是可选的。

-h

改变指定事件的处理状态而不是中断状态。如果Eventcchcbpecssec-h 选项不是一定需要。

Exception

以当前基数指定命令要作用的异常号码。

Event

指定命令要作用的事件号。这些事件都是用短的缩写指定的。事件列表查看控制异常和事件

*

作用于所有没有用sx 明确命令的异常。明确命名的异常的列表,查看控制异常和事件

环境

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

注释

sx 命令显示当前进程的异常列表和所有非异常的事件列表,并且显示调试器遇到每个异常和事件时的行为。

Sxesxdsxnsxi 命令控制调试器针对每个异常和事件的设置。

sxr 命令将所有异常和事件过滤器的状态重设为默认值。命令被清除、中断和继续选项被重设为默认值,等等。

sx- 命令不改变指定异常或事件的处理状态和中断状态。该命令在希望修改第一次处理机会命令或第二次处理机会命令,而不想修改其他任何东西的时候很有用。

如果包含-h 选项(或指定cchcbpecssec事件),sxesxdsxnsxi 命令控制异常或事件的处理状态。在所有其它情况下,这些命令都控制异常或事件的中断状态

设置中断状态时,这些命令有以下作用。

命令

状态名

说明

sxe

Break

(Enabled)

当发生该异常时,在任何错误处理器被激活之前目标立即中断到调试器中。这种处理类型称为第一次处理机会

sxd

Second chance break

(Disabled)

发生该类异常时,调试器不会在第一次处理机会时中断(虽然会显示信息)。如果其他错误处理器没有处理掉该异常,执行会停止下来并中断到调试器。这种处理类型称为第二次处理机会

sxn

Output

(Notify)

当该异常发生时,目标程序不中断到调试器中。但是,会通过一条消息提示发生了异常。

sxi

Ignore

异常发生时,目标程序不中断到调试器,并且不会显示信息。

 

设置处理状态是,这些命令有以下作用:

命令

状态名

说明

sxe

Handled

执行返回时,事件被标识为已处理。

sxd,
sxn,
sxi

Not Handled

执行返回时,事件被标识为未处理。

 

只有异常可以使用-h 选项,而事件不可以。将该选项和chbpesse一起使用来分别设置 hcbpecssec的处理状态。如果将-h 和其他任何事件一起使用,不会有任何效果。

hcbpecssec一起使用-c-c2 选项可以将指定命令分别和chbpesse关联起来。

下面的例子中,sxe 命令用来设置针对访问违例的第一次处理机会的中断状态,并且设置在第一次处理机会时执行r eax命令。sx- 命令用来将第一次处理机会命令改变为r ebx,而不会改变处理状态。最后,显示了一部分sx的输出,指明了访问违例事件的当前设置:

0:000> sxe -c "r eax" av 

0:000> sx- -c "r ebx" av 

0:000> sx 
  av - Access violation - break - not handled
       Command: "r ebx"
  . . .  

附加信息

关于中断状态和处理状态的更多信息、事件代码的说明、所有事件的默认状态列表、以及控制该状态的其他方法,查看控制异常和状态

posted @ 2008-06-19 15:57 NetRoc 阅读(711) | 评论 (0)编辑 收藏

WinDbg 文档翻译----54

     摘要: cc682/NetRoc http://netroc682.spaces.live.com/ q, qq (Quit) q 和qq 命令结束调试会话。(在CDB和KD中,该命令也会退出调试器本身。在WinDbg中,该命令将调试器返回到静止模式。) 语法 q qq  环境 ...  阅读全文

posted @ 2008-06-19 15:56 NetRoc 阅读(607) | 评论 (0)编辑 收藏

仅列出标题
共10页: First 2 3 4 5 6 7 8 9 10 

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜