使用strace追踪程序调用情况

需求

查看一个可执行文件,执行后,调用了哪些函数,执行顺序如何。


1. 使用strace查看

1.1 基本操作

strace -h
# 先验证一下有没有安装,没有的话
yum install strace

# 不带参数查看返回内容
strace 你的可执行文件

不带任何参数使用strace命令会返回非常多的内容
在这里插入图片描述


如果使用的是docker,那么很可能出现如下错误信息,参考1.2 docker注意解决

[root@567b3aed2b1c build]$ strace ./run_server
> strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted
strace: PTRACE_SETOPTIONS: Operation not permitted
strace: detach: waitpid(371): No child processes
strace: Process 371 detached
# 这是在docker中,已经是超级用户了,所以不是用户权限的问题

下面分别尝试不同参数,观察一下strace的效果,也可以自己查看-help的内容试试。

参考:

1.2 docker注意

提示不被允许,是因为docker的限制

[root@567b3aed2b1c build]$ strace ./run_server
> strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted
strace: PTRACE_SETOPTIONS: Operation not permitted
strace: detach: waitpid(371): No child processes
strace: Process 371 detached

网上大部分的解决方案,都是在docker run的时候进行设置,加入参数,所以业务可以继续在这个容器跑,可以再重新开一个容器,研究一下调用情况,弄完删除容器就好了。

例如:

$ docker run -itd --privileged --name anyq-trace -p 0.0.0.0:8876:8999 -p 0.0.0.0:8700:8900 anyq/base 
# 加入--privileged参数,就可以使用strace了
$ docker exec -it anyq-trace /bin/bash

$ strace 要追踪的可执行文件

参考:

2. 使用ltrace查看

基本使用也是

ltrace 可执行文件

在这里插入图片描述
也会返回一大堆人都看不懂的东西。

这两个工具应该都不适合我。。

参考:

3. 其他工具

考虑搜索A program to trace execution of another program

参考:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吨吨不打野

解决了问题,觉得还行就给点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值