调试技巧:使用 strace 跟踪进程并查看其正在做什么
strace 是一款实用的诊断、指导和调试工具。它可以帮您省去很多麻烦。系统管理员、诊断人员和故障排除人员会发现,对于解决源代码不易获得的程序问题,strace 非常有用,因为无需重新编译即可跟踪问题。这对于向开源开发人员提交错误报告也很有用。
跟踪中的每一行都包含系统调用名称,后跟括号中的参数和返回值。
对 /bin/foo 运行 strace 并将其输出捕获到 output.txt 中的文本文件中:
$ strace -o output.txt /bin/foo
您可以 strace webserver 进程并查看其正在执行的操作。例如,strace php5 fastcgi 进程,请输入:
$ strace -p 22254 -s 80 -o /tmp/debug.lighttpd.txt
要仅查看 open、read 系统调用的跟踪,请输入:
$ strace -e trace=open,read -p 22254 -s 80 -o debug.webserver.txt
其中,
- -o filename:将跟踪输出写入文件 filename 而不是屏幕 (stderr)。
- -p PID:附加到进程 ID 为 pid 的进程并开始跟踪。跟踪可随时通过键盘中断信号(按 CTRL-C)终止。strace 将通过将其自身与跟踪的进程分离来做出响应,让其继续运行。除了命令之外,还可以使用多个 -p 选项附加到最多 32 个进程(如果至少给出一个 -p 选项,则这是可选的)。
- -s SIZE:指定要打印的最大字符串大小(默认为 32)。
有关详细信息,请参阅 strace 手册页:
$ man strace