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 [/r] 0
.allow_image_mapping [/r] 1
.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 RemoteOptions] AttachOptions 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 扩展命令也非常有用。
附加信息
关于错误检查的更多信息,查看错误检查(蓝屏)。每个错误检查的单独说明,查看错误检查代码参考节。