生成跟踪记录
用于生成系统跟踪 (和 LMT 跟踪) 记录的 Vue 函数的语法类似于 Vue 函数调用的内核接口。
存在以下限制:
- 如果未启动系统跟踪,或系统跟踪未捕获 hookid 值,那么这些操作不会生成系统跟踪记录(仍将尝试 TRCHKLx 跟踪公共缓冲区的 LMT 跟踪,但可能未禁用 LMT)。
- 不能从 @@systrace Vue 子句中生成跟踪记录。 假定已启用 LMT,那么在此情况下调用跟踪函数将仅生成 TRCHKLx 跟踪的 LMT 公共缓冲区跟踪记录。
- 您不能探测这些ProbeVue 生成的跟踪事件;只能探测内核和应用程序生成的跟踪事件。
- 您必须具有特权,为 root 用户或具有 aix.ras.probevue.rase 权限。
存在以下用于写入系统跟踪记录的 Vue 函数。 所有数据字的类型均为 long long 整数:
- TRCHKL0(hookID)
- 不带数据字的跟踪。
- TRCHKL1(hookID, D1)
- 带有 1 个数据字的跟踪。
- TRCHKL2(hookID, D1,D2)
- 带有 2 个数据字的跟踪。
- TRCHKL3(hookID, D1,D2,D3)
- 带有 3 个数据字的跟踪。
- TRCHKL4(hookID, D1,D2,D3,D4)
- 带有 4 个数据字的跟踪。
- TRCHKL5(hookID, D1,D2,D3,D4,D5)
- 带有 5 个数据字的跟踪。
- void trcgenk(int channel, int hook_ID, unsigned long long data_word, int length, untyped buffer)
- 跟踪缓冲区。
这些跟踪函数总是会将时间戳记追加到事件数据。 这些函数的 hookid 参数的格式为 0xhhhh0000。 这并不表示 hookid 值必须为常量,而只是表示如何形成 hookid 值。
使用 trcgenk 内核服务时,buffer 参数是指向所跟踪数据长度字节数的指针,最多为 4096 字节。 buffer 参数可以是外部变量 (例如内核或应用程序指向固定数据的指针) ,也可以是脚本变量 (例如 Vue 字符串或结构实例)。 “隐式类型”规范是其速记形式。
您可以使用非零通道号,但必须确保已为跟踪启用指定的通道。 出于此目的,可以将启动相关跟踪的 trace 命令的返回值传递到 Vue 脚本。 使用禁用的通道将导致不进行跟踪。
这些跟踪函数不会返回值。
停止跟踪
要在发生所需事件后尽快冻结系统跟踪,可以在 Vue 脚本中使用 void trcoff() 。 此函数会立即禁用通道零的跟踪。 您仍必须使用ProbeVue 外部的trcstop命令,以正常方式停止跟踪,这样才能正常完成跟踪处理。
您可以立即停止 LMT 和组件跟踪,以便进行中的跟踪不会回绕感兴趣的数据。 由于没有等效的命令行可用于重新启动这些跟踪,因此需要相应的恢复函数。 有以下新的 Vue 函数:
void mtrcsuspend()
void ctsuspend()
void mtrcresume()
void ctresume()
ctsuspend 例程将停止所有组件跟踪。 无法使用此例程来选择性地停止某个组件的跟踪。 它仅停止组件跟踪,而不停止 CT_HOOKx 宏可能已请求的任何其他跟踪,如系统和 LMT 跟踪记录。
必须谨慎使用这些跟踪控制函数,因为不会对将受影响的内核跟踪代码进行串行化。 您必须以手动方式确保一次将只有一个脚本或命令影响跟踪。
停止系统
您可以终止系统并通过以下例程采用完整的转储:
void abend(long long code, long long data_word, ...)
此例程类似于 abend 内核服务,但是此处最多仅接受 7 个数据参数(它们将装入到寄存器 r3 到 r10 中)。
隐式类型参数
在要遵循的函数原型中,等效内核函数的某些参数的类型比较模糊。 Vue 编译器通常对传递到 Vue 函数的所有参数执行类型检查,但指定为具有 "untype" 类型的参数免于类型检查。 例如,当直接在内核中使用这些内核服务时,可选字符串可能会作为 NULL 传递,但如果 Vue 函数定义为采用字符串类型的参数,那么不能接受 NULL。 为了避免不得不改为传递空字符串和让 Vue 函数采用与以下内核接口相同的参数的不便,这些函数被定义为采用非类型化参数。 非类型化参数为我们提供传递 NULL 而不是真实 Vue 字符串的自由,但在为 "非类型化" 参数指定值时要小心,因为编译器将接受该参数的任何类型。