📜  Linux 中的 strace 命令及示例

📅  最后修改于: 2022-05-13 01:56:18.618000             🧑  作者: Mango

Linux 中的 strace 命令及示例

Strace是 Linux 最强大的进程监控、诊断、指导工具之一。它还充当帮助解决问题的调试工具。它主要用于以下目的:

  • 调试程序
  • 故障排除程序
  • 进程拦截系统调用
  • 按进程记录系统调用
  • 进程收到的信号
  • 跟踪正在运行的进程

如果源代码不可用,则使用 strace 分析程序如何与系统交互以调试程序的执行。它返回每个系统调用的名称以及括在括号中的参数及其返回值到标准错误。

安装 strace 进程监控工具

要安装 strace 工具,请根据您的 Linux 发行版使用以下命令。

如果是 Debian/Ubuntu

$sudo apt install strace

在 CentOS/RedHat 的情况下

$yum install strace

使用 Strace 过程监控工具

1.获取系统调用、参数和调用结果。

$strace ls

注意:这里的“ls”是要跟踪其系统调用的命令。

Linux 中的 strace 命令

Linux 中的 strace 命令

可以看出,它显示了系统调用、参数(括号中)和调用 ls 命令的结果。并且+++ 以 0 +++ 退出,在最后一行中指出退出状态为 0,这意味着没有错误。如果发生错误,退出代码为 -1。

2.统计系统调用次数。

$strace -c ls

注意:这里的“ls”是要跟踪其系统调用的命令。

统计系统调用次数

可以看出,它显示了每个系统调用的次数并打印了总数,甚至显示了每次调用所花费的次数和时间。

3.跟踪特定或特定的系统调用。

$strace -e trace=write ls

注意:这里的“ls”是要跟踪其系统调用的命令。并且要跟踪的系统调用的名称是write

跟踪特定或特定的系统调用

可以看出,它只显示了写系统调用的名称、参数和结果。

4.跟踪网络相关的系统调用

$strace -e trace=network nc -v -n 127.0.0.1 801

注意:这里的“nc -v -n 127.0.0.1 801”是要跟踪其系统调用的命令。并且要跟踪的系统调用的名称是网络。

跟踪网络相关的系统调用

可以看出,它只显示了网络系统调用的名称、参数和结果。

5.跟踪信号相关的系统调用

$strace -e trace=signal nc -v -n 127.0.0.1 801

注意:这里的“nc -v -n 127.0.0.1 801”是要跟踪其系统调用的命令。并且要跟踪的系统调用的名称是信号。

跟踪信号相关的系统调用

可以看出,它只显示了信号系统调用的名称、参数和结果。

6.打印每次通话的时间戳。

$strace -r ls

注意:这里的“ls”是要跟踪其系统调用的命令。

打印每次通话的时间戳

打印每次通话的时间戳

可以看出,它在进入每个系统调用时显示一个相对时间戳。它记录连续系统调用开始之间的时间差。

7.打印花费在系统调用上的时间。

$strace -T ls

注意:这里的“ls”是要跟踪其系统调用的命令。

打印花费在系统调用上的时间

打印花费在系统调用上的时间

可以看出,每次调用所花费的时间都打印在每行的末尾。

8.打印每个系统调用的挂钟时间。

$strace -t ls

注意:这里的“ls”是要跟踪其系统调用的命令。

打印每个系统调用的挂钟时间

打印每个系统调用的挂钟时间

可以看出,每行的前缀是系统调用本身的挂钟时间。

9.打印指令指针。

$strace -i ls

注意:这里的“ls”是要跟踪其系统调用的命令。

打印每个系统调用的挂钟时间

打印每个系统调用的挂钟时间

可以看出,指令指针打印在每一行输出中。

10.打印输出到文件

$strace -o output.txt ls

注意:这里的“ls”是要跟踪其系统调用的命令。 output.txt 是要存储输出的文件的名称。

打印每个系统调用的挂钟时间

打印每个系统调用的挂钟时间

可以看出,命令的输出存储在 output.txt 文件中。