strace 命令是 Linux 中一个强大的调试和诊断工具。 它记录每个系统调用和它收到的特定进程的响应。 它类似于 truss
其他类 Unix 操作系统中的工具。 因此,您可以调试程序而无需阅读其代码。 它也是学习系统调用的好工具。
系统调用就像一个接口,软件通过它向内核请求服务。
操作系统中有很多系统调用,但了解它们超出了本文的范围。
目录
- 如何在 Linux 上安装 strace?
- 句法
- 执行一个简单的 strace
- 将 strace 的输出写入文件
- 使用 strace 跟踪进程的特定系统调用
- 使用 strace 命令跟踪具有 PID 的进程和子进程
- 进程使用 strace 进行的系统调用摘要
- 结论
如何在 Linux 上安装 strace?
如果你没有 strace
已经在您的系统上,请使用系统的默认包管理器来安装它。
对于基于 Ubuntu/Debian 的系统,执行以下命令 易于 命令与 sudo:
sudo apt install strace
对于基于 CentOS/RedHat 的系统,执行以下命令 百胜 命令:
sudo yum install strace
句法
的语法 strace
命令如下:
strace [-ACdffhikqqrtttTvVwxxyyzZ] [-I n] [-b execve] [-e expr]... [-O overhead] [-S sortby] [-U columns] [-a column] [-o file] [-s strsize] [-X format] [-P path]... [-p pid]... [--seccomp-bpf] { -p pid | [-DDD][-E var[=val]]... [-u username] command [args] }
strace -c [-dfwzZ] [-I n] [-b execve] [-e expr]... [-O overhead] [-S sortby] [-U columns] [-P path]... [-p pid]... [--seccomp-bpf] { -p pid | [-DDD] [-E var[=val]]...[-u username] command [args] }
执行一个简单的 strace
使用 strace
没有任何选项将按照程序在执行期间进行系统调用的相同顺序输出所有系统调用。
要尝试一下,让我们尝试一下 strace
命令与 curl
命令:
strace curl google.com
在上图中,您可以看到 strace
命令给了我们很多输出。 这些是为打印最终结果而进行的所有系统调用,如下所示。

将 strace 的输出写入文件
执行 strace
命令与 -o 将输出写入文件,您可以稍后查看。
将输出写入文件 strace
命令 curl
命令执行:
strace -o curl.out curl google.com

使用 strace 跟踪进程的特定系统调用
要跟踪特定的系统调用, 痕迹 表达式与 -e 中的选项 strace
命令。
用于跟踪表达式的语法 strace
命令 curl
命令执行:
strace -e trace=syscall_set curl google.com
在哪里 syscall_set
是指定的系统调用集。

在上图中,您可以看到,当我们指定 socket
系统调用在 strace
命令,它只打印出 socket
系统调用。
类似地,我们可以定义一组我们想要打印的系统调用 strace
命令。

在上图中,您可以看到,当我们在 strace
命令,它只输出该程序在执行时进行的那些系统调用。
使用 strace 命令跟踪具有 PID 的进程和子进程
这 -p 选项用于定义 PID(进程 ID)和 -F 选项用于指定 strace
跟随子进程。
子进程只不过是另一个进程创建的进程。 使用 PID 跟踪进程并跟踪子进程的语法:
sudo strace -f -p pid
为了测试它,让我们附上 strace
到 bash:
使用 ps
命令可以快速找出PID。 我们有两个终端会话,一个用于输出 strace
命令和另一个终端空闲 bash 会议。 另一个空闲的 PID bash 我们系统上的会话是 3804。
当我们执行上面的语法时,可以看到idle bash 会话正在等待输入。

现在,如果我们在空闲时提供输入 bash 会话,您可以看到 strace 在另一个终端会话上提供输出。

进程使用 strace 进行的系统调用总结
要获取进程进行的所有系统调用的摘要, -C 选项与 strace
命令。
获取系统调用摘要的语法 strace
命令:
strace -c curl google.com

结论
strace 是用于调试、诊断、学习系统调用等的一个很好的实用程序。 这是一个非常强大和方便的工具。 它适用于所有 Linux 发行版。
感谢您的阅读! ?