可视化strace输出

时间:2011-06-22 19:46:43

标签: linux debugging strace

是否有一个简单的工具,或者可能是一种将strace输出转换为可视化或更容易筛选的东西的方法?我不得不弄清楚应用程序出错的地方,但是它会产生大量数据。试图在更大范围内跟踪此应用程序及其线程正在做什么(或尝试做什么)被证明是非常难以读取每个系统调用。

我没有任何预算,而且我们是纯粹的Linux商店。

2 个答案:

答案 0 :(得分:4)

如果您的问题是网络问题,您可以尝试使用

strace输出限制为与网络相关的系统调用

strace -e trace=network your_program

答案 1 :(得分: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?