2011-06-22 97 views
2

是否有一個簡單的工具,或者可能是一種方法將strace輸出轉換爲可視化或更容易篩選的東西?我不得不弄清楚應用程序出錯的地方,但是它會產生大量的數據。試圖追蹤這個應用程序和它的線程在更大規模上正在做什麼(或者試圖做什麼)被證明是非常難以閱讀每個系統調用的。可視化strace輸出

我沒有任何預算,我們是一個純粹的Linux商店。

+0

知道什麼樣的問題,你有幫助。但是,一般來說,當我在做毛茸茸的工作時,我使用grep很多,如果問題是核心轉儲或特定的系統調用,我可以猜測,請專注並使用它來指導我的線索向後。 –

+0

@seth問題是應用程序看起來試圖連接到某個東西......然而,它出現連接失敗錯誤,但是,嗅探網絡接口時,它從不嘗試連接到盒子外的任何東西。我看到2個tcp會話建立並在環回中結束,沒有數據傳輸。 – tMC

+0

我會'egrep'套接字|連接|發送'/ tmp/tr'並嘗試查看哪個命令失敗。根據錯誤消息的確切文本,我可能會查找DNS或端口查找失敗。 –

回答

4

如果你的問題是網絡的一個,你可以嘗試將strace輸出與

strace -e trace=network your_program

2

是限制對與網絡相關的系統調用,使用-c參數可視化計數時間,來電和錯誤對於每個系統調用和報表摘要的表格形式,例如

$ strace -c -fp $(pgrep -n php) 
Process 11208 attached 
^CProcess 11208 detached 
% time  seconds usecs/call  calls errors syscall 
------ ----------- ----------- --------- --------- ---------------- 
83.78 0.112292   57  1953  152 stat 
    7.80 0.010454   56  188   lstat 
    7.79 0.010439   28  376   access 
    0.44 0.000584   0  5342  32 recvfrom 
    0.15 0.000203   0  3985   sendto 
    0.04 0.000052   0  27184   gettimeofday 
    0.00 0.000000   0   6   write 
    0.00 0.000000   0  3888   poll 
------ ----------- ----------- --------- --------- ---------------- 
100.00 0.134024     42922  184 total 

這將識別問題而不分析大量數據。

另一種方式是通過特定的系統調用來過濾(如recvfrom/sendto)可視化接收到的數據和發送,例如調試PHP程序:

strace -e recvfrom,sendto -fp $(pgrep -n php) -s 1000 2>&1 | while read -r line; do 
    printf "%b" $line; 
done | strings 

相關:How to parse strace in shell into plain text?