ltrace能夠跟蹤程序的庫函式呼叫,它會顯現出哪個庫函式被呼叫,而strace則是跟蹤程式的每個系統呼叫.
1.系統呼叫的輸出對比
程式**:
用 #ltrace跟蹤程式:#include main()
int str_length (const char *s)
return (length);
}
用 #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...