使用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

参考:

Guess you like

Origin blog.csdn.net/Castlehe/article/details/121224668