使用Linux scrace命令跟踪/调试程序
时间:2020-03-05 15:28:40 来源:igfitidea点击:
STRACE是通过追踪程序执行的系统调用有助于调试问题的工具。
当我们希望了解程序如何与操作系统交互时,它是方便的,如系统调用以什么顺序执行。
这种简单但非常强大的工具对于几乎所有基于Linux的操作系统都可使用,可用于调试大量程序。
1.命令用法
让我们看看我们如何使用strace命令来跟踪程序的执行。
在最简单的形式中,任何命令都可以遵循strace。
它将列出大量的系统调用。
并非所有这一切都会成为Sence起初,但如果你真的在寻找一些特别的东西,那么你应该能够解决这个输出的东西。
让我们看到Simple LS命令的系统调用跟踪。
igi@igi-theitroad ~ $strace ls
此输出显示strace命令的前几行。
输出的其余部分被截断。
上述输出显示写系统调用,其中输出到STDOUT当前目录列表。
以下图像显示LS命令(不包含符号)的Directoy列表。
igi@igi-theitroad ~ $ls
1.1查找程序读取的配置文件
一个使用scrace(除调试某些问题除外)是我们可以了解程序读取哪些配置文件。
例如,
igi@igi-theitroad ~ $strace php 2>&1 | grep php.ini
1.2跟踪特定系统调用
strace命令的-e选项可用于仅显示某些系统调用(例如,打开,写入等)
允许仅追踪CAT命令的"打开"系统调用。
igi@igi-theitroad ~ $strace -e open cat dead.letter
1.3调试进程
scrace命令不仅可以在命令上使用,还可以在-p选项上运行进程。
igi@igi-theitroad ~ $sudo strace -p 1846
1.4统计摘要
系统调用摘要,执行时间,错误等,可以使用-c选项以neat方式显示:
igi@igi-theitroad ~ $strace -c ls
1.5保存输出
scrace命令的输出可以保存到带有-o选项的文件中。
igi@igi-theitroad ~ $sudo strace -o process_strace -p 3229
上面的命令用sudo运行,因为如果用户ID与进程所有者不匹配,它将显示错误。
1.6显示时间戳
可以在每个输出行与-t选项之前显示时间戳。
igi@igi-theitroad ~ $strace -t ls
1.7更精细的时间戳
-tt选项显示时间戳,然后显示microSecond。
igi@igi-theitroad ~ $strace -tt ls
-ttt显示如上微秒,而不是打印豁免时间,它显示自时代以来的秒数。
igi@igi-theitroad ~ $strace -ttt ls
1.8相对时间
-r选项显示系统调用之间的相对时间戳。
igi@igi-theitroad ~ $strace -r ls