当前位置: 首页 > news >正文

strace命令详解

strace 是 Linux 系统中最常用的 ‌系统调用跟踪工具‌,它通过监控进程与内核的交互(如文件操作、网络通信、进程管理等)来帮助调试程序行为。以下是 strace 的详细指南:


一、核心功能

  1. 跟踪系统调用
    记录进程执行期间调用的所有系统函数(如 openreadwriteexecve 等)。
  2. 信号捕获
    显示进程接收到的信号(如 SIGSEGVSIGTERM)。
  3. 性能分析
    统计系统调用的耗时,定位性能瓶颈。

二、基本用法

1. ‌跟踪已有进程
strace -p <PID>          # 跟踪指定进程
strace -p <PID> -f       # 跟踪进程及其子进程

2. ‌启动新进程并跟踪

strace <command>         # 跟踪命令执行(如 strace ls)
strace -o output.txt <command>  # 输出到文件
3. ‌常用选项
选项说明
-e trace=<syscalls>仅跟踪指定系统调用(如 -e trace=open,read
-e signal=<signals>仅捕获指定信号(如 -e signal=SIGSEGV
-s <size>显示字符串的最大长度(默认32字节)
-c统计系统调用耗时汇总
-y显示文件描述符对应的实际路径
-tt显示时间戳(微秒级)

三、典型使用场景

1. ‌调试程序崩溃
strace -f -e trace=open,read,write ./my_program

通过观察崩溃前的最后一个系统调用,定位文件或权限问题。

2. ‌分析性能问题
strace -c -p <PID>       # 统计系统调用耗时

输出示例:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 62.34    0.123456         234       527      12    open
 28.91    0.057890         189       306      4     read
  8.75    0.017543         256        68            write
3. ‌跟踪文件访问
strace -e trace=file ls   # 仅跟踪文件相关调用

输出关键信息:

openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
4. ‌网络通信分析
strace -e trace=network nc google.com 80

输出关键网络调用:

socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("142.250.66.14")}, 16) = 0

四、高级技巧

1. ‌过滤输出
strace -e 'trace=!epoll_wait' <command>  # 排除特定系统调用
2. ‌显示文件描述符路径
strace -y -e trace=open,read,write <command>

输出示例:

openat(AT_FDCWD, "/etc/passwd", O_RDONLY) = 3</etc/passwd>
read(3</etc/passwd>, "root:x:0:0:root:/root:/bin/bash\n", 4096) = 145
3. ‌跟踪进程初始化
strace -E LD_DEBUG=all <command>  # 结合动态链接器调试
4. ‌实时监控
strace -p <PID> -s 1024 -y -tt 2>&1 | grep "read("

五、注意事项

  1. 性能影响
    strace 会使程序运行速度显著下降(10倍以上),‌避免在生产环境长期使用‌。
  2. 权限要求
    跟踪其他用户的进程需要 root 权限。
  3. 安全风险
    可能暴露敏感信息(如密码明文),调试后及时清理日志。

六、替代工具

  • ltrace‌:跟踪动态库函数调用(如 printfmalloc)。
  • perf‌:更高效的系统级性能分析。
  • bpftrace‌:基于 eBPF 的高级跟踪工具。

相关文章:

  • 石家庄建设厅网站首页张掖seo
  • 品牌网站建设 优帮云色目人
  • 有人在相亲网站骗人做传销百度网址大全电脑版旧版本
  • 公司网站微信推广在线代理浏览网站免费
  • 网站建设经费上海seo推广
  • 如何进入网站后台管理网站百度开店怎么收费
  • .NET用C#在PDF文档中添加、删除和替换图片
  • InfluxDB用户管理全攻略:从入门到精通
  • C++ 继承方式使用场景(极简版)
  • fastGPT—nextjs—mongoose—团队管理之部门相关api接口实现
  • 当系统会“说话“:用人类能听懂的方式聊聊Syslog和Kafka
  • 【MongoDB + 向量搜索引擎】MongoDB Atlas 向量搜索 提供全托管解决方案
  • Docker自动部署Spring Boot项目的Shell脚本
  • Caddy 从入门到实战指南(一)
  • 鸿蒙NEXT小游戏开发:井字棋
  • Java学习总结-io流-字节流
  • 基于51单片机的模拟条形码识别系统proteus仿真
  • GitLab CVE-2025-2255 漏洞解决方案
  • 【通知】STM32MP157驱动开发课程全新升级!零基础入门嵌入式Linux驱动,掌握底层开发核心技能!
  • Linux信号——信号的保存(2)
  • HTML5 Video(视频)学习笔记
  • AVR128单片机红外遥控8*8LED点阵屏显示
  • 【python中级】使用 setuptools生成 whl 轮子文件
  • Postman接口测试
  • Python 设计模式:迭代模式
  • Unity 常见报错 定位和查找方法