Solaris 动态跟踪指南

解释程序文件

与 shell 和实用程序(如 awk(1)perl(1))类似,可使用 dtrace(1M) 创建可执行的解释程序文件。解释程序文件的起始行格式如下所示:

#! pathname arg

其中,pathname 是解释程序的路径,arg 是单个可选参数。执行解释程序文件时,系统将调用指定的解释程序。如果解释程序文件中指定了 arg,则会将其作为参数传递到解释程序。解释程序文件本身的路径和执行该文件时指定的任何其他参数,随后将附加到解释程序参数列表。因此,将始终需要创建至少带有以下参数的 DTrace 解释程序文件:

#!/usr/sbin/dtrace -s

执行解释程序文件时,-s 选项的参数将成为解释程序文件本身的路径名。然后 dtrace 将读取、编译和执行此文件,作用与在 shell 中键入以下命令类似:


# dtrace -s interpreter-file

以下示例说明如何创建和执行 dtrace 解释程序文件。键入以下 D 源代码,并将其保存在名为 interp.d 的文件中:

#!/usr/sbin/dtrace -s
BEGIN
{
	trace("hello");
	exit(0);
}

interp.d 文件标记为可执行文件,并按以下方式执行该文件:


# chmod a+rx interp.d
# ./interp.d
dtrace: script './interp.d' matched 1 probe
CPU     ID                    FUNCTION:NAME
  1      1                           :BEGIN   hello
#

请记住,#! 指令必须是文件的前两个字符,中间或前面都不得有空格。D 编译器在处理解释程序文件时会自动忽略此行。

dtrace 使用 getopt(3C) 处理命令行选项,以便于将多个选项合并为单个解释程序参数。例如,要将 -q 选项添加到前面的示例中,可以将解释程序指令更改为:

#!/usr/sbin/dtrace -qs

如果指定多个选项字母,则必须始终用 -s 选项结束布尔选项列表,以便将下一个参数(解释程序文件名)作为与 -s 选项对应的参数进行处理。

如果需要在解释程序文件中指定多个要求参数的选项,则不能将所有选项和参数放入单个解释程序参数中。请改为使用 #pragma D option 指令语法设置这些选项。所有 dtrace 命令行选项都有可以使用的 #pragma 等效选项,如第 16 章中所示。