$<、$><、$$<、$><$、$a >< (运行脚本文件)
$<、$><、$<、$><$和 $$>a< 命令读取指定脚本文件的内容,并将其内容用作调试器命令输入。
$<Filename
$><Filename
$$<Filename
$$><Filename
$$>a<Filename [arg1 arg2 arg3 ...]
参数
文件名 指定包含有效调试器命令文本的文件。 文件名必须遵循 Microsoft Windows 文件名约定。 文件名可能包含空格。
argn
指定调试器要传递给脚本的任意数量的字符串参数。 在执行脚本之前,调试器会将脚本文件中 ${$argn} 格式的任何字符串替换为相应的 argn 。 参数不能包含引号或分号。 多个参数必须用空格分隔;如果参数包含空格,则必须用引号引起来。 所有参数均为可选。
环境
项 | 说明 |
---|---|
模式 | 用户模式、内核模式 |
目标 | 实时、故障转储 |
平台 | 全部 |
注解
$$< 和 $< 标记按字面执行在脚本文件中找到的命令。 但是,使用 $< 可以指定任何文件名,包括包含分号的文件名。 由于 $< 允许在文件名中使用分号,因此不能将 $< 与其他调试器命令连接,因为分号不能同时用作命令分隔符和文件名的一部分。
$$>< 和 $>< 标记按字面执行在脚本文件中找到的命令,这意味着它们打开脚本文件,将所有回车符替换为分号,并将生成的文本作为单个命令块执行。 与前面讨论的 $< 一样, $>< 变体允许包含分号的文件名,这意味着不能将 $>< 与其他调试器命令连接。
如果运行的脚本包含调试器命令程序,则 $$>< 和 $>< 标记非常有用。 有关这些程序的详细信息,请参阅 使用调试器命令程序。
除非文件名中包含分号,否则不需要使用 $< 或 $><。
$$>a< 令牌允许调试器将参数传递给脚本。 如果 Filename 包含空格,则必须用引号括起来。 如果提供的参数太多,则忽略多余的参数。 如果提供的参数太少,则 ${$argn} 格式的源文件中 n 大于提供的参数数的任何标记都将保持其文本形式,并且不会替换为任何内容。 可以在此命令后面加上分号和其他命令;存在分号将终止参数列表。
当调试器执行脚本文件时,命令及其输出将显示在 “调试器命令”窗口中。 当到达脚本文件的末尾时,控件将返回给调试器。
下表总结了如何使用这些令牌。
标记 | 允许包含分号的文件名 | 允许串联用分号分隔的其他命令 | 压缩为单个命令块 | 允许脚本参数 |
---|---|---|---|---|
$< |
是 |
否 |
否 |
否 |
$>< |
是 |
否 |
是 |
否 |
$$< |
否 |
是 |
否 |
否 |
$$>< |
否 |
是 |
是 |
否 |
$$>a< |
否 |
是 |
是 |
是 |
$<、$><、$<和 $$>< 命令将回显脚本文件中包含的命令并显示这些命令的输出。 $$>a< 命令不会回显脚本文件中的命令,而只显示其输出。
脚本文件可以嵌套。 如果调试器在脚本文件中遇到其中一个标记,则执行将移动到新脚本文件,并在新脚本文件完成后返回到上一位置。 还可以以递归方式调用脚本。
在 WinDbg 中,可以将其他命令文本粘贴到“调试器命令”窗口中。
示例
以下示例演示如何将参数传递给脚本文件,Myfile.txt。 假定该文件包含以下文本:
.echo The first argument is ${$arg1}.
.echo The second argument is ${$arg2}.
然后,可以使用如下所示的命令将参数传递给此文件:
0:000> $$>a<myfile.txt myFirstArg mySecondArg
此命令的结果为:
The first argument is myFirstArg.
The second argument is mySecondArg.
下面是一个示例,说明在提供错误数量的参数时会发生什么情况。 假定文件 My Script.txt 包含以下文本:
.echo The first argument is ${$arg1}.
.echo The fifth argument is ${$arg5}.
.echo The fourth argument is ${$arg4}.
然后,以下以分号分隔的命令行生成输出:
0:000> $$>a< "c:\binl\my script.txt" "First one" Two "Three More" Four; recx
The first argument is First one.
The fifth argument is ${$arg5}.
The fourth argument is Four.
ecx=0021f4ac
在前面的示例中,文件名用引号引起来,因为它包含空格,而包含空格的参数也用引号引起来。 尽管脚本似乎需要第五个参数,但分号在第四个参数之后终止 $$>a< 命令。