控制流标记

可以使用 控制流令牌 在调试器命令程序中创建条件执行和执行循环。

控制流令牌的行为类似于 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 扩展也可用于调试器命令程序。