收集器插入各种系统库的函数,以收集跟踪数据并确保数据收集的完整性。下面的列表描述了收集器插入库函数调用的情况。
收集同步等待跟踪数据。收集器插入 Solaris 线程库 libthread.so(在 Solaris 9 OS 上)和 Solaris C 库 libc.so(在 Solaris 10 OS 上)中的函数。
收集堆跟踪数据。收集器插入函数 malloc、realloc、memalign 和 free。这些函数的版本可以在 C 标准库 libc.so 和其他库(如 libmalloc.so 和 libmtmalloc.so)中找到。
确保时钟数据的完整性。收集器插入 setitimer 并阻止程序使用分析计时器。
确保硬件计数器数据的完整性。收集器插入硬件计数器库 libcpc.so 中的函数并阻止程序使用计数器。程序对该库中函数的调用的返回值是 -1。
针对后续进程启用数据收集。收集器插入函数 fork(2)、fork1(2)、vfork(2)、fork(3F)、system(3C)、system(3F)、sh(3F)、popen(3C) 和 exec(2) 及其变体。对 vfork 的调用已在内部被替换为对 fork1 的调用。这些插入仅适用于 collect 命令。
保证由收集器处理 SIGPROF 和 SIGEMT 信号。收集器插入 sigaction 以确保其信号处理程序是这些信号的主信号处理程序。
在某些情况下,插入不会成功:
将程序与任何包含被插入的函数的库进行静态链接。
将 dbx 附加到运行中的未预装入收集器库的应用程序。
动态装入其中一个库并通过只在该库中搜索来解析符号。
收集器插入失败可能会导致性能数据丢失或无效。