作用:

跟踪系统调用和信号

使用方式

追踪任意的可执行程序

1
$ strace ls

追踪现有进程

1
$ strace -p [pid]

常用参数

-c 统计分析

  • 统计每一系统调用的所执行的时间,次数和出错的次数等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ strace -c ls
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
38.91 0.000789 22 35 13 openat
18.39 0.000373 15 24 close
17.55 0.000356 11 30 mmap
16.37 0.000332 14 23 fstat
2.86 0.000058 29 2 getdents64
2.66 0.000054 27 2 ioctl
2.22 0.000045 45 1 write
1.04 0.000021 21 1 futex
0.00 0.000000 0 12 read
0.00 0.000000 0 5 mprotect
0.00 0.000000 0 1 munmap
0.00 0.000000 0 3 brk
0.00 0.000000 0 2 pread64
0.00 0.000000 0 2 2 access
0.00 0.000000 0 1 execve
0.00 0.000000 0 2 1 statfs
0.00 0.000000 0 1 arch_prctl
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 1 prlimit64
0.00 0.000000 0 1 getrandom
0.00 0.000000 0 1 rseq
------ ----------- ----------- --------- --------- ----------------
100.00 0.002028 13 152 16 total

-o 重定向输出

  • 将 strace 的结果输出到文件中
1
$ strace -c -o tmp.txt ls

-T 系统调用的耗时

1
$ strace -T ls

-t 系统调用发生的时间

  • -t: 秒
  • -tt: 微秒
  • -ttt: 微秒,但是 unix 时间戳
1
$ strace -t ls

-s 截断输出

  • 指定 trace 结果的每一行输出的字符串长度
1
$ strace -s 20 ls

实现原理