使用strace和ltrace跟蹤程式呼叫

2021-06-19 08:33:44 字數 1790 閱讀 5785

ltrace能夠跟蹤程序的庫函式呼叫,它會顯現出哪個庫函式被呼叫,而strace則是跟蹤程式的每個系統呼叫.

1.系統呼叫的輸出對比

程式**:

#include main()

int str_length (const char *s)

return (length);

}

用 #ltrace跟蹤程式:

用 #strace跟蹤程式:

我們看到程式呼叫write()系統呼叫做了輸出,同時strace還把程式執行時所做的系統呼叫都列印出來了. 其實

#ltrace -s也可以把系統呼叫都列印出來:

注:我們看到它實際是用sys_write系統呼叫來做列印輸出,其實write()函式是sys_write的封裝,sys_write是真正的系統呼叫.

2.ltrace/strace的耗時

使用-c選項,ltrace輸出由程序建立的庫呼叫,輸出結果以呼叫過程的時間為準進行排序,因為是從urandom裝置上讀,這是一種產生隨機數的裝置,完成後,寫入null裝置.

所以讀過程花費了較多的時間.

使用ltrace去捕獲執行時函式,就好像在程序上繫上了乙個除錯工具,它佔據了ltrace大量的時間,這裡ltrace一共消耗了3.28秒.

strace一共消耗了0.008秒,strace把效能提公升了很多倍,這主要是strace在跟蹤系統呼叫的時候不需要動態庫,而ltrace是根據動態庫來分析程式執行的.

所以ltrace也只能跟蹤動態庫,不能跟蹤靜態庫.

事實上我們用ltrace和strace都可以發現程式在哪個系統呼叫時發生了效能瓶徑.

ltrace用-t,而strace也用-t.

3.ltrace與strace的相同點

ltrace與strace都可以指定pid,即對執行中的程式進行跟蹤.

ltrace -p pid與strace -p pid

ltrace與strace都可以跟蹤程式fork或clone子程序.

ltrace是用-f引數,而strace是用-f(fork/clone)和-f(vfork).

擴充閱讀:

技巧: 使用truss、strace或ltrace診斷軟體的"疑難雜症"

使用strace追蹤多個程序

strace是 linux環境下的一款程式除錯工具,用來監察乙個應用程式所使用的系統呼叫及它所接收的系統資訊。追蹤程式執行時的整個生命週期,輸出每乙個系統呼叫的名字,引數,返回值和執行消耗的時間等。strace常用引數 p 跟蹤指定的程序 f 跟蹤由fork子程序系統呼叫 f 嘗試跟蹤vfork子程...

uClibc體驗 3 strace使用

2.cc mipsel linux gcc configure host mipsel linux 3.make 4.拷貝到小機,strace 出錯應用,毫無提示 5.strace 了一下hellqt,提示資訊很完整 6.鬱悶,開始逐個對比出錯和不出錯的應用,發現不出錯的都沒用多執行緒 7.這才想起...

關於使用strace除錯網路程式

strace 簡介 strace 命令是一種強大的工具,能夠顯示任何由使用者空間程式發出的系統呼叫.strace 顯示這些呼叫的引數並返回符號形式的值.strace 從核心接收資訊,而且無需以任何特別的方式來構建核心.strace 的每一行輸出包括系統呼叫名稱,然後是引數和返回值.比如close w...