Linux下的Truss like命令可监视和诊断系统调用

时间:2020-01-09 10:40:49  来源:igfitidea点击:

问题描述:Solaris和FreeBSD都提供truss命令来监视和调试系统调用。
我无法找到此命令或软件包。
如何在Linux下安装truss?

解决方法:truss是Solaris和FreeBSD中的调试实用程序,用于监视使用的系统调用。
它用于跟踪调用和调试许多问题。

Linux提供了strace命令。
默认情况下安装此命令。

strace是有用的诊断,说明和调试工具。
系统管理员,诊断人员和疑难解答人员将发现它对于解决程序的问题非常有价值,因为这些程序的来源不易获得,因为不需要重新编译它们就可以对其进行跟踪。
用于Linux的strace,添加了SVR4的truss命令的许多功能,并产生了一个在两个平台上均可使用的strace。

strace示例

针对/bin/bash运行strace并将其输出捕获到/tmp/output.txt中的文本文件中:

$ strace -o /tmp/output.txt /bin/bash
$ vi /tmp/output.txt
$ grep '^open' /tmp/output.txt

输出:

open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/libncurses.so.5", O_RDONLY)  = 3
open("/lib/tls/i686/cmov/libdl.so.2", O_RDONLY) = 3
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3
open("/dev/tty", O_RDWR|O_NONBLOCK|O_LARGEFILE) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
open("/usr/lib/locale/en_IN/LC_IDENTIFICATION", O_R
.....
....
.....
open("/etc/inputrc", O_RDONLY|O_LARGEFILE) = 3
open("/proc/sys/kernel/ngroups_max", O_RDONLY) = 3
$ grep '^connect' /tmp/output.txt
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)

要仅查看打开,关闭,读取和写入系统调用的痕迹,请执行:

$ strace -e trace=open,close,read,write df > output.txt

另一个不错的选择是ltrace,其用法与strace命令非常相似。