strace命令:查看进程的系统调用

strace是一个轻量级的调试工具,可以快速查看程序、进程的系统调用情况,查看程序的运行状态,类似的有lsof命令。

strace的使用

使用方法:

  • strace [option] -p PID
  • strace [option] command

基本选项:

  • =-p pid= : 查看PID的系统调用情况
  • =-o file= : 将调试信息保存到文件,而不是打印到屏幕
  • =-f= : 也查看子进程的调用信息,否则,只查看该进程本身的调用
  • =-ff=: 一旦有 =-o filename= 选项,则每个子进程文件保存为 =filename.pid=

时间相关选项:

  • =-r= : 打印相对时间
  • =-t= : 打印绝对时间
  • =-tt=: 打印时间,精确到秒
  • =-T= : 打印每个系统调用花费的时间

调试信息外观:

  • =-v= : 详细模式,打印完整argv,stat,termio[s]等
  • =-x= : 以十六进制打印非ASCII字符
  • =-xx=: 以十六进制打印所有字符
  • =-a column= : 设置打印的列数,默认是40
  • =-s strsize= : 限制打印字符串的长度(默认32)
  • =-S sortby= : 对系统调用排序,选择: time, calls, name, nothing (default time)

调试内容定制:

  • =-O overhead= : 设置查看系统调用的开销时间时间overhead秒
  • =-e expr= : 使用一个表达式,如 =option=[!]all=, =option=[!]var= 来定义查看的系统调用, =option:trace,abbrev,verbose,raw,signal,read,write=
  • =-D= : 以子孙进程的形式运行strace,而不是以父进程的形式
  • =-c= : 统计每个系统调用的时间、调用、错误等总结信息,最后会打印统计信息

辅助选项:

  • =-q= : 省去attaching、 detaching等信息,如果是调试命令或者输出到文件时候,则自动去除;只有调试现有进程时才需要显式去除
  • =-i= : 打印每个系统调用的指令指针
  • =-u username=: 以用户的uid/gid运行调试命令,只有root才有此权限
  • =-E var=val= : 为执行的调试命令添加环境变量,形式是 =var=val=
  • =-E var=: 为执行的调试命令删除环境变量,形式是 =var==

常用举例:

  • strace -tfp PID
  • strace -o output.txt cmd
  • strace -o output.txt -fp PID
  • 资料
吴羽舒 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!