2011-06-22 47 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?