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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
   |  # 安装strace   sudo apt install strace
 
  # 查看程序的系统调用情况 johnzb@ubuntu:~$ strace ./a.out execve("./a.out", ["./a.out"], 0x7ffd938259d0 /* 23 vars */) = 0 brk(NULL)                               = 0x55e35ace7000 arch_prctl(0x3001 /* ARCH_??? */, 0x7ffcccdee110) = -1 EINVAL (Invalid argument) access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=75093, ...}) = 0 mmap(NULL, 75093, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fb422051000 close(3)                                = 0 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0"..., 832) = 832 pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784 pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32 pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68 fstat(3, {st_mode=S_IFREG|0755, st_size=2029592, ...}) = 0 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb42204f000 pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784 pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32 pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\30x\346\264ur\f|Q\226\236i\253-'o"..., 68, 880) = 68 mmap(NULL, 2037344, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fb421e5d000 mmap(0x7fb421e7f000, 1540096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7fb421e7f000 mmap(0x7fb421ff7000, 319488, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19a000) = 0x7fb421ff7000 mmap(0x7fb422045000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7fb422045000 mmap(0x7fb42204b000, 13920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fb42204b000 close(3)                                = 0 arch_prctl(ARCH_SET_FS, 0x7fb422050540) = 0 mprotect(0x7fb422045000, 16384, PROT_READ) = 0 mprotect(0x55e358d2c000, 4096, PROT_READ) = 0 mprotect(0x7fb422091000, 4096, PROT_READ) = 0 munmap(0x7fb422051000, 75093)           = 0 brk(NULL)                               = 0x55e35ace7000 brk(0x55e35ad08000)                     = 0x55e35ad08000 openat(AT_FDCWD, "strace_demo.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3 fstat(3, {st_mode=S_IFREG|0664, st_size=0, ...}) = 0 write(3, "Write this to the file", 22)  = 22 close(3)                                = 0 exit_group(0)                           = ? +++ exited with 0 +++
 
 
 
  # 查看创建进程相关的系统调用 strace -e trace=process ./a.out
 
  # 查看文件相关的系统调用 strace -e trace=file ./a.out
  # 查看网络相关的系统调用 strace -e trace=network ./a.out
  # 查看文件相关的系统调用,并打印时间及耗时 strace -e trace=file -T -tt ./a.out
  # 打印系统调用的统计信息,并打印strace的debug信息。 strace -e trace=file -C -w -d ./a.out
 
  # 打印程序的系统调用情况 johnzb@johnzb-GK45:~/code/linux_std$ strace -c ./a.out hello world ! % time     seconds  usecs/call     calls    errors syscall ------ ----------- ----------- --------- --------- ----------------   0.00    0.000000           0         1           read   0.00    0.000000           0         1           write   0.00    0.000000           0         2           close   0.00    0.000000           0         3           fstat   0.00    0.000000           0         7           mmap   0.00    0.000000           0         3           mprotect   0.00    0.000000           0         1           munmap   0.00    0.000000           0         3           brk   0.00    0.000000           0         6           pread64   0.00    0.000000           0         1         1 access   0.00    0.000000           0         1           execve   0.00    0.000000           0         2         1 arch_prctl   0.00    0.000000           0         2           openat ------ ----------- ----------- --------- --------- ---------------- 100.00    0.000000                    33         2 total
 
 
 
  |