在 Linux 上应该如何使用 strace?

Linux 实用程序命令使 Linux 成为如此强大的操作系统,虽然我们可以使用大量命令进行交互并获取有关信号和系统调用的信息,但在获取有关信息时,最常用和首选的命令系统调用和信号是 linux trace 命令。

它可用于对系统进行诊断,用于监视 Linux 的特定进程或指令工具。它有多种用例,其中一些用例是 -

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

  • 带时钟时间的输出线

  • 跟踪正在运行的进程

  • 拦截系统调用

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

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

对于Ubuntu/Debian -

sudo apt install strace

对于CentOS/RedHat -

yum install strace

对于r 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

.

.

.

以上是 在 Linux 上应该如何使用 strace? 的全部内容, 来源链接: utcz.com/z/352705.html

回到顶部