我想跟踪应用程序调用的所有函数。在这里,我不是在寻找系统调用,而是主要寻找库 API。
我试过 truss,它没有显示我期望的一些库 API。solaris 中是否有任何工具,例如 linux 中的“ltrace”,可以跟踪库调用?dtrace 是否提供此信息?
有两种方法可以得到你想要的:
sotruss
实用sotruss
程序
索桁架
- 跟踪共享库过程调用
概要
/usr/bin/sotruss [-f] [-F bindfromlist] [-T bindtolist] [-o outputfile] executable [executable arguments...]
描述
sotruss
执行指定的命令并生成它执行的库调用的跟踪。跟踪输出的每一行报告在执行每个过程调用时动态对象之间发生的绑定。sotruss
通过过程链接表跟踪动态对象之间发生的所有过程调用,因此仅跟踪通过过程链接表绑定的那些过程调用。请参阅链接器和库指南选项
DTrace pid 提供程序
pid
提供者提供
pid
程序使您能够跟踪进程中的任何指令。与大多数其他提供程序不同,pid
探针是根据 D 程序中的探针描述按需创建的。因此,在dtrace -l
您自己启用它们之前,不会在输出中列出任何 pid 探测器。用户功能边界追踪
pid 提供者最简单的操作模式是类似于 fbt 提供者的用户空间。以下示例程序跟踪由单个函数生成的所有函数条目和返回。宏变量(命令行上的
$1
第一个操作数)是要跟踪的进程的进程 ID。宏变量(命令行上的$2
第二个操作数)是跟踪所有函数调用的函数的名称。...
另请参阅Brendan Gregg 的博客了解更多 DTrace 信息:
DTrace pid 提供程序
DTrace “pid” 提供程序允许您跟踪进程的内部执行,例如 Web 浏览器或数据库。它记录在原始 DTrace 指南和即将出版的 DTrace Book 中。它也是强大且不稳定的,并且是您最有可能在脚上开枪的提供者。
在这里,我将介绍 pid 提供程序并讨论探针名称的稳定性,包括提示和陷阱。这对于任何使用 DTrace 的人来说都是有用的背景知识,包括运行其他人的基于 pid 提供程序的 DTrace 脚本。如需进一步阅读,请参阅我的 pid 提供程序帖子的完整列表。
虽然 truss 默认只显示系统调用,但如果您使用-u
请求选项,它也可以显示库函数调用。 -u ::
将显示所有函数调用,或者您可以提供其他参数来过滤它显示的参数。