目录
cflow的安装和使用
cflow的安装
cflow是一款静态分析C语言代码的工具,通过它可以生成函数的调用关系。和calltree不一样,cflow有独立的网页介绍它(https://www.gnu.org/software/cflow/#TOCdocumentation)。而且在Ubuntu系统上,我们可以不用去编译cflow的源码,而直接使用下面命令获取
apt-get install cflow
在centos上,可以下载源码进行编译:
wget https://ftp.gnu.org/gnu/cflow/cflow-latest.tar.gz
cflow的使用
安装完毕,我们可以使用man 手册看到cflow的参数说明
我只列出我觉得有意思的几个参数:
-T输出函数调用树状图
-m指定需要分析的函数名
-n输出函数所在行号
-r输出调用的反向关系图
--cpp预处理,这个还是很重要的
文本输出
最简单的使用方法是以ASCII文本的方式输出结果,比如
cflow -T -m main -n timer.c
其结果是一个包含文件名和函数所在代码行号的调用关系图
+-main() <int main (void) at timer.c:13>
+-ev_timer_init()
+-timeout_cb() <void timeout_cb (EV_P_ ev_timer *w, int revents) at timer.c:7>
| +-puts()
| \-ev_break()
+-ev_timer_start()
\-ev_run()
然而,对于有一定代码量的项目,我们不会使用ASCII文本的方式去查看函数调用关系,因为调用是相当复杂的,而文本图并不适合人去理解。于是我们希望能cflow能产出一个可供其他软件转换成图片的格式的文件。可惜cflow并不支持,好在网上有开发者做了一个工具,可将其结果转换成dot格式。
转成dot文件
我们可以使用下面方法获取转换工具
wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx
下载完tree2dotx后,可对其做个软链便于使用
cd /usr/bin
ln -s 【Your Path】/tree2dotx tree2dotx
具体的转换方法是
cflow -T -m main -n timer.c > main.txt
cat main.txt | tree2dotx > main.dot
dot文件生成图片
我们需要借助graphviz(没有安装的可以使用apt-get install graphviz先安装,或者yum install graphviz)生成图片,指令是
dot -Tbmp test.dot -o test.bmp
效果如下:
参考连接:
https://blog.csdn.net/breaksoftware/article/details/75576878
https://blog.csdn.net/breaksoftware/article/details/75441751