strace调试的常用方法

一 将strace结果输出到文件

1 格式

-o filename 或  2>filename

2 实战

[root@localhost charpter05]# strace -c -o test.txt ./test
8
8
[root@localhost charpter05]# strace -c ./test 2>test2.txt
8
8
[root@localhost charpter05]# diff test.txt test2.txt

3 说明

比较结果一样,说明两个命令等价。

二 将系统每个调用的时间打印出来

1 格式

-T

2 实战

[root@localhost charpter05]# strace -T ./test

[root@localhost charpter05]# strace -T ./test
execve("./test", ["./test"], [/* 25 vars */]) = 0 <0.000422>
brk(NULL)                               = 0x181d000 <0.000194>
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fae23c80000 <0.000212>
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory) <0.000158>
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 <0.000135>
fstat(3, {st_mode=S_IFREG|0644, st_size=35467, ...}) = 0 <0.000163>
mmap(NULL, 35467, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fae23c77000 <0.000133>
close(3)                                = 0 <0.000139>
open("/lib64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3 <0.000139>
......

3 说明

调用execve函数花费0.000422s,调用mmap花费0.000212

三 记录每次系统调用发生的时间

1 格式

-t 或 -tt 或 -ttt 记录每次系统调用发生的时间,分别精确到秒、微秒和UNIX时间戳的微秒。

2 实战

[root@localhost charpter05]# strace -t ./test
14:49:07 execve("./test", ["./test"], [/* 25 vars */]) = 0
14:49:07 brk(NULL)                      = 0x19e9000
14:49:07 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa13b206000
14:49:07 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
14:49:07 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
14:49:07 fstat(3, {st_mode=S_IFREG|0644, st_size=35467, ...}) = 0
14:49:07 mmap(NULL, 35467, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa13b1fd000
14:49:07 close(3)                       = 0
......

3 说明

从结果可知,这几个系统调用都是在14:49:07这一秒发生的。

四 追踪现有的进程

1 格式

strace -p pid

其中,pid是指进程id。

2 说明

strace不光能初始化一个进程进行strace,还能追踪现有的进程。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值