cflow 安装
cflow 是一款静态分析 C 语言代码的工具,通过它可以生成函数的调用关系,并输出各种函数之间的依赖关系图。
源码安装:https://bbs.huaweicloud.com/forum/thread-142710-1-1.html
cflow 使用
随便拿一个 .c 文件来测试。
root@master ~/mysql# cflow -T -m main ./mysql-5.7.21/cmd-line-utils/libedit/np/fgetln.c > main.txt
root@master ~/mysql# vim main.txt
+-main() <int main (int argc, char *argv[]) at ./mysql-5.7.21/cmd-line-utils/libedit/np/fgetln.c:97>
+-fgetln() <char *fgetln (FILE *fp, size_t *len) at ./mysql-5.7.21/cmd-line-utils/libedit/np/fgetln.c:49>
| +-malloc()
| +-fgets()
| +-strchr()
| +-realloc()
| +-free()
| \-strlen()
+-printf()
\-free()
tree2dotx 下载
wget https://github.com/tinyclub/linux-0.11-lab/blob/master/tools/tree2dotx
or
wget https://raw.githubusercontent.com/tinyclub/linux-0.11-lab/master/tools/tree2dotx
有可能用 wget 会直接下载不下来,不过目前可以从网页打开链接,将文件内容拷贝下来。
然后再对文件添加上可执行权限以后就可以直接用了:?
root@master ~/mysql# vim tree2dotx
root@master ~/mysql# chmod a+x tree2dotx
root@master ~/mysql# ll tree2dotx
-rwxr-xr-x. 1 root root 6.0K Aug 17 15:43 tree2dotx*
root@master ~/mysql# cat main.txt | ./tree2dotx > main.dot
root@master ~/mysql# vim main.dot
digraph G{
rankdir=LR;
size="1920,1080";
node [fontsize=16,fontcolor=blue,style=filled,fillcolor=Wheat,shape=box];
"main" -> "fgetln ";
"fgetln " -> "malloc";
"fgetln " -> "fgets";
"fgetln " -> "strchr";
"fgetln " -> "realloc";
"fgetln " -> "free";
"fgetln " -> "strlen";
"main" -> "printf";
"main" -> "free";
}
graphviz 安装
redhat 系统的话可以直接用 yum 进行安装。
root@master ~/mysql# yum install graphviz
安装好以后就可以直接使用了。?
root@master ~/mysql# dot -Tpng main.dot -q3 -o main.png
生成图片
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
所以,在相关软件都安装好的情况下,主要就下面这三步就可以生成 .c 文件的调用关系图了。
cflow -T -m main fgetln.c > main.txt
cat main.txt | ./tree2dotx > main.dot
dot -Tpng main.dot -q3 -o main.png
当然,它还可以生成更复杂的关系图,可以先见识一下它的威力。
?
|