Solaris 动态跟踪指南

第 30 章 pid 提供器

使用 pid 提供器,可跟踪用户进程中函数的进入和返回,以及按绝对地址或函数偏移量指定的任何指令。不启用探测器时,pid 提供器不会产生探测影响。启用探测器后,探测器将仅对其跟踪的那些进程产生探测影响。


注 –

当编译器内嵌函数时,pid 提供器的探测器将不触发。要避免在编译时内嵌函数,请查阅编译器的文档。



注 –

pid 提供器在探测使用函数指针调用子函数的函数时,其行为不可预测。可将探测器显式放置在函数的入口和返回地址,以分析此类函数。


命名 pid 探测器

实际上,pid 定义了一个提供器。每个进程都可能具有独立关联的 pid 提供器。例如,ID 为 123 的进程将使用 pid123 提供器进行跟踪。对于来自这些提供器的其中之一的探测器,探测器说明的模块部分将引用对应进程的地址空间中装入的对象。以下示例使用 mdb(1) 显示对象列表:


$ mdb -p 1234
Loading modules: [ ld.so.1 libc.so.1 ]
> ::objects
    BASE    LIMIT     SIZE NAME
   10000    34000    24000 /usr/bin/csh
ff3c0000 ff3e8000    28000 /lib/ld.so.1
ff350000 ff37a000    2a000 /lib/libcurses.so.1
ff200000 ff2be000    be000 /lib/libc.so.1
ff3a0000 ff3a2000     2000 /lib/libdl.so.1
ff320000 ff324000     4000 /platform/sun4u/lib/libc_psr.so.1

在探测器说明中,将根据文件名而不是其完整路径名来命名对象。此外,也可以省略 .1so.1 后缀。以下所有示例命名的探测器都相同:

pid123:libc.so.1:strcpy:entry
pid123:libc.so:strcpy:entry
pid123:libc:strcpy:entry

第一个示例是探测器的实际名称。其他示例则是为方便而使用的别名,在内部,该别名将被替换为完整的装入对象名称。

对于可执行文件的装入对象,可以使用别名 a.out。以下两种探测器描述指定了同一探测器:

pid123:csh:main:return
pid123:a.out:main:return

与所有固定 DTrace 探测器一样,探测器描述的函数字段指定模块字段中的函数。用户应用程序二进制文件的同一个函数可能有多个名称。例如,mutex_lock 可能为 libc.so.1 中函数 pthread_mutex_lock 的备选名称。DTrace 为这样的函数选择一个标准名称,并在内部使用该名称。以下示例说明了 DTrace 在内部如何将模块和函数名称重新映射为标准形式:


# dtrace -q -n pid101267:libc:mutex_lock:entry'{ \
    printf("%s:%s:%s:%s\n", probeprov, probemod, probefunc, probename); }'
pid101267:libc.so.1:pthread_mutex_lock:entry
^C

这种自动重命名意味着,您启用的探测器名称可能与实际启用的探测器名称略有不同。在运行同一个 Solaris 发行版的系统上,每次运行 Dtrace 时,标准名称总是保持一致。

有关如何有效使用 pid 提供器的示例,请参见第 33 章

函数边界探测器

使用 pid 提供器,可以对用户程序中函数的进入和返回进行跟踪,就像 FBT 提供器为内核提供该功能一样。为适应用户进程,可对本手册中使用 FBT 提供器跟踪内核函数调用的大多数示例略作修改。

entry 探测器

调用被跟踪函数时将触发 entry 探测器。entry 探测器的参数为被跟踪函数的参数的值。

return 探测器

被跟踪函数返回或对另一个函数进行尾部调用时,将触发 return 探测器。arg0 的值是函数中返回指令的偏移;arg1 存储返回值。


注 –

使用 argN 会将原始的未经过滤的值返回为类型 int64_tpid 提供器不支持 args[N ] 格式。


函数偏移探测器

使用 pid 提供器,可以跟踪函数中的任何指令。例如,要跟踪函数 main() 4 个字节处的指令,可以使用与以下示例类似的命令:

pid123:a.out:main:4

每次程序执行地址 main+4 处的指令时,将激活此探测器。未定义偏移探测器参数。uregs[] 数组可帮助您检查这些探测器位置的进程状态。有关更多信息,请参见uregs[] 数组

稳定性

pid 提供器使用 DTrace 的稳定性机制描述其稳定性,如下表所示。有关稳定性机制的更多信息,请参见第 39 章

元素 

名称稳定性 

数据稳定性 

相关性类 

提供器 

发展中 

发展中 

ISA

模块 

专用 

专用 

未知 

功能 

专用 

专用 

未知 

名称 

发展中 

发展中 

ISA

参数 

专用 

专用 

未知