Linux实用工具—— 静态分析C语言生成函数调用关系的利器cflow

目录

cflow的安装和使用

cflow的安装

cflow的使用

文本输出

转成dot文件

dot文件生成图片  

参考连接:


 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值