没有合适的资源?快使用搜索试试~ 我知道了~
首页strace跟踪工具使用手册
资源详情
资源评论
资源推荐
strace工具使用手册
编译方法
①解压strace-4.8源码包到交叉编译平台的个人路径;
②进入strace-4.8目录并找到configure文件;
③命令行输入
./configure
自动生成Makefile文件,此Makefile文件用于编译默认X86_64平台的strace,然后直接make即可。
④若需要编译为指定平台的strace,命令行输入
./configure --host=XXXX-XXX-XXX
XXXX-XXX-XXX为指定平台的交叉编译器,以H90为例,则输入
./configure --host=arm-hisiv510-linux
然后make即可。以H100为例,则输入
./configure --host=aarch64-marvell-linux-gnu
然后make即可。
⑤将编译好的strace可执行文件通过tftp工具复制到目标平台的/bin目录下,操作命令为
tftp -g <主机ip地址> -r strace
复制完成后赋予全权限
chmod 777 strace
即完成strace工具的跨平台编译。
一、介绍
Strace是Linux中一个调试和跟踪工具。它可以接管被跟踪进程执行的系统调用和收到的信号。然后把每一个执行
的系统调用的名字,参数和返回值打印出来。可以通过strace找到问题出现在user层还是kernel层。strace 显示这
些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。
strace命令是一个集诊断、调试、统计于一体的工具,使用strace对应用的系统调用和信号传递的跟踪结果来
对应用进行分析 ,以达到解决问题或者了解应用工作过程的目的。有时错误日志不能满足定位问题的需求,
因此需要从更“深层”的方面着手分析,可以通过strace观察这些系统调用及其参数、返回值,界定出错的范
围,甚至找出问题出现的根因。
操作系统内核直接运行在硬件上,提供设备管理、内存管理、任务调度等功能。
用户空间通过API请求内核空间的服务来完成其功能——内核提供给用户空间的这些API, 就是系统调
用。
进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态
模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回
值,执行消耗的时间。 对于运维的问题定位,strace工具结合系统调用表,就能解决绝大多数问题。 strace工具比
较高级的用途:
1)可以对特定的系统调用或者几组系统调用进行过滤
2)可以通过统计特定系统调用的调用次数、耗费的时间、成功和失败的次数来配置(profile)系统调用的使用
3)可以跟踪发送给进程的信号量
4)可以通过pid附着(attach)到任何运行的进程
Linux内核目前有300多个系统调用,详细的列表可以通过syscalls手册页查看。这些系统调用主要分为几类:
1)文件和设备访问类 比如open/close/read/write/chmod等 2)进程管理类 fork/clone/execve/exit/getpid等
3)信号类 signal/sigaction/kill 等 4)内存管理 brk/mmap/mlock等 5)进程间通信 IPC shmget/semget * 信号
量,共享内存,消息队列等 6)网络通信 socket/connect/sendto/sendmsg 等 7)其他
关于该命令的更多信息可以参考帮助文档:man strace
二、用法
2.1 strace有两种运行模式
①一种是通过它启动要跟踪的进程 ,在原本的命令前加上strace即可 ,例如:要跟踪 "ls -lh /var/log/messages"
这个命令的执行,可以这样:
②另外一种运行模式,是跟踪已经在运行的进程,在不中断进程执行的情况下, 即可查看进程的运行情况,给
strace传递-p pid 选项。例如:有个在运行的some_server服务,第一步,查看pid:
依据pid用strace跟踪其执行:
完成跟踪时,按ctrl + C 结束strace即可。
strace ls -lh /var/log/messages1
pidof some_server
17553
1
2
strace -p 175531
2.2 strace的常用选项
以上部分参数可组合使用,如:
strace -o output.txt -T -tt -e trace=all -p 28979
表示的含义是,跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并
以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。
strace记录程序所产生的每次系统调用,并以类似C的格式(无论创建该程序时使用何种编程语言)各自显示为单独
的一行。每行起始为系统调用的函数名,括号内为参数,该调用的返回值则显示在等号右侧。当参数为数组或结构
体时,显示其元素(方括号)或成员(花括号)内容,见execve和fstat64。当参数为bit时,使用方括号并用空格隔开每
项参数,如:
sigprocmask(SIG_BLOCK,[CHLD TTOU],[ ]) = 0
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 除了跟踪当前进程外,还跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针寄存器值.
-q 禁止输出关于结合(attaching)、脱离(detaching)的消息,当输出重定向到一个文件时,自动抑制此类消息.
-r 打印出相对时间关于每一个系统调用,即连续的系统调用起点之间的时间差,与-t对应.
-t 打印各个系统调用被调用时的绝对时间秒级,观察程序各部分的执行时间可以用此选项。
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 在每行输出前添加相对时间信息,格式为”自纪元时间起经历的秒数.微秒数”
-T 显示每一调用所耗的时间,其时间开销在输出行最右侧的尖括号内.
-v 冗余显示模式:显示系统调用中argv[]envp[]stat、termio(s)等数组/结构体参数所有的元素/成员内容.
-V 输出strace的版本信息.
-x 以十六进制形式输出非标准字符串 。
-xx 所有字符串以十六进制形式输出.
-a column 设置返回值的输出位置.默认为40,即"="出现在第40列.
-e expr 指定一个表达式,用来控制如何跟踪.
-e trace=set 只跟踪指定的系统 调用.例如:-e trace=open.
-e trace=file 只跟踪有关文件操作的系统调用.
-e trace=process 只跟踪有关进程控制的系统调用.
-e trace=network 跟踪与网络有关的所有系统调用.
-e trace=signal 跟踪所有与系统信号有关的 系统调用
-e trace=ipc 跟踪所有与进程通讯有关的系统调用
-e abbrev=set 设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all.
-e raw=set 将指 定的系统调用的参数以十六进制显示.
-e signal=set 指定跟踪的系统信号.默认为all.如signal=!SIGIO,表示不跟踪SIGIO信号.
-e read=set 输出从指定文件中读出 的数据.例如: -e read=3,5 -e write=set
-E var 从命令的环境变量列表中移除var。
-E var=val 将var=val放入命令的环境变量列表.
-o filename 将strace的输出写入文件filename,而不是显示到标准错误输出(stderr).
-p pid 跟踪指定的进程pid,可指定多达32个(-p pid)选项以同时跟踪多个进程。该选项常用于调试后台进程.
-s strsize 限制每行输出中字符串(如read参数)的最大显示长度,默认32字节。但文件名总是完整显示
-S sortby 按指定规则对-c选项的输出直方图进行排序。sortby取值可为time、calls、name和nothing(默认
time)
-u username 以username 的UID和GID执行被跟踪的命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
第二个参数代表信号SIGCHLD和SIGTTOU;若bit型参数全部置位,则输出如:
sigprocmask(SIG_UNBLOCK,~[ ],NULL) = 0
此处第二个参数全部置位。
三、strace使用案例
3.1 跟踪程序运行
strace用法举例,测试程序test1.c运行过程中的系统调用情况:
第3行表示通过系统调用execve来建立一个进程,本例中为test1对应的进程,在控制台中执行各种命令,比如ls、
cd时,都是通过系统调用execve来建立它们的进程的,通过strace可以看到程序运行的细节。
#include <stdio.h>
int main(void)
{
fputs("hello", stdout);
sleep(2);
//这里一开始输出了换行符,所以前面的hello就被输出到屏幕上了。
fputs("\nworld\n", stdout);
sleep(2);
return 0;
}
1
2
3
4
5
6
7
8
9
10
@Cpl-WH-30:~/test$ gcc test1.c -o test1
@Cpl-WH-30:~/test$ strace ./test1
execve("./test1", ["./test1"], [/* 30 vars */]) = 0
brk(0) = 0x12b7000
...
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=143984, ...}) = 0
mmap(NULL, 143984, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7feee4d32000
close(3) = 0
...
fstat(1, {st_mode=S_IFCHR|0622, st_rdev=makedev(136, 14), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feee4d55000
...
nanosleep({2, 0}, 0x7ffd00227380) = 0
write(1, "hello\n", 6hello
) = 6
...
nanosleep({2, 0}, 0x7ffd00227380) = 0
write(1, "world", 5world) = 5
exit_group(0) = ?
+++ exited with 0 +++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
第4行brk通过传递的addr来重新设置program break,成功则返回0,否则返回-1。 brk(0)的参数是一个地址,假
如已经知道了堆的起始地址,还有堆的大小,那么就可以据此修改 brk() 中的地址参数已达到调整堆的目的。以0作
为参数调用brk,返回值为内存管理的起始地址(若在子进程中调用malloc,则从0x8a92000地址开始分配空间)
第6~8行表示打开动态连接库的过程,如果程序是静态连接的,这几个步骤将不需要。
第14~19行是程序的处理过程,nanosleep()使得进程进入睡眠状态,指定时候后唤醒进程,sleep()基于其实现 ,然
后写入hello和world。
20~21行表示退出进程中所有的线程。
(省略号表示还有其他的系统调用,此处省略。)
加入-c选项,可以打印调用了哪些系统函数,调用多少次数,消耗了多少时间等信息 ,用于性能分析。
3.2 分析程序挂死原因
test2.c代码使用死循环模拟用户态挂死,调用sleep模拟内核态程序挂死,然后利用strace工具分析原因。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char** argv)
{
getpid(); //该系统调用起到标识作用
1
2
3
4
5
6
7
8
剩余31页未读,继续阅读
善见致知
- 粉丝: 96
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0