Linux strace 命令
Linux 提供了丰富的调试工具来对服务和应用程序进行故障排除。 Linux strace 命令是一个对开发人员有益的工具。 strace 命令是一种调试和故障排除工具,可拦截并记录进程发出和接收的系统调用。它提供了从头到尾的复杂的二进制序列。
在本教程中,我们将深入研究 Linux strace 命令并演示一些示例用法。
基本命令语法
strace 命令采用以下语法:
如何安装Linux strace命令
大多数现代 Linux 发行版默认都附带 strace 实用程序。但是,如果您的系统由于某种原因未安装 strace,请按照以下步骤进行安装。
在 Debian/Ubuntu 上
如果您运行的是基于 Debian/Ubuntu 的系统,请执行:
在 RHEL/CentOS 上
要验证 strace 是否已安装,您可以检查其版本,如下所示。
现在让我们看一些示例用法。
基本 strace 命令
在其最基本的格式中,strace 命令将跟踪并显示系统调用、参数(用方括号或括号括起来)以及可执行调用。
在下面的示例中,我们可以看到运行脚本 hello.sh, call 的参数被放在第一行的括号中。
在最后一行,您可以看到命令的退出状态,在本例中为 0。这意味着命令已成功执行,没有任何错误。退出代码 -1 表示执行期间遇到错误。
统计系统调用次数
如果您想获取系统调用的数量,请使用 -c 选项进行计数,如下所示。
从上面的输出中,您可以看到进行的系统调用的数量,包括进行的调用。
使用 strace 显示特定的系统调用
此外,您可以选择使用 -e 选项查看使用 strace 进行的系统调用的性质,后跟系统调用的性质。在所示的代码片段中,我们显示了写入和读取系统调用。
$ strace -e trace=read ./hello.sh
跟踪网络系统调用
您可以通过指定调用类型来限制 strace 显示网络系统调用。这里。 trace=network表示我们打算获取网络命令ping 8.8.8.8 -c 4的网络调用。
跟踪信号系统调用
对于与系统相关的调用,请使用以下命令中所示的参数。该命令打印 ping 8.8.8.8 -c 4 命令的信号调用者。
打印每个系统调用的时间戳
要提取每个系统调用的时间戳,请使用 -r 选项,如以下命令所示。
正如您所看到的,每个系统调用都会打印一个相对时间戳。捕获并记录连续系统调用之间的时间差。
显示进行系统调用所花费的时间
此外,您可以使用 -T 选项打印每个系统调用所花费的持续时间,如下所示。所花费的时间显示在最后一列中,如图所示。
显示每个系统调用的准确时间
要打印系统调用的实际或准确时间,请调用 -t 选项,如图所示。实时或挂钟时间打印在第一列中。
显示每次调用的指令指针
要打印每个系统调用的指令指针,请使用-i选项。
将系统调用的输出保存到文本文件
最后,strace 命令提供了将输出保存到文本文件的选项,如图所示。
这里,sample_output.txt是输出文件,而./hello.sh是我们正在跟踪其系统调用的命令。
包起来
Strace 命令是一个方便且功能强大的命令行实用程序,可帮助调试应用程序、命令和进程,特别是在您没有可用源代码的情况下。它是软件开发人员和系统管理员的首选工具。