生成跟踪记录

用于生成系统跟踪 (和 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 值。

注: 过时的 12 位 hookid 值将使用最左边的三个十六进制数字,而 4th 位将为零。

使用 trcgenk 内核服务时,buffer 参数是指向所跟踪数据长度字节数的指针,最多为 4096 字节。 buffer 参数可以是外部变量 (例如内核或应用程序指向固定数据的指针) ,也可以是脚本变量 (例如 Vue 字符串或结构实例)。 “隐式类型”规范是其速记形式。

注: trcgenk 内核服务仅跟踪到系统跟踪,而不跟踪到 LMT 跟踪缓冲区。

您可以使用非零通道号,但必须确保已为跟踪启用指定的通道。 出于此目的,可以将启动相关跟踪的 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 字符串的自由,但在为 "非类型化" 参数指定值时要小心,因为编译器将接受该参数的任何类型。

注:Vue 语言中确实没有 "un类型化" 变量规范。 它仅用作速记符号。