trcfmt 文件格式

用途

存储跟踪模板。

描述

格式化跟踪报告的 特尔茨尔普特 命令使用跟踪模板来确定应该如何格式化包含在跟踪条目中的数据。 所有跟踪模板都存储在主模板文件 /etc/trcfmt中。 跟踪模板会标识跟踪挂钩标识,版本和发行版号,缩进级别,事件标签以及数据描述字段。 数据描述字段包含跟踪条目数据的格式化信息,并且可以根据需要进行多次重复,以格式化跟踪条目中的所有跟踪数据。

正在修改此文件

特尔克姆特 文件仅应使用 特鲁普达特 命令进行修改。 值小于 010 的跟踪挂钩供跟踪设施在内部使用。 如果这些挂钩发生更改,那么跟踪 (尤其是 特尔茨尔普特) 的性能将不可预测。

跟踪条目

为每个跟踪事件记录的数据由以下元素组成,按以下顺序排列:
  • 包含跟踪挂钩标识以及挂钩类型或大小的挂钩字。
  • 跟踪数据的可变词数。
  • 时间戳记。

挂钩字的组织取决于生成该挂钩字的应用程序是 32 位应用程序还是 64 位应用程序。

32 位跟踪挂钩字:

描述
HookWord HookWord 的前两个字节包含 HookIDHookType。 后两个字节的内容取决于 HookType的值。
HookID HookID 在跟踪条目中表示为 3 十六进制数字。 对于用户程序,挂钩标识可能是范围从以下值开始的值:0x0100x0FF钩子ID 在文件 /usr/include/sys/trchkid.h 中定义。
HookType HookType 是 4 位值,用于标识跟踪条目的其余部分的格式。 在记录跟踪条目时指定 HookType
跟踪条目格式
1
跟踪条目仅由 HookWord组成。 HookWord 的第三个和第四个字节包含跟踪数据。 使用 特尔乔克乌特尔乔克 子例程记录此类型的跟踪条目。
2
跟踪条目由 HookWord 和一个附加的跟踪数据字组成。 HookWord 的第三个和第四个字节包含跟踪数据。 使用 特尔乔克乌特尔乔克 子例程记录此类型的跟踪条目。
6
跟踪条目由 HookWord 和最多五个额外的跟踪数据字组成。 HookWord 的第三个和第四个字节包含跟踪数据。 使用 特尔乔克乌特尔乔克 子例程记录此类型的跟踪条目。
8
跟踪条目由 HookWord 和后跟可变字节数的跟踪数据和时间戳记的数据字组成。 HookWord 的第三个和第四个字节包含跟踪字后面的跟踪数据的字节数。 此类型的跟踪条目是使用 特尔金特 子例程或 特尔根克特 内核服务记录的。
9
跟踪条目由 HookWord 和时间戳记组成。 HookWord 的第三个和第四个字节包含跟踪数据。 使用 特尔乔克乌特尔乔克 子例程记录此类型的跟踪条目。
A
跟踪条目由钩子词、一个额外的跟踪数据词以及时间戳组成。 HookWord 的第三个和第四个字节包含跟踪数据。 使用 特尔乔克乌特尔乔克 子例程记录此类型的跟踪条目。
E
跟踪条目由钩词、最多五个附加的跟踪数据词以及时间戳组成。 HookWord 的第三个和第四个字节包含跟踪数据。 使用 特尔乔克乌特尔乔克 子例程记录此类型的跟踪条目。
0
跟踪条目由 HookWord 和后跟可变字节数的跟踪数据的数据字组成。 HookWord 的第三个和第四个字节包含跟踪字后面的跟踪数据的字节数。 此类型的跟踪条目是使用 特尔琴 子例程或 特尔根克 内核服务记录的。

64 位跟踪挂钩字:

描述
HookWord HookWord 的前两个字节包含内部跟踪元数据。 后两个字节包含跟踪条目的大小减去挂钩字和任何内部数据 (例如,时间戳记或 CPU 标识)。 第三个两个字节包含可以使用完整的两个字节的挂钩标识。 在该表单的 32 位应用程序中有效的 12 位挂钩标识0xhhh等效于 16 位挂钩标识0xhhh0在 64 位应用程序中。 最后两个字节表示子 hook 标识。
HookID HookID 在跟踪条目中表示为三个或四个十六进制数字。 四位挂钩标识仅在 AIX® 6.1 和更高发行版中有效。 对于早于 AIX 6.1的发行版,挂钩标识可以是范围内的值0x0100xFFF。对于 AIX 6.1 和更高发行版中的用户程序,挂钩标识可以是范围内的值0x01000xFFFF但是,如果第一个十六进制数字为零,那么最后一个数字也必须为零。 例如, HookID0AA0是合法的但是0AAA不是。 许多 AIX 系统挂钩标识是在 /usr/include/sys/trchkid.h 文件中定义的。

data pointer(数据指针)

DATA POINTER 是指向跟踪条目中的当前位置的指针。 特尔茨尔普特 会更改 DATA POINTER ,因为它会解释模板并设置跟踪条目的格式。 DATA POINTER 的初始位置是 HookTypesHookWord 的第三个字节 1, 9, 2, A, 6,E以及 HookTypesHookWord 之后的第一个字节 08.

跟踪数据格式化

缩进级别

格式化的跟踪数据在对应于跟踪事件的源的列中对齐。 这在每个模板中使用 L=X 描述符进行标识。 L=X 命令的可能的值如下所示:

描述
L = APPL 输出 APPL (应用程序) 列中的跟踪数据。
L=SVC 在 SVC (系统调用) 列中输出跟踪数据。
L = KERN 输出 KERN (内核) 列中的跟踪数据。
L = INT 输出 INT (中断) 列中的跟踪数据。

continuation character(连续字符)

必须使用行末尾的 \ (反斜杠) 来继续下一行上的模板。

标签或文本字符串

单个字符串 (或标签) 可以由任意数量的空格或制表符分隔,但在跟踪报告上,除非其他格式结构生效,否则所有多余的空格都将压缩为一个空格。 标签用双引号 ("") 引起来。

描述
\n 输出到一个新行。 新行上的数据是根据在 INDING LEVEL 中设置的值左对齐的。
\t 插入选项卡。 使用固定制表符分隔 (8 个) 将制表符展开为空格。

格式代码

DATA POINTER 位置格式代码

描述
G m.n 将 DATA POINTER 设置为 byte.bit 位置 m.n
O m.n 通过 m.n byte.bits推进 DATA POINTER。
M 减少 DATA POINTER (以 M 字节为单位)。

输出格式代码

描述
B m.n 以二进制格式发送输出,其中 M 是数据长度 (以字节为单位) , N 是长度 (以位为单位)。 与其他打印格式代码不同, DATA POINTER 可以是位对齐的,并且不会向上舍入到下一个字节边界。
D2, D4 , D8 将数据转换为带符号十进制格式。 数据长度为 2 个字节, 4 个字节或 8 个字节,并且 DATA POINTER 以相同的字节数进行高级。
F4 将数据转换为 C 类型 "float" 浮点格式。 数据长度为 4 个字节,并且 DATA 4 以 4 个字节为单位进行高级。
F8 将数据转换为 C 类型 "双精度" 浮点格式。 数据的长度为 8 个字节,而 DATA POINTER 的 8 为 8 个字节。
S1, S2, S4 对 ASCII 字符串进行左对齐。 字符串的长度以数据的第一个字节 (半字,字) 为单位。 该字符串的长度不包括此字节。
T4 将接下来的 4 个字节作为日期和时间字符串输出。
U2, U4 , U8 将数据转换为无符号十进制格式。 数据长度为 2 个字节, 4 个字节或 8 个字节,并且 DATA POINTER 以相同的字节数进行高级。
XM 将数据转换为十六进制格式。 DATA POINTER 的高级值为 M 个字节。

解释器格式代码

描述
E1, E2, E4 将下一个字节 (Half_word , word) 输出为 "errno" 值,将数字代码替换为 /usr/include/sys/errno.h 文件中相应的 #define 名称。 DATA POINTER 的高级 1 4 2 或 4 个字节。
P4 使用下一个词作为进程标识,并输出具有该进程标识的可执行文件的路径名。 进程标识及其路径名由 跟踪 命令在跟踪开始时获取,并由 特尔茨尔普特 命令通过特殊 EXEC tracehook 获取。 DATA POINTER 的高级值为 4 个字节。

Switch 语句

SWITCH 语句是后跟逗号的格式代码。 SWITCH 语句的每个 CASE 条目由以下内容组成:

  1. 一个类型(通常是数值类型)与格式代码相对应的 'MatchValue' A。
  2. 简单的 "字符串 ' " 或以花括号限定的新 "描述符 ' 。 描述符是由格式代码,字符串,开关和循环组成的序列。
  3. 逗号定界符。

该开关由不带逗号定界符的 CASE 条目终止。 选择 CASE 条目作为其 MatchValue 等于扩展格式代码的第一个条目。 特殊匹配值 "\ *" 是通配符,与任何内容匹配。

DATA POINTER 以格式代码为高级。

循环语句

循环用来输出数据的二进制缓冲区; 因此, LOOP 的描述符通常为 X0 或 X1。 循环的语法是 LOOP format_code {descriptor}。 描述符会执行 N 次,其中 N 是格式代码的数字值。

DATA POINTER 通过格式代码和描述符的操作来进行高级。

宏是像 shell 变量一样工作的临时变量。 将使用以下语法为其分配值:

{{ $xxx = EXPR }}

其中 EXPR 是格式代码,宏和常量的组合。 运算符 + (加法) ,-(减法) ,/(除法) ,和 * (乘法)。 在宏中是允许的。

预定义的宏

宏名称 描述
$基点指针 将起始偏移量标记为事件。 缺省值为0但实际偏移量是 DATA POINTER 和 BASE_POINTER 的值的总和。 当事件的各个部分具有相同的结构并且可以由相同的模板打印,但可能有不同的起始点进入事件时,它将与模板子例程配合使用。
$BREAK 结束当前跟踪事件。
$D1 - $D5 数据字 1 到数据字 5。 未移动 DATA POINTER。
$DATAPINTER 激活 DATA POINTER。 它可以像其他用户宏一样进行设置和操作。
缺省值 请使用 DEFAULT 模板 008。
$ERROR 将错误消息输出到报告,并在处理当前描述符后从模板中退出。 该错误消息提供日志文件,该事件的开始的日志文件偏移量以及跟踪标识。
$EXECPATH 输出当前进程的可执行文件的路径名。
HB 美元 特尔琴 子例程可变长度缓冲区中的字节数。 这也就等于 16 位挂钩数据。
$HD 挂钩数据 (低于 16 位)。
$HT 允许使用同一模板进行多个不同的 特尔乔克 子例程调用。 $HT 宏的返回值如下所示:
描述
1
hook 字
2
钩字和一个附加字
6
挂钩字和最多五个数据字
9
挂钩字和时间戳记
A
挂钩字,一个数据字和一个时间戳记
E
挂钩字,最多五个数据字,以及一个时间戳记。

未更改 DATA POINTER。

$L1-$L2 长整型 (64 位) 数据字 1 或 2。 例如, $L1 是对 $d1$d2的连接。 64 位值很可能是使用 TRCHK64L1TRCHK64L2 宏跟踪的。 对数据指针没有更改。
$LOGID0 事件开始时的当前日志文件偏移量。
$LOGIDX 此事件的当前日志文件偏移量。
$日志文件 返回正在处理的日志文件的名称。
$MCR0, $MCR1和 $MCRA 机器 MCR 寄存器 0,1 0 A。
$PID 输出当前进程标识。
$PMC1 - $PMC8 机器 PMC 注册 1 8 8。
$PURR 机器 PURR 寄存器。
$RELLINENO 此事件的行号。 第一 1 从 1 开始。
$跳过 结束当前跟踪事件而不进行打印。
$STOP 立即结束跟踪报告。
$SVC 将当前系统调用的名称输出。
$TID 输出当前内核线程标识。
$TRACEID 将返回当前事件的跟踪标识。

内置宏

内置宏包括:

描述
缓冲区文件名 (bp) 按 buf struct 查找文件名。
fdinstall () 将 lookuppn 中的文件描述符和当前 v 节点安装为此进程标识的 file_descriptor/v 节点对。
fdtofilename () 查找给定文件描述符的文件名以获取此进程标识。 如果找不到文件名,那么不会输出任何内容。
Flih () 推进 "中断深度"。
lookuppninstall1 使用 特尔茨尔普特 命令将文件名作为当前文件进行安装。
lookuppninstall2 将 v-node 安装为当前 v-node。 它还会将 current_v-node/current_file 安装为 v-node/filename par。
pfsrdwrinstall1 (vp) 将此进程的当前 v 节点设置为 vp。
pfsrdwrinstall2 (VA.S,计数) 如果发生缺页故障,那么创建要填充为 VMM 挂钩的虚拟地址 /v 节点结构。
resume () 减少了中断深度。
setdelim () 禁止字符之间存在空格。
slihlookup () 查找第二级中断处理程序。
文件名后缀 (sid) 按段标识查找文件名。
vmbufindland () 通过虚拟 page/sid 查找文件的 v-node ,并将 v-node 和 buf 作为 v-node/bp 对进行安装。 这将由 lvm 在关闭时使用。
v-nodetofename (vp) 按 v-node 查找文件名。
vpagetofilename (vpage , sid) 按 vpage 和 segment ID 查找文件名。

文件

描述
/etc/trcfmt 存储跟踪模板。
/usr/include/sys/trchkid.h 定义挂钩标识。
/usr/include/sys/trcmacros.h 定义跟踪宏。