strace是Linux下直接追踪程序系统调用的调试工具,通过拦截并记录进程与内核的交互,帮助排查权限错误、程序卡死、性能瓶颈、崩溃等问题;常用选项包括-f(追踪子进程)、-e(过滤系统调用)、-o(输出到文件)、-T(显示耗时)等,可结合grep、awk等工具分析输出;其局限在于性能开销大、仅限系统调用层面、输出冗杂,适用于初步排查,深度分析需结合ltrace、perf或eBPF等工具。

在Linux系统里,想要窥探一个程序到底在“幕后”做了些什么,比如它打开了哪些文件、访问了哪些网络地址、分配了多少内存,甚至为什么会崩溃,
strace
strace
strace
最基础的用法,就是直接在命令前加上
strace
strace ls -l
这会显示
ls -l
openat
read
stat
如果一个程序已经在运行,你想追踪它,可以使用
-p
strace -p <PID>
比如,你发现一个服务进程行为异常,或者卡住了,就可以用这种方式去看看它当前正在做什么。这在排查死锁或长时间等待资源的问题时特别有用。
一些常用的
strace
-o <file>
strace
-e <expr>
strace
open,read,write
socket,connect,sendto,recvfrom
-f
-T
-tt
-T
-s <len>
-v
一个典型的例子,如果你想看看一个程序启动时都打开了哪些配置文件,并且追踪它的所有子进程,同时把结果输出到文件,并且只关注
openat
read
strace -f -o output.log -e trace=openat,read your_program_name
strace
strace
首先,权限问题。这是最常见的,比如一个Web服务无法读取某个文件,或者一个用户执行某个脚本报错“Permission denied”。你用
strace
openat("/path/to/file", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)strace
EACCES
ENOENT
其次,程序卡死或无响应。一个进程突然CPU占用很高但什么都不做,或者干脆就卡在那里不动了。用
strace -p <PID>
futex
poll
epoll_wait
read
再来,性能瓶颈分析。虽然
perf
strace -T
read
write
还有,理解未知程序的行为。当你拿到一个第三方二进制文件,或者想搞清楚某个系统命令到底做了什么时,
strace
最后,调试程序崩溃。虽然
gdb
strace
strace
strace
strace
首先是系统调用过滤。这是最直接的手段,通过
-e trace=
strace -e trace=openat,read,write,close,stat,fstat,lstat,access,unlink,rename your_program
如果你在排查网络问题,可以专注于网络相关的系统调用:
strace -e trace=socket,bind,connect,listen,accept,sendto,recvfrom,getsockopt,setsockopt your_network_app
strace
-e trace=!file
-e trace=signal
其次,利用管道和文本处理工具。
strace
grep
awk
sed
例如,你想追踪一个程序,并且只看其中涉及到
/etc/passwd
strace your_program 2>&1 | grep "/etc/passwd"
这会将
strace
grep
/etc/passwd
如果你想统计某个系统调用被执行了多少次,或者某个参数出现的频率,
awk
strace -e trace=openat your_program 2>&1 | awk '/openat/ {print $2}' | sort | uniq -c这会列出所有
openat
第三,输出格式的调整。
-s
-v
strace
-x
我通常会先用一个宽泛的
strace
grep
less
-e trace=
strace
awk
strace
尽管
strace
最显著的局限性是性能开销。
strace
strace
strace
其次,
strace
read()
read()
再者,输出信息量巨大且可能难以解析。即使使用了过滤,对于一些复杂的应用,
strace
鉴于这些局限性,我们常常需要结合其他工具来获得更全面的视角:
ltrace
strace
ltrace
malloc
free
printf
ltrace
strace
perf
perf
perf
strace
eBPF
bpftrace
eBPF
bpftrace
eBPF
strace
strace
eBPF
我个人觉得,
strace
ltrace
perf
eBPF
以上就是如何在Linux中追踪系统调用 Linux strace调试技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号