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 [/q] Name
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)
as 和aS 命令定义一个新的别名或重新定义已存在的别名。
语法
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是区分大小写的。在Name 和EquivalentLine 之间必须至少有一个空格。这两个参数之间具体有多少个空格无所谓。别名的等价值不会以空格开头。在这些空格,EquivalentLine 包含该行的结束符。分号、引号和空格都被当作普通字符,并且末尾的空格也会被包含进去。
EquivalentPhrase
指定别名的等价值。EquivalentPhrase 是大小写敏感的。在Name 和EquivalentPhrase之间必须至少有一个空格。这两个参数之间具体有多少个空格无所谓。别名的等价值不会以空格开头。
可以用引号(")将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开关,as 和aS 命令都会在遇到分号时结束。
如果Name已经作为别名的名字定义了,则该别名被重定义。
可以使用as 或aS 命令来创建或修改任何自定义别名。但是不能使用该命令来控制预定义别名 ($u0 到$u9)。
可以使用/ma、/mu、/msa、/msu、/f和/c开关来创建包含回车符的别名。但是,不能使用包含回车符的别名来执行一个多命令序列,而必须使用分号。
附加信息
关于如何使用别名的更多信息,查看使用别名。