如何在 Linux 上使用 strace?


Linux 实用程序命令是使 Linux 成为如此强大的操作系统的关键,虽然我们可以使用大量命令来交互并获取有关信号和系统调用的信息,但在获取有关系统调用和信号的信息时,最常用和最受欢迎的命令是 Linux 的跟踪命令。

它可以用于获取系统的诊断信息,用于监控特定的进程或 Linux 的指令工具。它有各种用例,其中一些用例包括:

  • 为每个系统调用打印时间戳

  • 输出带有时钟时间的行

  • 跟踪正在运行的进程

  • 拦截系统调用

虽然这些可能是一些用例,但还有很多情况下我们可以使用 **strace**。

在使用 strace 工具之前,我们必须在本地机器上安装它。请考虑以下显示的不同操作系统的不同命令,以便在您的本地操作系统上安装 strace 工具。

对于 **Ubuntu/Debian**:

sudo apt install strace

对于 **CentOS/RedHat**:

yum install strace

对于 **Mac OS**:

brew install strace

现在,一旦我们安装了 strace,让我们考虑几个我们将使用 strace 工具的示例。

下面显示的第一个示例包含将打印 Linux 环境的 Linux 命令系统调用的命令。

只需在您的终端中键入以下命令:

sudo strace df -h

输出

root@Vostro-15-3568:/home/# strace df -h
execve("/bin/df", ["df", "-h"], [/ 31 vars /]) = 0
brk(NULL) = 0x888000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = 0
open("/etc/ld.so.preload", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
close(3) = 0
open("/home/cavisson/Documents/github/cavisson/prodsrc/core/netdiagnosticsagent/goAgent/lib/tls/x86_64/libc.so.6",
O_RDONLY|O_CLOEXEC) = -1 ENOENT
.
.
.
.

让我们再运行一个示例,我们将通过附加该进程的 ID 来获取进程进行的系统调用。

在您的终端中键入以下命令:

sudo strace -p pid

将上述示例中的 pid 替换为您要获取其系统调用的进程的进程 ID。

示例

strace -p 1924

输出

root@Vostro-15-3568:/home/# strace -p 1616
strace: Process 1616 attached
select(11, [9 10], NULL, NULL, {0, 9427}) = 0
select(11, [9 10], NULL, NULL, {0, 10000}) = 0
.
.
.

更新于:2021-07-29

108 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.