内置类变量

除了特殊内置变量 __arg1__arg32__rvVue 还定义了一组通用内置变量。 在本节中更详细地讨论了这些通用内置变量,在有关的探针管理器节中讨论了某些特定于探针管理器的内置变量。 内置类变量是函数,但被 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);
	}