语法
strace [ -dDffhiqrtttTvVxx ] [ -a column ] [ -e expr ] ... [ -o file ] [ -p pid ] ... [ -s strsize ] [ -u username ] [ -E var=val ] ... [ -E var ] ... [ command [ arg ... ] ]
strace -c [ -D ] [ -eexpr ] ... [ -Ooverhead ] [ -Ssortby ] [ command [ arg ... ] ]
说明
在最简单的情况下,strace运行指定的命令,直到它退出。它拦截并记录进程调用的系统调用和进程接收到的信号。每个系统调用的名称、参数及其返回值都打印在标准错误或用-o选项指定的文件中。
strace是一个有用的诊断、指导和调试工具。系统管理员、诊断人员和故障排除人员将发现,它对于解决源代码不易获得的程序的问题是非常宝贵的,因为它们不需要为了跟踪而重新编译。学生、黑客和过于好奇的人会发现,通过追踪甚至是普通的程序,可以了解到很多关于系统及其系统调用的信息。程序员会发现,由于系统调用和信号都是发生在用户/内核界面上的事件,因此仔细检查这个边界对于错误隔离、健全性检查和试图捕获竞争条件非常有用。
跟踪中的每一行都包含系统调用名,以及包含在括号中的参数及其返回值。对命令cat /dev/null
进行扫描的示例如下:
open("/dev/null", O_RDONLY) = 3
错误(通常返回值为-1)附加了errno符号和错误字符串:
open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory)
信号被打印成信号符号和信号串。“sleep 666”命令的扫描和中断摘录如下:
sigsuspend([] <unfinished ...>
--- SIGINT (Interrupt) ---
+++ killed by SIGINT +++
如果一个系统调用正在执行,而另一个系统调用正在从不同的线程/进程调用,那么strace将尝试保持这些事件的顺序,并将正在进行的调用标记为未完成。当呼叫返回时,它将被标记为已恢复:
[pid 28772] select(4, [3], NULL, NULL, NULL <unfinished ...>
[pid 28779] clock_gettime(CLOCK_REALTIME, {1130322148, 939977000}) = 0
[pid 28772] <... select resumed> ) = 1 (in [3])