概述
strace 可以追蹤特定命令的執行,或連接到已在執行的程序,即時輸出該程序的所有系統呼叫和訊號事件。這對於理解程序如何與核心互動至關重要,例如檔案 I/O、網路通訊和記憶體管理。
主要功能
- 追蹤程序的系統呼叫和訊號
- 顯示每個呼叫的參數、返回值和錯誤碼
- 連接到正在執行的程序進行追蹤
- 同時追蹤子程序
- 過濾特定系統呼叫或訊號
主要選項
strace 提供了多種選項,可精確控制追蹤方式和輸出格式。
基本追蹤選項
輸出控制
過濾
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`strace` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
使用範例
使用 strace 的各種範例。
簡單命令追蹤
strace ls
追蹤 `ls` 命令的系統呼叫。
將追蹤結果儲存到檔案
strace -o date_trace.log date
將 `date` 命令的系統呼叫儲存到 `date_trace.log` 檔案。
追蹤執行中的程序
strace -p 12345
連接到 PID 為 12345 的程序以追蹤系統呼叫。(PID 應替換為實際的程序 ID)
追蹤子程序
strace -f bash -c "echo Hello, strace!"
在 `bash` shell 中執行 `echo` 命令時,同時追蹤 `bash` 和 `echo` 的系統呼叫。
僅過濾特定系統呼叫
strace -e trace=open,read,write cat /etc/hosts
追蹤 `cat /etc/hosts` 命令使用的 `open`、`read`、`write` 系統呼叫。
檢查系統呼叫耗時
strace -T ls
同時顯示每個系統呼叫所花費的時間。
安裝
strace 可能未預設包含在大多數 Linux 發行版中。您可以使用以下命令進行安裝。
Debian/Ubuntu
sudo apt update && sudo apt install strace
使用 APT 套件管理器進行安裝。
CentOS/RHEL 7
sudo yum install strace
使用 YUM 套件管理器進行安裝。
Fedora/RHEL 8+
sudo dnf install strace
使用 DNF 套件管理器進行安裝。
提示與注意事項
strace 功能強大,但使用時需注意以下幾點。
效能影響
strace 會攔截程序的系統呼叫,因此可能對被追蹤程序的效能產生顯著影響,特別是對於 I/O 密集型程序。在生產環境中應謹慎使用。
輸出解讀
strace 的輸出可能非常龐大,建議使用過濾選項(-e)或將輸出儲存到檔案(-o)進行分析。有關特定系統呼叫的詳細資訊,可使用 `man 2 <syscall_name>` 命令查詢。
權限
若要追蹤其他使用者的程序或系統級別的行為,需要 `root` 權限。
與除錯工具的區別
strace 在系統呼叫層級工作,與 `gdb` 等除錯器不同,它無法直接操作程序內部的變數或函數呼叫,也無法查看堆疊追蹤。這兩種工具可以互補使用。