Debugging Tools for Windows

r (Registers)

r 命令显示或修改寄存器、浮点寄存器、标志位、伪寄存器和预定义别名。

语法

用户模式

[~Threadr[M Mask|F|X|?] [ Register[:[Num]Type] [= [Value]] ] 
r.

内核模式

[Processorr[M Mask|F|X|?] [ Register[:[Num]Type] [= [Value]] ] 
r.

参数

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
指定要指派给寄存器的值。该语法的更多信息,查看数值表达式语法
.
显示当前指令所使用到的寄存器。如果不使用寄存器,则不会有输出。

环境

模式 用户模式、内核模式
目标 活动目标、崩溃转储
平台 所有

注释

如果未指定Registerr命令显示所有非浮点数寄存器,而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 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命令关联。关于这些别名的更多信息,查看使用别名

下面是在一个Itanium处理器上使用r.命令的示例。

e0000000`83066cf0        ld8.acq r25 = [r45] e0000000`ffff0b18=????????????????
1: kd> r.
r25=ffffffff`d0000006  r45=e0000000`ffff0b18

附加信息

关于寄存器和它们的操作的更多信息,查看读写寄存器和标志位。关于寄存器上下文和其他上下文设置的更多信息,查看改变上下文

Build machine: CAPEBUILD