故事缘由
工欲善其事,必先利其器。今天我们来玩转一个小工具,叫 Callgraph
,它可以把 C
语言的函数调用树(或者说流程图)画出来。
传统的命令行工具 Cscope
,Ctags
可以结合vim
等工具提供高效快捷的跳转,但是无法清晰的展示函数内部的逻辑关系。
至于图形化的IDE
,如 QtCreator
, Source Insight
,Eclipse
,Android Studio
等,却显得笨重,而且不一定支持导出调用关系图。
在开源软件在线代码交叉检索一文中我们也介绍到了诸如LXR
, OpenGrok
之类的工具,它们避免了本地代码库而且提供了方便的 Web
展示,不过也无法提供函数关系的清晰展示。
下面开始 Callgraph
之旅。
安装 Callgraph
Callgraph
实际由三个工具组合而成。
- 一个是用于生成
C
函数调用树的cflow
或者calltree
,下文主要介绍cflow
。 - 一个处理
dot
文本图形语言的工具,由graphviz
提升。建议初步了解下:DOT
语言。 - 一个用于把
C
函数调用树转换为dot
格式的脚本:tree2dotx
以Ubuntu
为例,分别安装它们:
sudo apt-get install cflow graphviz
如果确实要用 calltree
,请通过如下方式下载。不过 calltree
已经年久失修了,建议不用。
wget -c https://gitlab.com/tinylab/linux-0.11/raw/master/tools/calltree
接下来安装 tree2dotx
和 Callgraph
,这里都默认安装到 /usr/local/bin
。
$ wget -c https://gitlab.com/tinylab/linux-0.11/raw/master/tools/tree2dotx
$ wget -c https://gitlab.com/tinylab/linux-0.11/raw/master/tools/callgraph
$ sudo cp tree2dotx cal