| 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
 当然,它还可以生成更复杂的关系图,可以先见识一下它的威力。 ? |