您的位置:首页 > 其它

用strace跟踪系统调用

2014-08-20 11:15 204 查看
之前有新同事在问,strace的时候怎么样过滤掉某些系统调用, 这里简单总结下,希望对新同事有参考作用

 

部分跟踪举例:

1.     只跟踪epoll_wait和gettimeofday,其他系统调用通通过滤掉,可以这样: strace -e trace=epoll_wait,gettimeofday(逗号分隔)

2.     过滤epoll_wait和gettimeofday,其他系统调用通通跟踪,可以这样:strace -e trace=\!epoll_wait,gettimeofday(逗号分隔)

注意第2种情况在感叹号!前面有一个反斜线,防止被bash解释成自己的历史命令。

 

可以在常用的机器上定制自己的strace别名,方便使用,比方说我bashrc里面的:

alias syscall="strace -tt -T -s 200"

alias syscall2="sudo /usr/bin/strace -tt -T -s 200"

alias tracefd="strace -tt -T -s200 -etrace=send,recv,sendto,recvfrom,read,write,connect,socket,open,close"

alias tracefd2="sudo /usr/bin/strace -tt -T -s200 -etrace=send,recv,sendto,recvfrom,read,write,connect,socke

t,open,close"

 

 

调用次数、耗时统计:

strace -c

跟踪一段时间,然后CTRL^C终止查看结果。

 

跟踪子进程:

Strace –f –p $pid

 

其他常用选项

-p 跟踪一个具体的进程

-s  指定要跟踪的字符串的长度。

-tt –T 统计系统调用的开始结束时间,单次调用耗时

-o 将输出重定向到文件。有时候输出非常庞大,屏幕滚动过快,需要先重定位到文件而后查看。

   或者使用2>outputfile, >前面之所以加2 是因为strace的输出在stderr而不是stdout。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: