如何在 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.