NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----54

cc682/NetRoc

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

q, qq (Quit)

qqq 命令结束调试会话。(在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 命令显示或修改寄存器、浮点寄存器、标志位、伪寄存器和预定义别名。

语法

用户模式

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

内核模式

[Processorr[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

指定要指派给寄存器的值。该语法的更多信息,查看数值表达式语法

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

如果未指定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 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。

附加信息

关于寄存器和它们的操作的更多信息,查看读写寄存器和标志位

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

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

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜