c语言调用graphviz_c语言分析函数调用关系图(call graph)的几种方法

一、基于 Doxygen或 lxr 的API形式的文档系统。

二、基于CodeViz, CodeViz是《Understanding The Linux Virtual Memory Manager》的作者 Mel Gorman 写的一款分析C/C++源代码中函数调用关系的open source工具(类似的open source软件有 egypt、ncc)。属于编译器级别的分析工具。

三、基于cflow、dot(即graphviz)等系列软件。属于源码直接解析类的分析工具。

四、基于egypt, 比较推荐这个,因为它支持 arm。它不用大动干戈地给编译器打补丁,而是让编译器自己dump出调用关系,然后分析分析,交给Graphviz去绘图。属于编译器级别的分析工具。

一、略。

二、基于CodeViz,主要是Graphviz + CodeViz,一个分析,一个画图。

三、基于cflow、dot(graphviz)。用于源码分析比较合适,无法从编译器视角去分析。参看:

www.tinylab.org/callgraph-draw-the-calltree-of-c-functions/?utm_source=tuicool&utm_medium=referral

值得说明的是,cflow无法直接对目录进行recursive分析,它只支持文件分析,即必须手动把要分析的文件指定给它,如: cflow -b  -m fib ./h/fib.c ./cc/fi.c ./ccc/fi.c

而且,如果 ./h/fib.c  ./cc/fi.c  ./ccc/fi.c 中有重名的函数,则这些同名函数的调用关系会合并,即若./cc/fi.c 中有个函数a只调用了函数b,而./ccc/fi.c中也有个函数a只调用了函数c,则最后打印出来的结果是函数a同时调用了b和c,即合并了。

对于cflow系列工具的使用,因为它输出的不是图形化的调用关系,因此这里推荐使用www.tinylab.org的组合工具:calltree。 它整合了cflow及graphviz并附带了一个将C 函数调用树转换为 dot 格式的脚本:tree2dotx:以 Ubuntu 为例,分别安装它们:

$ sudo apt-get install cflow graphviz

$ 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 +

你可能感兴趣的:(c语言调用graphviz)