NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----48

cc682/NetRoc

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

~e (Thread-Specific Command)

~e命令对指定线程或目标进程的所有线程执行一条或多条命令。

不要将该命令和e (Enter Values)命令混淆。

语法

~Thread e CommandString 

参数

Thread

指定要执行CommandString 命令的一个或数个线程。关于该语法的更多信息,查看线程语法

CommandString

指定要执行的一条或多条命令。多条命令之间应该用分号隔开。CommandString 包含该输入行的终止符。字母"e"后面的所有文本都被认为是该字符串的一部分。不要将CommandString 用引号括起来。

环境

模式

仅用户模式

目标

活动目标、崩溃转储

平台

所有

 

注释

只能在用户模式下指定线程。在内核模式下,波形符(~)用于引用处理器。

当仅对一个线程使用~e 命令时,~e 仅仅是使得输入变短了。例如,下面两条命令效果是一样的。

0:000> ~2e r; k; kd 

0:000> ~2r; ~2k; ~2kd 

但是,可以使用~e 限定符来重复一条命令或者扩展命令数次。在这种情况下使用该限定符,可以减少大量输入。例如,下面的命令对正在调试的每个线程重复执行!gle扩展命令。

0:000> ~*e !gle 

如果某条命令的执行遇到错误,会继续执行下一条。

不能将~e 限定符和执行命令(g, gh, gn, gN, gu, p, pa, pc, t, ta, tb, tc, wt)一起使用。

~e 限定符不能和j (Execute If-Else)z (Execute While)条件命令一起使用。

如果正在调试多于一个进程,不能使用~e 命令来访问非激活进程的虚拟内存空间

附加信息

控制线程的其他命令的信息,查看控制进程和线程

~f (Freeze Thread)

~f 命令冻结给定线程,使得它停止执行直到被解冻。

不要将该命令和f (Fill Memory) 命令混淆。

语法

~Thread f 

参数

Thread

指定要冻结的线程。该语法的更多信息,查看线程语法

环境

模式

仅用户模式

目标

活动目标、崩溃转储

平台

所有

 

注释

只能在用户模式下指定线程。在内核模式下,波形符(~)用于引用处理器。

~f命令使得指定线程被冻结。当调试器让目标恢复执行时,其他线程继续运行,而该线程会保持停止。

下面的例子说明了如何使用该命令。这个例子显示所有线程的状态。

0:000> ~* k

下例的命令冻结产生当前异常的线程。

0:000> ~# f

下面的命令查看被挂起的线程的状态。

0:000> ~* k

下面的命令解冻号码为123的线程。

0:000> ~123 u

附加信息

如何冻结线程和其他控制线程的冻结和挂起的命令,查看控制进程和线程

~u (Unfreeze Thread)

~u命令解冻指定的线程。

不要将该命令和U (Unassemble)命令混淆。

语法

~Thread u 

参数

Thread

指定要解冻的一个或多个线程。该语法的更多信息,查看线程语法

环境

模式

仅用户模式

目标

活动目标、崩溃转储

平台

所有

 

注释

只能在用户模式下指定线程。在内核模式下,波形符(~)用于引用处理器。

下面的示例说明了如何使用 ~ 命令。

这个命令显示所有线程的当前状态。

0:000> ~* k

该命令冻结造成当前异常的线程。

0:000> ~# f

该命令查看被挂起的线程的状态。

0:000> ~* k

下面的命令解冻号码为123的线程。

0:000> ~123 u

附加信息

如何冻结线程和其他控制线程的冻结和挂起的命令,查看控制进程和线程

~n (Suspend Thread)

~n命令挂起指定线程的执行。

不要将该命令和n (Set Number Base)命令混淆。

语法

~Thread n 

参数

Thread

指定要挂起的一个或多个线程。该语法的更多信息,查看线程语法

环境

模式

仅用户模式

目标

仅活动调试

平台

所有

 

注释

只能在用户模式下指定线程。在内核模式下,波形符(~)用于引用处理器。

每执行一次~n 命令,线程的挂起计数都增加1。

使用该命令时会显示线程的开始地址。

附加信息

关于挂起计数和如何挂起线程、以及控制线程的挂起和冻结的命令列表,查看控制进程和线程

~m (Resume Thread)

~m命令恢复指定线程的执行。

不要将该命令和m (Move Memory)命令混淆。

语法

~Thread m 

参数

Thread

指定要恢复的一个或数个线程。该语法的更多信息,查看线程语法

环境

模式

仅用户模式

目标

仅活动调试

平台

所有

 

注释

只能在用户模式下指定线程。在内核模式下,波形符(~)用于引用处理器。

每执行一次~ m 命令,线程的挂起计数都减1。

附加信息

关于挂起计数和如何挂起线程、以及控制线程的挂起和冻结的命令列表,查看控制进程和线程

~s (Set Current Thread)

~s命令设置或显示当前线程号。

在用户模式下,~s设置当前线程。不要将该命令和~s (Change Current Processor)( 仅在内核模式下工作)、|s (Set Current Process)||s (Set Current System)s (Search Memory)命令混淆。

语法

~Thread s 
~ s 

参数

Thread

指定要设置或显示的线程。该语法的更多信息,查看线程语法

环境

模式

仅用户模式

目标

活动目标、崩溃转储

平台

所有

 

注释

只能在用户模式下指定线程。在内核模式下,波形符(~)用于引用处理器。

如果使用了~s 语法,调试器显示当前线程的信息。

该命令也会反汇编当前系统、进程和线程的当前指令。

附加信息

更多信息和控制进程和线程的其他方法,查看控制进程和线程

~s (Change Current Processor)

~s 命令设置在一个多处理器系统上要调试哪个处理器。

在内核模式下,~s改变当前处理器。不要将该命令和~s (Set Current Thread)(仅工作在用户模式)、|s (Set Current Process)||s (Set Current System)s (Search Memory) 命令混淆。

语法

~Processor s 

参数

Processor

指定要调试的处理器号。

环境

模式

仅内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

只能在内核模式下指定处理器。在用户模式下,波形符(~)用来引用线程。

当调试一个多处理器系统时,通过内核调试提示符的形状可以立刻知道当前处理器。下面例子中,0: 表示正在调试该计算机上的第一个处理器。

0: kd>

使用下面的命令来在处理器之间进行切换:

0: kd> ~1s
1: kd>

现在开始调试机器上的第二个处理器。

参见

多处理器语法

a (Assemble)

a 命令对指令助记符进行汇编,并将指令代码的结果放入内存。

语法

a [Address

参数

Address

指定用于放置结果代码的内存块的开始位置。该语法的更多信息,查看地址和地址区域语法

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

如果没有指定地址,汇编会从指令指针的当前值所指向的地址开始。要汇编新的指令,可以输入需要的助记符并按下ENTER。要结束汇编,直接按下ENTER。

由于汇编器需要搜索代码中引用到的所有符号,所以该命令可能需要一些时间才能完成。这时,可以按下CTRL+C来中止a命令。

附加信息

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

ad (Delete Alias)

ad 命令从别名列表中删除一个别名。

语法

ad [/qName 
ad * 

参数

/q

指定使用安静模式。这种模式隐藏当Name指定的别名不存在时显示的错误信息。

Name

指定要删除的别名的名字。如果指定星号(*),所有别名都会被删除(即使存在名字为"*"的别名)。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

可以使用ad 来删除任何自定义别名。但是不能用它来删除预定义别名($u0$u9)。

附加信息

关于如何使用别名的更多信息,查看使用别名

ah (Assertion Handling)

ah 命令控制指定地址的断言处理状态。

语法

ahb [Address
ahi [Address
ahd [Address
ahc 
ah 

参数

ahb

如果指定地址的断言失败,中断调试器。

ahi

忽略指定地址的断言失败。

ahd

删除指定地址的任何断言处理信息。这种删除使得调试器对该地址的处理返回到默认状态。

Address

指定要设置断言处理状态的指令地址。如果省略该参数,调试器使用当前程序计数器。

ahc

删除当前进程的所有断言处理信息。

ah

显示当前的断言处理设置。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

ah*命令控制指定地址的断言处理状态。sx* asrt命令控制全局的断言处理状态。如果使用ah*设置了某个地址,并且之后该地址发生了一次断言,调试器按照ah*的设置进行响应而忽略掉sx* asrt 的设置。

当调试器遇到断言时,它会首先检查是否设置了该地址的断言处理。如果没有设置,调试器使用全局设置。

ah*命令仅作用于当前进程。当前进程结束时,所有状态设置丢失。

断言处理状态仅作用于STATUS_ASSERTION_EXCEPTION异常。该处理并不作用于内核模式的断言例程。

附加信息

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

al (List Aliases)

al命令显示所有自定义别名的列表。

语法

al 

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

al命令列出所有自定义别名。但是该命令不会列出预定义别名($u0$u9)。

附加信息

关于如何使用别名的更多信息,查看使用别名

as, aS (Set Alias)

asaS 命令定义一个新的别名或重新定义已存在的别名。

语法

as Name EquivalentLine 
aS Name EquivalentPhrase 
aS Name "EquivalentPhrase" 
as /e Name EnvironmentVariable 
as /ma Name Address 
as /mu Name Address 
as /msa Name Address 
as /msu Name Address 
as /x Name Expression 
aS /f Name File 
as /c Name CommandString 

参数

Name

指定别名的名字。该名字可以是不包含空格、ENTER键并且不以"al"、 "as"、 "aS"或"ad"开头的任何文本字符串。Name 是区分大小写的。

EquivalentLine

指定别名的等价值。EquivalentLine是区分大小写的。在NameEquivalentLine 之间必须至少有一个空格。这两个参数之间具体有多少个空格无所谓。别名的等价值不会以空格开头。在这些空格,EquivalentLine 包含该行的结束符。分号、引号和空格都被当作普通字符,并且末尾的空格也会被包含进去。

EquivalentPhrase

指定别名的等价值。EquivalentPhrase 是大小写敏感的。在NameEquivalentPhrase之间必须至少有一个空格。这两个参数之间具体有多少个空格无所谓。别名的等价值不会以空格开头。

可以用引号(")将EquivalentPhrase 括起来。不管是否使用了引号,EquivalentPhrase 都可以包含空格、逗号和单引号(')。如果将EquivalentPhrase 括在引号里面,则可以包含分号,但是不能包含其他引号。如果没有将EquivalentPhrase 包含在引号中,则可以在除了第一个字符之外的其他位置包含银号,但是不能包含分号。末尾的空格不管是否使用了引号都会包含进去。

/e

设置别名的值为EnvironmentVariable 指定的环境变量。

EnvironmentVariable

指定用来获得别名的值的环境变量。使用调试器的环境变量而不是目标的。如果从命令提示符窗口启动调试器,环境变量和该窗口使用的一样。

/ma

将别名的等价值设置为从地址Address 开始的null结尾的ASCII字符串。

/mu

将别名的等价值设置为从地址Address 开始的null结尾的Unicode字符串。

/msa

将别名的等价值设置为从地址Address 开始的null结尾的ANSI_STRING结构。

/msu

将别名的等价值设置为从地址Address 开始的null结尾的UNICODE_STRING结构。

Address

指定用来决定别名的等价值的虚拟内存位置。

/x

设置别名的等价值为Expression 的64位值。

Expression

指定用来求值的表达式。求出的值作为别名的等价值。该语法的更多信息,查看数值表达式语法

/f

设置别名的等价值为File 文件的内容。/f 开关只能和aS一起使用,不能和as一起。

File

指定内容作为别名等价值的文件。File可以包含空格,但是不能将 File用引号括起来。如果指定了非法的文件,会得到一个"Out of memory"的错误信息。

/c

设置别名的等价值是CommandString 指定的命令的输出。如果命令输出中包含回车符,别名的等价值中也会包含回车,并且每条命令输出的末尾也会包含回车符(即使只指定了一条命令)。

CommandString

指定输出作为别名等价值的命令。该字符串可以包含任意多个以分号分隔的命令。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

如果不使用任何命令参数,as 命令将行的结束符作为别名等价值。

可以用一个分号来结束aS命令。这在需要将所有命令放在单行中的脚本文件中有用。

如果使用了/e/ma/mu/msa/msu/x开关,asaS 命令都会在遇到分号时结束。

如果Name已经作为别名的名字定义了,则该别名被重定义。

可以使用asaS 命令来创建或修改任何自定义别名。但是不能使用该命令来控制预定义别名 ($u0$u9)。

可以使用/ma/mu/msa/msu/f/c开关来创建包含回车符的别名。但是,不能使用包含回车符的别名来执行一个多命令序列,而必须使用分号。

附加信息

关于如何使用别名的更多信息,查看使用别名

posted on 2008-06-11 11:57 NetRoc 阅读(496) 评论(0)  编辑 收藏 引用

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

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜