doxygen+graphviz轻松绘制函数调用图(call graph)

Posted realjimmy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了doxygen+graphviz轻松绘制函数调用图(call graph)相关的知识,希望对你有一定的参考价值。

前言

之前的工作环境习惯了使用source insight查看函数分析代码,切换到mac下后改用vscode,发现缺少函数调用关系图生成。跨平台的understand可以很好的解决,但是公司没有购买,因此需要寻找一个免费、跨平台的替代工具。doxygen + graphviz是不错的选择。

原文参考:https://blog.csdn.net/benkaoya/article/details/79763668

1 介绍

doxygen 是跨平台的工具,官网:http://www.doxygen.nl/

支持Linux、Windows、Mac OS X系统(本文将以Windows版本为例)。

支持C语言在内的多种语言的分析,生成的帮助文档格式可以是CHM、RTF、PostScript、PDF、html和Unixman page等。

我使用doxygen的主要目的是生成函数调用关系图,但它能做的远不止于此,它是一款优秀的文档自动生成工具。它可以将代码中的注释转换成帮助文档(注释格式要符合 doxygen 要求才行,FFmpeg API Documentation 就是用doxygen自动生成的),它也可以通过静态分析代码,生成「头文件引用关系图」、「函数调用关系图」、「继承图」以及「协作图」来可视化文档之间的关系。

有了这样的工具,在发布程序版本的同时,发布帮助文档也将变得简单、高效,配合持续集成系统(如Jenkins),自动构建系统,帮助文档可以跟随代码一起实时、轻松的发布版本。

本文主要介绍如何使用 doxygen 生成函数调用关系图,其他功能(如将代码的注释生成帮助文档)不在本文讨论范围内,这是一个入门级的教程。

2 安装

2.1 安装 graphviz

官网:http://www.graphviz.org/

doxygen 自身没办法生成关系图,需要依赖 graphviz 才行,得先安装 graphviz。根据自身系统选择安装的版本。

2.2 安装doxygen

官网:http://www.doxygen.nl/

根据自身系统选择安装的版本。

安装目录下有几个我们需要关心的:

  • 帮助手册:有两种版本,doxygen_manual.chm和html版
  • 配置文件向导:doxywizard.exe,通过这个向导可以快捷地生成配置文件,doxygen.exe 再根据配置文件分析源码,输出各种图和文档

2.3 源码分析

1)运行 doxywizard.exe,配置 Wizard > Project 页面

点击 Wizard 选项卡,如下图所示:

技术图片

2)选择程序语言

根据实际情况选择,我这里选择C

技术图片

3)配置 Expert > Project 页面

技术图片

3)配置 Expert > Build页面

技术图片

4)配置 Expert > Dot页面

技术图片

至此,配置完毕,可以通过 File > Save 菜单将上面所有配置导出(保存)到配置文件,以免丢失配置,配置文件默认保存在 Step1 设置的工作目录下。

当然你也可以通过 File > Open 菜单导入(打开)一个现有的配置文件。可以打开配置文件看看,里面参数非常多,doxywizard 图形化的便捷性也就体现在这里。

5)分析源码

Run 选项卡,点击 Run doxygen 按钮,幕后就会根据刚才的配置执行 doxygen.exe 命令:

技术图片

6)查看分析结果

等分析完毕,最后点击 Show HTML output 按钮就会启动浏览器显示分析结果,如下图所示:

技术图片

7)查看doxygen分析后的结果

点开文件列表

技术图片

头文件包含关系图与函数调用关系图如下,从图中可以发现,doxygen不会显示调用的系统API。

技术图片技术图片

以上是关于doxygen+graphviz轻松绘制函数调用图(call graph)的主要内容,如果未能解决你的问题,请参考以下文章

用Doxygen+GraphViz生成OSSIM源码中函数关系调用图

文档生成工具doxygen+图像生成工具GraphViz

实践源代码分析工具Doxygen+Graphviz

Python自动绘制UML类图函数调用图(Call Graph)

使用Doxygen + graphviz生成Unity 3d的UGUI类图

使用Doxygen + Graphviz +HTML Help WorkShop生成代码文档