除錯工具Strace

2021-09-27 10:01:45 字數 2192 閱讀 1182

0. strace是什麼?

按照strace官網的描述, strace是乙個可用於診斷、除錯和教學的linux使用者空間***。我們用它來監控使用者空間程序和核心的互動,比如系統呼叫、訊號傳遞、程序狀態變更等。

原始碼: 

1. 編譯移植strace

./configure  --prefix=$(pwd)/install  (以x86平台為例)

make

make install

最後在$(pwd)/install目錄下生成strace可執行檔案

通過 readelf -d strace 可以檢視需要的相關庫

通過反彙編 : 

最後拷貝在開發板上執行:報錯如下

原因是開發板的glibc庫版本太低了,而strace需要glibc_2.15版本的庫

將虛擬機器中/lib/i386-linux-gnu下的libc.so.6 拷貝到開發板對應的目錄下。

注意,如果只拷貝這乙個檔案的話,有可能會無論執行什麼指令都導致

segmentation fault。本人的開發,連同虛擬機器下/lib/i386-linux-gnu/下(下截圖所示)拷貝到開發板的/lib/目錄下。並且拷貝後,cp 或者mv 後,直接斷電,有時會存在假象複製過去了,看目錄下的 檔案,但是可能檔案大小為零,失敗了。

通過: sync 命令將記憶體的同步到磁碟,斷電重啟才生效。

2. strace 除錯

2.1一種是啟動要跟蹤的程序,用法很簡單,在原本的命令前加上strace即可,比如我們要跟蹤 "ls -lh /var/log/messages" 這個命令的執行,可以這樣:

strace ls -lh /var/log/messages
2.2 另一種是執行模式,是跟蹤已經執行的的程序,在不中斷程序的情況下,理解 它在幹嘛,這種情況下,給 strace傳遞個 -p pid 選項即可。

從乙個示例命令來看:

strace -tt -t -v -f -e trace=file -o /data/log/strace.log -s 1024 -p pid
-tt 在每行輸出的前面,顯示毫秒級別的時間

-t 顯示每次系統呼叫所花費的時間

-v 對於某些相關呼叫,把完整的環境變數,檔案stat結構等打出來。

-f 跟蹤目標程序,以及目標程序建立的所有子程序

-e 控制要跟蹤的事件和跟蹤行為,比如指定要跟蹤的系統呼叫名稱

-o 把strace的輸出單獨寫到指定的檔案

-s 當系統呼叫的某個引數是字串時,最多輸出指定長度的內容,預設是32個位元組

-p 指定要跟蹤的程序pid, 要同時跟蹤多個pid, 重複多次-p選項即可。

這裡特別說下strace的-e trace選項。要跟蹤某個具體的系統呼叫,-e trace=***即可。但有時候我們要跟蹤一類系統呼叫,比如所有和檔名有關的呼叫、所有和記憶體分配有關的呼叫。

如果人工輸入每乙個具體的系統呼叫名稱,可能容易遺漏。於是strace提供了幾類常用的系統呼叫組合名字。

-e trace=file     跟蹤和檔案訪問相關的呼叫(引數中有檔名)

-e trace=process  和程序管理相關的呼叫,比如fork/exec/exit_group

-e trace=network  和網路通訊相關的呼叫,比如socket/sendto/connect

-e trace=signal    訊號傳送和處理相關,比如kill/sigaction

-e trace=desc  和檔案描述符相關,比如write/read/select/epoll等

-e trace=ipc 程序見同學相關,比如shmget等

絕大多數情況,我們使用上面的組合名字就夠了。實在需要跟蹤具體的系統呼叫時,可能需要注意c庫實現的差異。

Linux除錯工具strace和lsof學習

1 strace工具 1 簡介 strace是乙個集診斷 除錯 統計於一體的工具,常用來跟蹤程序執行時的系統呼叫和所接收的訊號。在linux世界,程序不能直接訪問硬體裝置,當程序需要訪問硬體裝置時,必須由使用者態切換至核心態模式,通過系統呼叫訪問硬體裝置。strace 可以跟蹤到乙個程序產生的系統呼...

Linux除錯工具strace和gdb常用命令小結

linux除錯工具strace和gdb常用命令小結 strace和gdb是linux環境下的兩個常用除錯工具,這裡是個人在使用過程中對這兩個工具常用引數的總結,留作日後檢視使用。strace除錯工具 strace工具用於跟蹤程序執行時的系統呼叫和所接收的訊號,包括引數 返回值 執行時間。在linux...

linux命令之除錯工具strace的深入分析

參考 1 linux的strace命令 詳解 txt 新浪電子書可 2man strace 乙個基本上通用的 完整的用法 strace o output.txt t tt e trace all p 28979 上面的含義是 跟蹤28979程序的所有系統呼叫 e trace all 並統計系統呼叫的...