Solaris 动态跟踪指南

字符串表示

在 DTrace 中,字符串表示为由空字节(即,值为零的字节,通常写为 '\0')结尾的字符数组。字符串的可见部分的长度是可变的,具体取决于空字节的位置,但是 DTrace 将以大小固定的数组存储每个字符串,以便每个探测器跟踪一致的数据量。字符串的长度不能超过此预定义的字符串限制,但可以在 D 程序中或在 dtrace 命令行上通过调整 strsize 选项来修改该限制。有关可调整的 DTrace 选项的更多信息,请参见第 16 章。缺省字符串限制为 256 字节。

D 语言提供了显式 string 类型,而不是使用 char * 类型来引用字符串。string 类型与 char * 等效,因为它是字符序列的地址,但在将 D 编译器和 D 函数(如 trace())应用于 string 类型的表达式时,可提供增强功能。例如,在需要跟踪字符串的实际字节数时,字符串类型消除了 char * 类型的不确定性。在 D 语句中:

trace(s);

如果 s 属于类型 char *,则 DTrace 将跟踪指针 s 的值(即,跟踪一个整数地址值)。在 D 语句中:

trace(*s);

根据 * 运算符的定义,D 编译器将取消对指针 s 的引用并跟踪该位置的单个字符。对于处理设计用于引用单个字符或由字节大小整数(非字符串且不以空字节结尾)构成的数组的字符指针,这些行为很重要。在 D 语句中:

trace(s);

如果 s 属于 string 类型,则该 string 类型指示 D 编译器,需要 DTrace 跟踪字符地址存储在变量 s 中的以空字符结尾的字符串。也可以对 string 类型的表达式执行词法比较,如字符串比较中所述。