有时候要给别人讲函数的调用关系图,用文字描述只是一维的,呈现得不直观,用嘴去描述全靠听者在脑袋中构建调用关系,讲的时间长了,或者调用关系复杂时,就会忘记。所以有必要使用二维的工具,这里介绍一下call graph这个工具,可以分析cpp文件中函数的调用关系并生成调用图。
1. 安装callgraph
(1)安装cflow和graphviz
sudo apt-get install cflow graphviz
(2)安装 tree2dotx 和 Callgraph,这里都默认安装到 /usr/local/bin。
$ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx
$ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/callgraph
$ sudo cp tree2dotx callgraph /usr/local/bin
$ sudo chmod +x /usr/local/bin/{tree2dotx,callgraph}
如果wget下不下来,就去网站下载。
(3)安装gawk
$ sudo apt-get install gawk
2. 使用callgraph
主目录下1.cpp文件中的run()函数进行函数调用分析
(1)打开一个新的终端,先切换到主目录下
cd ~
(2)然后输入下述命令
callgraph -f run -d ./1.cpp
其中-f
对应的参数代表需要分析的函数名,在这里对主函数run()进行分析.-d
对应的参数代表需要分析的程序地址,在这里对1.cpp进行分析.
(3)确定需要分析的函数
输入(2)中命令后会出现如下提示,该提示主要询问你需要检测1.cpp文件中的哪一个run函数,选取需要分析的run函数前面对应的编号,在这里只有只有一个run函数,因此输入对应编号1即可
得到svg图,打开查看:
注意:如果分析的是class类定义的函数的实现对应的cpp时,由于前面有类名前缀,callgraph不会起作用。