可视化 strace 输出

tMC*_*tMC 4 linux debugging strace

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

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

Céd*_*ien 5

如果您的问题是网络问题,您可以尝试将strace输出限制为与网络相关的系统调用

strace -e trace=network your_program


ken*_*orb 5

是的,使用-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
Run Code Online (Sandbox Code Playgroud)

这将无需分析大量数据即可识别问题。

另一种方法是通过特定的系统调用(例如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
Run Code Online (Sandbox Code Playgroud)

相关:如何将shell中的strace解析为纯文本?