z(执行 While)

z 命令在给定条件为 true 时执行命令。

User-Mode

Command ; z( Expression ) 

Kernel-Mode

Command ; [Processor] z( Expression )

参数

命令
指定要在 表达式 条件的计算结果为非零值时执行的命令。 此命令始终至少执行一次。

处理器
指定应用于测试的处理器。 有关语法的详细信息,请参阅 多处理器语法。 只能在内核模式下指定处理器。

表达
指定要测试的条件。 如果此条件的计算结果为非零值,则 再次执行 Command 命令,然后再次测试 Expression 。 有关语法的详细信息,请参阅 数值表达式语法

环境

说明
模式 用户模式、内核模式
目标 实时、故障转储
平台 全部

注解

在许多调试器命令中,分号用于分隔不相关的命令。 但是,在 z 命令中,分号将“z”与 Command 参数分隔开。

始终至少执行一次 Command 命令,然后测试 Expression 。 如果条件为非零值,则再次执行命令,然后再次测试 Expression 。 (此行为类似于 C 语言 do - while 循环,而不是简单的 while 循环。)

如果“z”左侧有多个分号,则只要 Expression 条件为 true,“z”左侧的所有命令都会重复。 此类命令可以是允许终端分号的任何调试器命令。

如果在 z 命令后面添加另一个分号和其他命令,则这些附加命令在循环完成后执行。 我们通常不建议使用以“z”开头的行,因为它将永远生成无兴趣的输出,除非条件由于某些其他操作而变为 false。 请注意,可以嵌套 z 命令。

若要中断持续太长时间的循环,请在 CDB 或 KD 中使用 CTRL+C ,或使用 调试 |从菜单中断 ,或在 WinDbg 中 CTRL+BREAK。

下面的代码示例演示了一种不必要的复杂方法来将 eax 寄存器归零。

0:000> reax = eax - 1 ; z(eax)

以下示例递增 eaxebx 寄存器,直到其中一个寄存器至少为 8,然后递增 ecx 寄存器一次。

0:000> reax=eax+1; rebx=ebx+1; z((eax<8)|(ebx<8)); recx=ecx+1

以下示例使用 C++ 表达式语法,并使用伪寄存器 $t 0 作为循环变量。

0:000> .expr /s c++
Current expression evaluator: C++ - C++ source expressions

0:000> db pindexcreate[@$t0].szKey; r$t0=@t0+1; z( @$t0 < cIndexCreate )

另请参阅

j (执行 If-Else)