debugging - 如何使用 strace 只显示花费大量时间的调用?

标签 debugging strace

有没有办法只查找特定时间内的调用?

最佳答案

看起来输出中有一个显示 CPU 时间的标志 (-c):

man strace

示例输出:

sysadm@brownie:~$ strace -c ./crypt_crack.py
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 84.38    0.000027           0       340       273 open
 15.63    0.000005           0        67           rt_sigaction
  0.00    0.000000           0        91           read
  0.00    0.000000           0        67           close
  0.00    0.000000           0       117        89 stat
  0.00    0.000000           0        96           fstat
  0.00    0.000000           0         1           lstat
  0.00    0.000000           0         3           lseek
  0.00    0.000000           0        64           mmap
  0.00    0.000000           0        17           mprotect
  0.00    0.000000           0        30           munmap
  0.00    0.000000           0         8           brk
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         4         2 ioctl
  0.00    0.000000           0         1         1 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           uname
  0.00    0.000000           0         2           fcntl
  0.00    0.000000           0         4           getdents
  0.00    0.000000           0         1           getcwd
  0.00    0.000000           0         1         1 readlink
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0         2           futex
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00    0.000032                   923       366 total

sysadm@brownie:~$

当使用 -c 标志运行时,strace 似乎会保留所有输出,直到执行终止(优雅地或 ctrl-c)

并使用 awk 查找 CPU 时间 == 0.0:

sysadm@brownie:~$ strace -c ls -la 2>&1 | awk '{if ($2 == 0.0) print;}'
  0.00    0.000000           0        23           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0        34        12 open
  0.00    0.000000           0        27           close
  0.00    0.000000           0        34           stat
  0.00    0.000000           0        23           fstat
  0.00    0.000000           0        34           lstat
  0.00    0.000000           0         1           lseek
  0.00    0.000000           0        41           mmap
  0.00    0.000000           0        12           munmap
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         2           rt_sigaction
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         2         2 ioctl
  0.00    0.000000           0         2         1 access
  0.00    0.000000           0         4           socket
  0.00    0.000000           0         4         4 connect
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           uname
  0.00    0.000000           0        13           fcntl
  0.00    0.000000           0         2           getdents
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0        67        67 getxattr
  0.00    0.000000           0         1           futex
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           clock_gettime
  0.00    0.000000           0         1           set_robust_list
sysadm@brownie:~$

关于debugging - 如何使用 strace 只显示花费大量时间的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4795831/

相关文章:

javascript - 将 JS 代码转换为 React.js,看不出我做错了什么

debugging - 使用 CURL 调用时在 PhpStorm 中触发 xDebug

linux - 比较 Strace 中的字符串值

Android ADB Linux 问题

android - 如何从特定的 Android 应用程序捕获网络流量。

node.js - Visual Code (NODE JS) 调试 - 变量是不可见的

perl - 在 Perl 中调试段错误有哪些好的方法或步骤?

system-calls - 使用服务启动 Strace 守护进程

PHP CLI 进程在退出时永远挂起

python - 如何调试 Python 内存故障?