内置类变量
除了特殊内置变量 __arg1 到 __arg32 和 __rv。 Vue 还定义了一组通用内置变量。 在本节中更详细地讨论了这些通用内置变量,在有关的探针管理器节中讨论了某些特定于探针管理器的内置变量。 内置类变量是函数,但被 ProbeVue视为变量。 因此,可在 Vue 子句的谓词部分中使用这些内置变量。
Vue中支持以下内置变量:
- __tid
- 被跟踪线程的线程标识。
- __pid
- 被跟踪线程的进程标识。
- __ppid
- 被跟踪线程的父进程标识。
- __pgid
- 被跟踪线程的进程组标识。
- __pname
- 被跟踪线程的进程名称。
- __uid, __euid
- 被跟踪线程的真实和有效的用户标识。
- __trcid
- 跟踪进程的进程标识(即 probevue 命令的进程标识)
- __errno
- 所跟踪线程的当前 errno 值。
- __kernelmode
- 当前可执行方式:1(内核方式)或 0(用户方式)。
- __r3, ..., __r10
- 通用寄存器值(用于函数参数或返回值)。
- __curthread
- 当前线程。
- __curproc
- 当前进程。
- __ublock
- 当前进程的用户区域。
- __mst
- 内置变量,用于访问当前线程的机器状态保存区域 (MST) 的硬件寄存器内容。
- __stat
- 内置变量,用于提供对各种 AIX® 内核组件的系统统计信息的访问。
以下脚本是使用内置变量的示例:
@@syscall:*:read:entry
{
printf("Thread ID:%d, Process ID:%d, Parent Process ID:%d\n",
__tid, __pid, __ppid);
printf("Process Group ID: %d\n", __pgid);
printf("Process name = %s\n", __pname);
printf("Real UID=%d, Effective UID=%d\n", __uid, __euid);S
printf("probevue command process ID = %d\n", __trcid);
printf("Errno = %d\n", __errno);
printf("Mode = %s\n", __kernelmode == 1 ? "kernel" : "user");
printf("Current values of GPRs: r3=0x%016llx, r4=0x%016llx, r5=0x%016llx\n",
__r3, __r4, __r5);
printf(" r6=0x%016llx, r7=0x%016llx, r8=0x%016llx\n",
__r6, __r7, __r8);
printf(" r9=0x%016llx, r10=0x%016llx\n",
__r9, __r10);
}