strace
strace 是一个用于跟踪系统调用(system calls)和信号(signals)的调试工具,它能监控进程执行过程中所调用的系统调用,输出详细信息,帮助开发者分析程序行为、调试问题和定位性能瓶颈。
strace 有两种启动模式:
strace [选项] command [command-arguments]或者附加到已运行的进程:
strace [选项] -p pid- 第一种模式:启动一个新程序并追踪其系统调用
- 第二种模式:将 strace 附加到一个已运行的进程上进行追踪
基础跟踪控制
Section titled “基础跟踪控制”| 选项 | 说明 |
|---|---|
-p <PID> |
跟踪指定进程 ID 的进程 |
-f |
跟踪目标进程及其所有子进程 |
-c |
统计系统调用的次数、时间等信息,结束后输出汇总报告 |
-t / -tt / -ttt |
在输出中添加时间戳(分别精确到秒、毫秒、微秒) |
输出筛选与控制
Section titled “输出筛选与控制”| 选项 | 说明 |
|---|---|
-e <expr> |
过滤要跟踪的事件 |
-o <file> |
将输出重定向到指定文件 |
-e trace 常用过滤选项:
-e trace=all:跟踪所有系统调用(默认)-e trace=file:只跟踪与文件操作相关的系统调用-e trace=network:只跟踪网络相关的系统调用-e trace=signal:只跟踪与信号相关的系统调用-e trace=read,write:只跟踪指定的系统调用
| 选项 | 说明 |
|---|---|
-T |
显示每个系统调用的耗时(便于分析性能瓶颈) |
-y |
显示文件描述符对应的文件名(让输出更易读) |
-d |
显示 strace 自身的调试信息 |
跟踪一个新程序的系统调用:
strace ls -l将跟踪信息保存到文件:
strace -o ls.strace ls只跟踪文件相关的系统调用:
strace -e trace=file ls跟踪一个已运行的进程:
strace -p 1234统计系统调用的次数和时间:
strace -c ls跟踪带子进程的程序(如 shell 脚本):
strace -f -o output.log ./test.sh跟踪网络相关系统调用并显示耗时:
strace -f -e trace=network -T curl https://example.com- strace 官方文档
man strace