strace 是 linux 下调试程序系统调用的关键工具。1. 可通过 strace ls 等命令追踪系统调用,查看 open、read、write 等行为;2. 使用 -f 追踪子进程,-p pid 附加进程,-o 输出到文件,-t 显示时间戳,-t 显示耗时;3. 分析输出时关注系统调用失败、延迟、io 等问题;4. 实战中可附加运行中进程、保存日志分析、过滤特定调用;5. 注意权限、性能影响及与 ltrace 配合使用。掌握 strace 能显著提升 linux 环境下排查问题的效率。

Linux环境下调试程序时,系统调用的追踪常常是排查问题的关键。strace 是一个非常实用的工具,它能帮助我们查看进程在运行过程中调用了哪些系统调用,并观察其行为。如果你想知道某个程序到底干了什么,或者为什么卡住了、崩溃了,strace 通常是个不错的起点。

strace 最常见的用途是在命令行中直接附加到一个正在运行的进程或启动一个新的进程来跟踪它的系统调用。
基本命令格式如下:

strace [选项] 命令
例如,你想追踪
ls
strace ls
输出会显示一连串的系统调用信息,比如 open、read、write 等,以及它们的返回值和参数。

一些常用选项:
-f
-p PID
-o filename
-t
-tt
-t
strace 输出的信息虽然看起来杂乱,但其实结构清晰。每一行代表一次系统调用,格式大致如下:
系统调用名(参数...) = 返回值 <耗时>
举个例子:
openat(AT_FDCWD, "/etc/passwd", O_RDONLY) = 3 <0.000012>
这表示程序尝试以只读方式打开
/etc/passwd
常见关注点包括:
通过这些信息可以判断程序是否在等待 IO、卡死在某个操作、或者访问了错误路径。
有时候你不能一开始就用 strace 启动程序,而是需要附加到已经运行的进程上。这时候可以用:
strace -p <PID>
如果这个进程会 fork 出子进程,别忘了加上
-f
strace -f -p <PID>
这对于调试长时间运行的服务(比如 nginx、redis)特别有用。
当输出很多时,直接看终端容易眼花。你可以用
-o
strace -o debug.log your_command
这样你可以用编辑器或 grep 工具进一步过滤关键信息,比如查找所有 open 系统调用:
grep '^open' debug.log
有时候你只想看某类系统调用,比如网络相关的 connect、sendto 等,可以使用
-e trace=
strace -e trace=network curl http://example.com
还可以指定多个类型,比如:
strace -e trace=read,write,open your_command
这样输出会更聚焦,便于快速定位问题。
基本上就这些。掌握 strace 的使用,能在排查 Linux 下的各种奇怪问题时节省大量时间。刚开始可能会觉得输出太乱,但多试几次,熟悉常见系统调用之后,你会发现它其实是挺直观的一个工具。
以上就是如何追踪Linux进程系统调用 strace调试工具使用指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号