cc682/NetRoc
http://netroc682.spaces.live.com/
q, qq (Quit)
q 和qq 命令结束调试会话。(在CDB和KD中,该命令也会退出调试器本身。在WinDbg中,该命令将调试器返回到静止模式。)
语法
q
qq
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
用户模式调试下,q命令结束调试会话并关闭目标程序。
内核模式调试时,q命令保存日志文件并结束调试会话。目标机保持锁定。
如果该命令在KD中没有效果,在调试器中按下CTRL+R+ENTER ,然后重新输入q 命令。如果还是无效,则只能使用CTRL+B+ENTER退出调试器。
如果不是在进行远程调试,则qq 命令的作用和q非常相似。远程调试时,q命令没有作用,但是qq命令结束调试服务器。关于该作用的更多信息,查看通过调试器的远程调试。
关于退出调试器或停止对目标的附加的更多信息,查看结束调试会话。
qd (Quit and Detach)
qd 命令结束调试会话并让用户模式的目标程序继续运行。(在CDB和KD中,该命令也退出调试器本身。在WinDbg中,该命令将调试器返回到静止模式。)
语法
qd
环境
Modes
|
User mode only
|
Targets
|
Live debugging only
|
Platforms
|
All
|
注释
qd命令停止对目标程序的附加并结束调试会话,让目标继续运行。但是,该命令只在Microsoft Windows XP和之后的版本中支持。在Windows NT和Windows 2000中,qd产生一条警告信息并且不起作用。
当进行通过调试器的远程调试时,不能从调试客户端使用qd命令。
附加信息
关于退出调试器或停止对目标的附加的更多信息,查看结束调试会话。
r (Registers)
r 命令显示或修改寄存器、浮点寄存器、标志位、伪寄存器和预定义别名。
语法
用户模式
[~Thread] r[M Mask|F|X|?] [ Register[:[Num]Type] [= [Value]] ]
内核模式
[Processor] r[M Mask|F|X|?] [ Register[:[Num]Type] [= [Value]] ]
参数
Processor
指定要读取寄存器的处理器。默认值为0。如果指定了Processor,则不能包含Register 参数 — 所有寄存器都会被显示出来。该语法的更多信息,查看多处理器语法。只能在内核模式下指定处理器。
Thread
指定要读取寄存器的线程。如果没有指定线程,则读取当前线程。该语法的更多信息,查看线程语法。仅能在用户模式下指定线程。
M Mask
指定调试器显示寄存器时使用的掩码(mask)。"M"必须是大写字母。Mask 是一个对寄存器显示进行一些设置的位的集合。每一位的意义由处理器和模式决定(查看下面注释中的表格获取更多信息)。如果省略掉M,则使用默认的掩码。可以使用Rm (Register Mask) 命令来设置或显示默认掩码。
F
显示浮点数寄存器。"F"必须是大写字母。该选项和M 0x4效果一样。
X
显示SSE MMX寄存器。"X"必须是大写字母。该选项相当于M 0x40。
?
(仅在指派伪寄存器时) 使得伪寄存器获得类型信息。可以使用任何类型。r? 语法的更多信息,查看调试器命令程序示例。
Register
指定要显示或修改的寄存器、标志位、伪寄存器或预定义别名。该参数前面不能加上at符号(@)。语法的更多信息,查看寄存器语法。
Num
指定要显示的成员个数。如果省略该参数并且包含Type,则显示完整的寄存器长度。
Type
指定每个寄存器成员要显示的数据格式。Type 只能和64位或128位向量寄存器(vector register)一起使用。可以指定多个类型,可以使用下面这些值中的一个或多个。
类型
|
显示格式
|
ib
|
Signed byte
|
ub
|
Unsigned byte
|
iw
|
Signed word
|
uw
|
Unsigned word
|
id
|
Signed DWORD
|
ud
|
Unsigned DWORD
|
iq
|
Signed quad-word
|
uq
|
Unsigned quad-word
|
f
|
32位浮点数
|
d
|
64位浮点数
|
Value
指定要指派给寄存器的值。该语法的更多信息,查看数值表达式语法。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标、崩溃转储
|
平台
|
所有
|
注释
如果未指定Register,r命令显示所有非浮点数寄存器,而rF 命令显示所有浮点数命令。可以通过rm (Register Mask) 命令改变这种行为。
如果指定了Register 但是省略等于号(=)和Value 参数,命令显示寄存器当前的值。
如果指定了Register 和等于号(=) 但是省略Value,命令会显示寄存器的当前值并提示输入新值。
如果指定了Register、等于号(=)和Value,命令将寄存器改变为给定的值。(如果启用了安静模式(quiet mode) ,可以省略等于号。通过sq (Set Quiet Mode)命令可以打开安静模时。内核模式下,可以通过KDQUIET 环境变量来打开安静模式。)
可以指定多个寄存器,并用逗号分隔它们。
用户模式下,r命令显示当前线程关联的寄存器。关于线程的更多信息,查看控制进程和线程。
内核模式下,r命令显示当前寄存器上下文关联的寄存器。可以设置寄存器上下文来匹配特定线程、上下文记录或陷阱帧。只有指定的寄存器上下文的最终要的寄存器会被实际显示出来。关于寄存器上下文的更多信息,查看寄存器上下文。
使用名字指定浮点数寄存器时,不要求使用F选项。指定单精度浮点数时,除10进制值之外还会显示原始的16进制值。
下面这些Mask位支持x86处理器或x64处理器。
位
|
值
|
说明
|
0 1
|
0x1 0x2
|
显示基本的整数寄存器。(设置这些位中的一个或全部有相同作用。)
|
2
|
0x4
|
显示浮点数寄存器。
|
3
|
0x8
|
显示段寄存器。
|
4
|
0x10
|
显示MMX寄存器。
|
5
|
0x20
|
显示调试寄存器。在内核模式下,设置这些位也会显示CR4寄存器。
|
6
|
0x40
|
显示SSE MMX寄存器。
|
7
|
0x80
|
(仅内核模式) 显示CR0、CR1和CR3寄存器。
|
8
|
0x100
|
(仅内核模式) 显示描述符合任务状态寄存器。
|
下面这些Mask位支持Itanium处理器。
位
|
值
|
说明
|
0 1
|
0x1 0x2
|
显示基本的整数寄存器。(设置这些位中的一个或全部有相同作用。)
|
2
|
0x4
|
显示浮点数寄存器。
|
3
|
0x8
|
显示高位,浮点数寄存器(f32 to f127)。(不太明白,原文是Displays the high, floating-point registers (f32 to f127))
|
4
|
0x10
|
显示用户调试寄存器。
|
5
|
0x20
|
(仅内核模式) 显示KSPECIAL_REGISTERS。
|
下面这些示例说明了r命令在x86处理器上的使用。
在内核模式下,下面的命令显示处理器2的寄存器。
1: kd> 2r
用户模式下,下面的命令显示线程2的寄存器。
0:000> ~2 r
下面的命令显示关联到所有线程的eax 的值(按线程的顺序)。
0:000> ~* r eax
这个命令将当前线程的eax寄存器设置为0x000000FF。
0:000> r eax=0x000000FF
该命令将st0寄存器设置为1.234e+10 (F是可选的)。
0:000> rF st0=1.234e+10
该命令显示0标志位(ZF)。
0:000> r zf
下面的命令将xmm0寄存器显示为16个unsigned byte,然后按双精度浮点数格式显示xmm1寄存器的完整内容。
0:000> r xmm0:16ub, xmm1:d
如果当前语法是C++,必须在寄存器前面加上at符号(@)。因此,可以使用下面的命令将ebx的值复制给eax。
0:000> r eax = @ebx
下面的命令使用r命令显示寄存器的方法来显示伪寄存器。
0:000> r $teb
也可以使用r命令来创建预定义别名(fixed-name aliases)。这些别名不是寄存器或伪寄存器,虽然它们和r命令关联。关于这些别名的更多信息,查看使用别名。
附加信息
关于寄存器和它们的操作的更多信息,查看读写寄存器和标志位。关于寄存器上下文和其他上下文设置的更多信息,查看改变上下文。
rdmsr (Read MSR)
rdmsr 从指定地址读取模式相关寄存器(Model-Specific Register (MSR))值。
语法
rdmsr Address
参数
Address
指定MSR的值。
环境
注释
rdmsr 命令可以显示x86、Itanium和x64平台上的MSR。MSR的定义是平台相关的。
参见
wrmsr (Write MSR)
rm (Register Mask)
rm 命令修改或显示寄存器显示掩码。该掩码控制使用r (Registers) 命令时寄存器如何显示。
语法
rm
rm ?
rm Mask
参数
?
显示可用的Mask位的列表。
Mask
指定调试器显示寄存器时使用的掩码。Mask 是用来指示寄存器如何显示的位的集合。每一位的意义由处理器和模式决定。详细信息,查看注释节中的表格。
环境
模式
|
用户模式、内核模式
|
目标
|
活动目标,崩溃转储
|
平台
|
所有
|
注释
命令中的"m"必须是小写字母。
如果rm没有带参数,则显示当前值和每一位的说明。
要显示基本的整数寄存器,必须设置位0 (0x1) 或位1 (0x2)。默认情况下, 0x1用来设置32位目标,而0x02用来设置64位目标。不能同时设置这两位 — 如果这样,0x2会覆盖0x1。
可以使用r (Registers) 命令和M选项来覆盖默认的掩码。
下面这些Mask位支持x86处理器或x64处理器。
位
|
值
|
说明
|
0 1
|
0x1 0x2
|
显示基本的整数寄存器。(设置这些位中的一个或全部有相同作用。)
|
2
|
0x4
|
显示浮点数寄存器。
|
3
|
0x8
|
显示段寄存器。
|
4
|
0x10
|
显示MMX寄存器。
|
5
|
0x20
|
显示调试寄存器。在内核模式下,设置这些位也会显示CR4寄存器。
|
6
|
0x40
|
显示SSE MMX寄存器。
|
7
|
0x80
|
(仅内核模式) 显示CR0、CR1和CR3寄存器。
|
8
|
0x100
|
(仅内核模式) 显示描述符合任务状态寄存器。
|
下面这些Mask位支持Itanium处理器。
位
|
值
|
说明
|
0 1
|
0x1 0x2
|
显示基本的整数寄存器。(设置这些位中的一个或全部有相同作用。)
|
2
|
0x4
|
显示浮点数寄存器。
|
3
|
0x8
|
显示高位,浮点数寄存器(f32 to f127)。(不太明白,原文是Displays the high, floating-point registers (f32 to f127))
|
4
|
0x10
|
显示用户调试寄存器。
|
5
|
0x20
|
(仅内核模式) 显示KSPECIAL_REGISTERS。
|
附加信息
关于寄存器和它们的操作的更多信息,查看读写寄存器和标志位。