什么是strace
strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
strace底层使用内核的ptrace特性来实现其功能。
如何安装:
1. 先从github上下载下来:
https://github.com/strace/strace/releases
2. 编译安装
使用方法:
1. 用于分析正在运行的进程:
strace -p pid号码
完成跟踪时,按ctrl + C 结束strace即可。
2. 用于从进程开始执行就开始分许:
strace mkdir test
3. 常用选项
-c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出 strace 关于标准错误的调试信息. -f 跟踪由 fork 调用所产生的子进程. -ff 如果提供 -o filename, 则所有进程的跟踪结果输出到相应的 filename.pid 中, pid 是各进程的进程号. -F 尝试跟踪 vfork 调用. 在 -f 时, vfork 不被跟踪. -h 输出简要的帮助信息. -i 输出系统调用的入口指针. -q 禁止输出关于脱离的消息. -r 打印出相对时间关于,,每一个系统调用. -t 在输出中的每一行前加上时间信息. -tt 在输出中的每一行前加上时间信息,微秒级. -ttt 微秒级输出,以秒了表示时间. -T 显示每一调用所耗的时间. -v 输出所有的系统调用. 一些调用关于环境变量、状态、输入输出等调用由于使 用频繁, 默认不输出. -V 输出 strace 的版本信息. -x 以十六进制形式输出非标准字符串 -xx 所有字符串以十六进制形式输出. -a column 设置返回值的输出位置.默认 为40. -e expr 指定一个表达式,用来控制如何跟踪. 格式如下: [qualifier=][!]value1[,value2]... qualifier 只能是 trace,abbrev,verbose,raw,signal,read,write 其 中之一. value 是用来限定的符号或数字. 默认的 qualifier 是 trace. 感叹号是否定符号.例如: -eopen 等价于 -e trace=open, 表示只跟踪 open 调用. 而 -etrace!=open 表示跟踪除了 open 以外的其他调用.有两个特殊的符号 all 和 none. 注意有些 shell 使用 ! 来执行历史记录里的命令, 所以要使用 \\. -e trace=set 只跟踪指定的系统 调用.例如: -e trace=open,close,rean, write 表示只跟踪这四个系统调用. 默认的为 set=all. -e trace=file 只跟踪有关文件操作的系统调用. -e trace=process 只跟踪有关进程控制的系统调用. -e trace=network 跟踪与网络有关的所有系统调用. -e strace=signal 跟踪所有与系统信号有关的 系统调用 -e trace=ipc 跟踪所有与进程通讯有关的系统调用 -e abbrev=set 设定 strace 输出的系统调用的结果集. -v 等与 abbrev=none. 默认为 abbrev=all. -e raw=set 将指定的系统调用的参数以十六进制显示. -e signal=set 指定跟踪的系统信号.默认为all.如 signal=!SIGIO (或者 signal=!io), 表示不跟踪 SIGIO 信号. -e read=set 输出从指定文件中读出的数据. 例如: -e read=3,5 -e write=set 输出写入到指定文件中的数据. -o filename 将 strace 的输出写入文件 filename -p pid 跟踪指定的进程 pid. -s strsize 指定输出的字符串的最大长度. 默认为 32.文件名一直全部输出. -u username 以 username 的 UID 和 GID 执行被跟踪的命令.
版权声明:本文为u010244470原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。