linux kernel debug 工具之:strace

什么是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 执行被跟踪的命令.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux,debug,tool,linux,kernel)