strace -- trace system calls and signals strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息。
在最简单的情况下,strace追踪指定的指令,直到它退出。strace可以拦截并记录进程的系统调用和进程接收到的信号。你不仅可以从命令行调试一个新开始的程序,也可以把strace绑定到一个已有的PID上去。
strace三个最常用的参数:
-f: 除了跟踪当前进程外,还跟踪其子进程。
-o file: 默认情况下strace打印输出到标准错误,可以使用-o选项输出到指定的文件。
-p pid: 指定需要跟踪的进程pid
-t : 打印跟踪输出中每一行的时间
-T: 显示程序进行的每个系统调用开始和结束之间的时间差
-c: 可以生成每个系统调用的总时间,调用和错误报告。
-i: 显示程序在每次系统调用时的指针
-e trace=network : 只记录和网络api相关的系统调用
strace -f -o vim.strace vim:跟踪vim及其子进程的运行,将输出信息写到vim.strace文件中。
1.跟踪Linux 命令的系统调用,可以简单的使用strace 运行一个命令,这里使用df命令做一个演示:
[root@localhost ~]# strace df -h
execve("/bin/df", ["df", "-h"], [/* 23 vars */]) = 0
brk(0) = 0x983000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4bc0578000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=54957, ...}) = 0
mmap(NULL, 54957, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f4bc056a000
close(3) = 0
open("/lib64/libc.so.6", O_RDONLY) = 3
read(3, "177ELF2113 3 >