Debugging Tools for Windows |
z 命令当给定条件为真时执行一条命令。
用户模式
内核模式
模式 | 用户模式、内核模式 |
目标 | 活动目标,崩溃转储 |
平台 | 所有 |
在很多调试器命令中,分号用来分隔多个不相关的命令。但是,在z命令中,分号用来将"z"和Command 参数分开。
Command 命令总是至少执行一次,然后测试Expression 。如果条件为非0值,该命令再次执行,并且再次测试Expression 。(这个特性和C语言的do - while 循环相似,而不像while 循环。)
如果"z"左边有多个分号,当Expression 条件为真时"z"左边的所有命令都会被执行。它们可以是任何允许用分号结尾的调试器命令。
如果在z命令之后还添加了另外的分号和命令,这些命令在循环完成之后执行。一般不建议使用以"z"开头的行,某些其它动作,这样会产生奇怪的输出。注意z命令可以嵌套。
要中断太长的循环,可以在CDB或KD中使用CTRL+C或者在WinDbg中使用Debug | Break 或CTRL+BREAK。
下面是一个使用不必要的复杂方式来清空eax寄存器的示例。
下面的命令将eax和ebx加1,直到它们中的一个大于8,然后将ecx递增一次。
下面的命令使用C++ 表达式语法并将伪寄存器$t0作为循环变量。
Current expression evaluator: C++ - C++ source expressions
0:000> db pindexcreate[@$t0].szKey; r$t0=@t0+1; z( @$t0 < cIndexCreate )