控制流标记
可以使用 控制流令牌 在调试器命令程序中创建条件执行和执行循环。
控制流令牌的行为类似于 C 和 C++ 中的对应项,但有以下一般例外情况:
你必须将每个命令块括起来,这些命令按条件执行或重复执行,即使只有一个这样的命令。 例如,不能在以下命令中省略大括号。
0:000> .if (ebx>0) { r ebx }
每个条件都必须是一个表达式。 不允许使用命令。 例如,以下示例生成语法错误。
0:000> .while (r ebx) { .... }
右大括号前的最后一个命令不必后跟分号。
调试器命令程序中支持以下控制流令牌。 有关每个标记的语法的详细信息,请参阅各个参考主题。
.if 标记的行为类似于 C 中的 if 关键字 (keyword)。
.else 标记的行为类似于 C 中的 else 关键字。
.elsif 标记的行为类似于 C 中的 else if 关键字组合。
.foreach 令牌分析调试器命令、字符串或文本文件的输出。 然后,此令牌接受它查找的每个项,并将其用作指定调试器命令列表的输入。
.for 标记的行为类似于 C 中的 for 关键字 (keyword),但必须用分号分隔多个递增命令,而不是用逗号分隔。
.while 令牌的行为类似于 C 中的 while 关键字。
.do 标记的行为类似于 C 中的 do 关键字 (keyword),只是条件前不能使用“while”一词。
.break 令牌的行为类似于 C 中的中断关键字 (keyword)。可以在任何 .for、.while 或 .do 循环中使用此令牌。
.continue 令牌的行为类似于 C 中的 continue 关键字 (keyword)。可以在任何 .for、.while 或 .do 循环中使用此令牌。
如果 发生错误,.catch 令牌将阻止程序结束。 .catch 标记后跟包含一个或多个命令的大括号。 如果其中一个命令生成错误,则会显示错误消息,将忽略大括号中的所有剩余命令,并在右大括号后继续执行第一个命令。
.leave 令牌用于退出 .catch 块。
.printf 令牌的行为类似于 C 中的 printf 语句。
. block 令牌不执行任何操作。 应仅使用此令牌来引入块,因为不能仅使用一对大括号创建块。 必须在左大括号之前添加控制流令牌。
!for_each_module、!for_each_frame 和 !for_each_local 扩展也可用于调试器命令程序。