Solaris 动态跟踪指南

转换格式

每个转换字符序列都将导致提取零个或多个参数。如果没有为格式字符串提供足够的参数,或者格式字符串已用完但仍有参数剩余,则 D 编译器将发出相应的错误消息。如果指定了未定义的转换格式,则 D 编译器将发出相应的错误消息。转换字符序列为:

a

指针或 uintptr_t 参数将列显为如下形式的内核符号名:module `symbol-name 加上十六进制字节偏移(可选)。如果该值不在已知内核符号定义的范围内,则该值将列显为十六进制整数。

c

charshortint 参数将列显为 ASCII 字符。

C

如果字符为可列显的 ASCII 字符,则 charshortint 参数将列显为 ASCII 字符。如果该字符不是可列显字符,则将使用表 2–5 中说明的对应转义序列将其列显。

d

charshortintlonglong long 参数将列显为十进制(以 10 为基数)整数。如果参数类型为 signed,则将列显为带符号的值。如果参数类型为 unsigned,则将列显为无符号值。此转换与 i 具有相同的含义。

e, E

floatdoublelong double 参数将转换为 [-] d.ddddd 样式,其中基数字符前有一位,基数字符后的位数等于精度。如果参数不为零,则基数字符也不为零。如果未指定精度,则缺省精度值为 6。如果精度为 0 并且未指定 # 标志,则不会显示任何基数字符。E 转换格式将生成一个数字,该数字将使用 E 而不是 e 来引入指数。指数总是至少包含两位数。该值将向上舍入为相应的位数。

f

floatdoublelong double 参数将转换为 [-] ddd.ddd 样式,其中基数字符之后的位数等于指定的精度。如果未指定精度,则缺省精度值为 6。如果精度为 0 并且未指定 # 标志,则不会显示任何基数字符。如果显示基数字符,则它之前至少会显示一位数字。该值将向上舍入为相应的位数。

g, G

floatdoublelong double 参数将列显为 fe 样式(如果使用 G 转换字符则为 E 样式),并且使用指定有效数字位数的精度。如果显式精度为 0,则会将其视为 1。使用的样式取决于转换的值:仅当转换生成的指数小于 -4 或大于等于精度时, 才会使用 e(或 E)样式。结果的小数部分中的结尾零将删除。仅当基数字符后跟数字时,才会显示基数字符。如果指定了 # 标志,则不会从结果中删除结尾零。

i

charshortintlonglong long 参数将列显为十进制(以 10 为基数)整数。如果参数类型为 signed,则将列显为带符号的值。如果参数类型为 unsigned,则将列显为无符号值。此转换与 d 具有相同的含义。

o

charshortintlonglong long 参数将列显为无符号的八进制(以 8 为基数)整数。signed 类型或 unsigned 类型的参数可用于与此转换。如果指定了 # 标志,则在需要将结果的第一位强制为零时,结果的精度将增加。

p

指针或 uintptr_t 参数将列显为十六进制(以 16 为基数)整数。D 接受任何类型的指针参数。如果指定了 # 标志,则将在非零结果的开头加上 0x

s

参数必须为 char 数组或 string。将一直读取数组或 string 中的字节,直到达到终止空字符或数据的结尾,并将其解释和列显为 ASCII 字符。如果未指定精度,则会将其视为无穷的,所以将列显所有字符,直到达到第一个空字符。如果指定了精度,则仅会列显在对应屏幕列数中显示的那一部分字符数组。如果要格式化 char * 类型的参数,则应将该参数强制转换为 string,或者使用 D stringof 运算符为前缀,以指示 DTrace 应跟踪的字符串字节数并设置这些字节的格式。

S

参数必须为 char 数组或 string。参数将按类似 %s 转换的方式进行处理,但不可列显的所有 ASCII 字符都将替换为表 2–5 中说明的对应转义序列。

u

charshortintlonglong long 参数将列显为无符号十进制(以 10 为基数)整数。signed 类型或 unsigned 类型的参数可用于此转换,并且结果都将格式化为 unsigned

wc

int 参数将转换为宽字符 (wchar_t) 并且将列显生成的宽字符。

ws

参数必须为 wchar_t 数组。会一直读取数组中的字节,直到达到终止空字符或数据结尾,并将其解释和列显为宽字符。如果未指定精度,则会将其视为是无穷的,所以将列显所有宽字符,直到达到第一个空字符。如果指定了精度,则仅会列显在对应屏幕列数中显示的那一部分宽字符数组。

x, X

charshortintlonglong long 参数将列显为无符号十六进制(以 16 为基数)整数。signed 类型或 unsigned 类型的参数可用于与此转换。如果使用 x 形式的转换,则将使用字母数字 abcdef。如果使用 X 形式的转换,则将使用字母数字 ABCDEF。如果指定了 # 标志,则将在非零结果的开头加上 0x(对于 %x)或 0X(对于 %X)。

Y

uint64_t 参数将解释为自 1970 年 1 月 1 日 00:00 世界标准时间以来的纳秒数,并且按以下 cftime(3C) 形式列显:"%Y %a %b %e %T %Z"。自 1970 年 1 月 1 日 00:00 世界标准时间以来的当前纳秒数将通过 walltimestamp 变量提供。

%

列显文字 % 字符。不会转换任何参数。完整的转换规范必须为 %%