一般ubuntu自带strace,Itrace安装与下载:https://www.ltrace.org/ ,"apt-get install ltrace"
目录
一、strace与ltrace教程
https://blog.csdn.net/qq_38420316/article/details/116477056
1.ltrace (跟踪库函数调用,亦可跟踪系统调用)
- 在大于Ubuntu-18.04版本上无法追踪
https://blog.csdn.net/jiexijihe945/article/details/132229485
2.strace (监听程序的系统调用函数堆栈)
https://kldwzz.blog.csdn.net/article/details/124368395
https://blog.csdn.net/qq_38420316/article/details/116477056
2-1)参数项说明
-c 统计每一个系统调用所执行的时间、次数和出错的次数等
-d 输出strace关于标准错误的调试信息
-f 跟踪目标进程,以及目标进程创建的所有子进程
-ff 如果提供-o filename,则将所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号
-i 输出系统调用的入口指针
-q 禁止输出关于脱离的消息
-r 输出每一个系统调用的相对时间
-t 在输出中的每一行前加上时间信息。例如16:45:28
-tt 在输出中的每一行前加上时间信息,精确到微秒。例如11:18:59.759546端
-ttt 在输出中的每一行前加上时间信息,精确到微秒,而且时间表示为UNIX时间戳。例如1486111461.650434
-T 显示每次系统调用所花费的时间
-v 对于某些相关调用,把完整的环境变量、文件stat结构等打印出来
-x 以十六进制形式输出非标准字符率
-xx 所有字符串以十六进制形式输出
-e expr 输出过滤器,通过表达式,可以过滤掉你不想要的输出
expr是一个表达式,用于控制如何跟踪:[qualifier=][!][valuel[,value2]..
说明:
①qualifier 只能是trace、abbrev、verbose、raw、signal、read、write其中之一
②value是用来限定的符号或数字
③默认的qualifier是trace
④感叹号是否定符号
例如:
-e open等价于-e trace=open,表示只跟踪open调用
而-e trace!=open表示跟踪除了open以外的其他调用
常见选项:
-e trace=[set] 只跟踪指定的系统调用
-e trace=file 只跟踪与文件操作有关的系统调用
-e trace=process 只跟踪与进程控制有关的系统调用
-e trace-network 只跟踪与网络有关的系统调用
-e trace=signal 只跟踪与系统信号有关的系统调用
-e trace=desc 只跟踪与文件描述符有关的系统调用
-e trace=ipc 只跟踪与进程通信有关的系统调用
-e abbrev=[set] 设定strace输出的系统调用的结果集
-e raw=[set] 将指定的系统调用的参数以十六进制显示
-e signal=[set] 指定跟踪的系统信号
-e read=[set] 输出从指定文件中读出的数据
-e write=[set] 输出写入到指定文件中的数据
-o filename 将strace的输出写入文件filename
-p pid 指定要跟踪的进程pid,要同时跟踪多个pid,重复多次p选项即可*
-s strsize 指定输出的字符串的最大长度,默认为32。并没有将文件名视为字符串,默认全部输出
-u username 以usemame的UID和GID执行所跟踪的命令
注意:参数-o要写在执行目标文件之前,否则不会输出到文件。
2-2)具体使用
2-2-1)启动追踪:
- 启动并追踪
strace 可执行程序
- 追踪指定进程id
strace -p pid
0 条评论