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命令非常相似。