Doxygen + Graphviz 代码自动化分析

2023-05-16

Doxygen + Graphviz 代码自动化分析

目录

  • 1. 实际需求
  • 2. 工具简介
  • 3. 使用说明
  • 4. 代码注释规范
  • 5. 参考

1. 实际需求

  • 在开发程序时,需要编写对应的说明文档。

  • 在阅读现有的项目源代码时,需要梳理函数间的调用关系。

使用 doxygen工具可以自动地根据代码中的注释生成说明文档,而且还能分析每个文件的调用关系、每个类的继承关系、每个函数的调用关系、每个文件夹的包含关系……而graphviz 工具则可以将这些关系以图形的方式进行展示。

2. 工具简介

doxygen是一种从标记过的C++源代码生成文档的标准工具,也支持C,Objective-C,C#,PHP,Java,Python,IDL,Fortran,VHDL,Tcl等。

Doxygen is the de facto standard tool for generating documentation from annotated C++ sources, but it also supports other popular programming languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D.

graphviz是一种开源的将结构化信息展示成抽象图和网络的工具,用于网络,生物信息,软件工程,数据库和网站设计,机器学习以及其他技术领域的可视性接口。

Graphviz is open source graph visualization software. Graph visualization is a way of representing structural information as diagrams of abstract graphs and networks. It has important applications in networking, bioinformatics, software engineering, database and web design, machine learning, and in visual interfaces for other technical domains.

doxygen和graphviz都支持windows、Linux和Mac平台,在Linux中安装时十分简单,

sudo apt install doxygen doxygen-gui 
sudo apt install graphviz

3. 使用说明

Doxywizard是配置和运行doxygen的GUI前端,可以快捷的创建配置文件。

在终端中输入doxywizard命令启动该程序,如下图

(1)设置Step1 和 Step2 中的Wizard 选项卡
在这里插入图片描述

  • 在Step1中选择doxygen的工作目录

  • 设置 doxygen 的项目名称

  • 选择待分析的源码文件或目录,可以是单个源码文件,也可以是源码目录

  • 选择Scan recursively则递归分析源代码目录中的子目录内的源代码。

  • 设置生成文档的输出路径

(2)设置Wizard的其它topics

在Mode中可以设置为指定语言进行优化。

在这里插入图片描述

在output中设置要输出哪些文档,一般默认即可(最主要的是生成的html文件)。

在这里插入图片描述

在diagrams中选择要生成的图。

在这里插入图片描述

(2)设置Expert选项卡

取消勾选FULL_PATH_NAMES,否则生成的文档中,每个文件名前面会带上完整的路径

在这里插入图片描述

(3)设置Expert的Build topic

在这里插入图片描述

(4)在Input topic中可以设置要排除的文件或目录

在这里插入图片描述

(5)设置Dot topic,DOT_PATH中选择graphviz的安装路径,Linux中的默认安装路径

/usr/bin

在这里插入图片描述

到这里就完成了基本的配置,可以将其保存为一个配置文件,下次运行时可以直接调用。

(5)在Run选项卡中点击Run doxygen开始分析源代码,完成后点击show HTML output

会自动打开生成的文档网页。

在这里插入图片描述

例如,对于以下示例代码

/**
 * @file main.cpp demo for code file extraction using doxygen
 * @version 1.0
 * @date 2022-06-05
 * @author Simon
 */
#include <iostream>

#define PI 3.141421  /*!< pi */

/**
 * @brief print hello world
 */
void printHello();

/**
 * @brief conversion between degree and radian
 * @param thea : the angle to be converted
 * @param type : 0-degree to radian, 1-radian to degree
 * @return converted theta
 */
double degreeRadian(double theta, int type);

int main() {
    printHello();

    int x = 1, y = 2;
    std::cout << "1 degree = " << degreeRadian(1, 0) << "radian" << std::endl;
    std::cout << "1 radian = " << degreeRadian(1, 1) << "degree" << std::endl;

    return 0;
}

void printHello(){
    std::cout << "Hello, doxygen!" << std::endl;
}

double degreeRadian(double theta, int type){
    printHello();

    if(type == 0)
        return theta / 180 * PI;
    else
        return theta / PI * 180;
}

生成的文档如下图所示

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在项目文件下会生成一个html文件夹,每个文件都会对应生成一个html文件,files.html文件为主页(打开的网页就是这个),会链接到各个子html文件。

/mnt/d/doxygen/demo
├─html 
│  └─search
└─latex

4. 代码注释规范

只有按照doxygen的代码注释规范进行注释,才能正确提取代码中的注释,并显示在html文件中。

(1)与代码同行的注释类型:

/*!< ... 批注 ... */
/**< ... 批注 ... */ (推荐)
//!< ... 批注 ...
///< ... 批注 ...  (推荐)

(2)在代码上方的注释类型:

/*!
 * ... text ...
 */

/**
 * ... txt ...
 */

(3)其它不想被包含到文档里的注释:

// ... text ...

/*  ... text ... */

(4)一种常用的注释格规范(一般放在函数、对象、结构体的定义前面):

/**
 * @brief 表示具体描述说明
 * @param 表示参数说明,有@param、@param[in]和@param[out]三种写法,字面意思
 * @return 表示返回参数
 * @see 表示另见See also,多用在存在继承关系上,\n
   比如A继承了B,但是A没有重写继承来的方法C,在C上就可以注释另见B
*/

(5)对于某个变量或者结构体成员或者类属性的单行注释

int var;  /**< ... 批注 ... */

5. 参考

  1. 使用doxygen和graphviz来产生源代码函数调用图

  2. 文档生成神器—doxygen的使用和代码注释规范

  3. Doxygen 注释语法和使用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Doxygen + Graphviz 代码自动化分析 的相关文章

随机推荐

  • DOS那一代的程序员现在都干嘛呢?

    亿友论坛 DOS那一代的程序员现在都干嘛呢 xff1f xff08 几年前的老帖子 xff09 作者 xff1a 包子夹蛋 发布时间 xff1a 2005 5 10 14 01 00 DOS那一代的程序员现在都干嘛呢 xff1f xff08
  • switch case的用法

    switch case的用法如下 1 Switch用在编程中 xff0c 如C语言中它经常跟Case一起使用 xff0c 是一个判断选择代码 其功能就是控制流程流转的 直线翻译 xff1a switch语句 xff0c 即 切换 语句 xf
  • Rust嵌入式:只使用寄存器为STM32点灯;从查手册开始

    为什么是 只使用寄存器 网上很多教程都是直接调用对应芯片的HAL库 xff0c 让初学者认为操作都被Rust嵌入式开源组封装好了 xff0c 直接调就好 这在目前Rust嵌入式生态还不成熟的情况下可能是个误解 实际上Rust嵌入式有自己独特
  • epoll_wait 中timeout参数的损耗和如何避免

    ccd 100qps xff0c dcc 4wqps
  • ubuntu和windows双系统默认启动顺序

    在安装了双系统后 xff0c 一般的默认启动ubuntu xff0c 但我实际可能使用windows会比较多 xff0c 为解决这个问题 xff0c 必须要更改默认顺序 xff0c 以达到方便我们使用的效果 方法 xff1a 开机界面会有显
  • 深度学习优化算法

    深度学习各类优化器 借用古代炼丹的一些名词 xff0c 我们可以把训练模型中的数据比做炼丹药材 xff0c 模型比做炼丹炉 xff0c 火候比做优化器 那么我们知道 xff0c 同样的药材同样的炼丹炉 xff0c 但是火候不一样的话 xff
  • yolov3

    YOLOv3 YOLOv3的总体网络架构图 可根据官方代码中的yolov3 cfg进行一一对应 xff0c 标号 0 0 0 是第一个 convolutional Darknet 53 和DarkNet 19一样 xff0c 同样下采样32
  • SSH远程连接报错:kex_exchange_identification: Connection closed by remote host

    突然出现问题 xff1a kex exchange identification Connection closed by remote host 解决方法 删除known hosts xff0c 重启终端即可
  • Dronekit——Introduction

    Dronekit Introduction 参考 xff1a http python dronekit io about overview html 关于Dronekit DroneKit Python允许开发人员创建 在板载协同计算机上运
  • Run dronekit scripts by SITL on Linux 执行dronekit 脚本在Linux系统下模拟飞行

    参考 xff1a http ardupilot org dev docs setting up sitl on linux html Overview The SITL simulator allows you to run Plane C
  • SLAM从入门到放肆——SLAM简述

    SLAM 同时定位与建图 xff08 simultaneous localization and mapping xff0c SLAM xff09 是自动驾驶与增强现实领域中常用的技术 主要研究装置通过各种传感器在未知环境中的感知与定位问题
  • 关于NoDriveTypeAutoRun的键值

    最近在写一个修改注册表的驱动 xff0c 只是为了好玩 xff0c 也算是一个恶搞驱动吧 xff01 遇到一个问题 xff0c 花了我差不多两天的时间的 xff0c 详情往下看 写这篇文章 xff0c 为了记住这个教训 xff0c 一个提供
  • 闭包的实现原理和作用、以及内存泄露

    一 闭包的实现原理和作用 xff0c 可以列举几个开发中闭包的实际应用 1 闭包的概念 xff1a 指有权访问另一个函数作用域中的变量的函数 xff0c 一般情况就是在一个函数中包含另一个函数 2 闭包的作用 xff1a 访问函数内部变量
  • PX4 SITL Gazebo 仿真时 libgazebo_multirotor_base_plugin 插件运行时出错

    PX4 SITL Gazebo 仿真时 libgazebo multirotor base plugin 插件运行时出错 问题描述原因分析解决办法总结 问题描述 在 Gazebo 中进行 PX4 的软件在环仿真时 xff0c 执 make
  • Jetson AGX Xavier 正确上手教程

    概览 1 开机1 1 配件1 2 需要准备的器材1 3 连接设备 2 刷机2 1 更换主机的 apt get 源2 2 在主机上安装 SDK ManagerStep 1Step xff12 Step xff13 烧录 OS 镜像安装 SDK
  • Matplotlib绘图显示缺少中文字体-RuntimeWarning: Glyph 8722 missing from current font.

    pyplot 并不默认支持中文显示 xff0c 也没有自带中文字体 xff0c 因此需要自行下载所需字体 xff0c 并修改 rcParams 参数来显示中文 下面以 SimHei xff08 黑体 xff09 字体为例进行说明 说明 xf
  • Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )

    Win10 系统安装 Linux 子系统教程 WSL2 43 Ubuntu 20 04 43 Gnome 桌面 xff09 1 WSL 简介1 1 什么是 WSL xff1f 1 2 WSL1 与 WSL2 2 安装 WSL2 1 安装 W
  • Ubuntu 桌面美化教程

    将 Ubuntu 桌面美化成 Mac 风格 xff0c 效果如下 1 美化任务栏 Ubuntu 20 04 默认的任务栏在桌面左侧 xff0c 不使用时会自动隐藏 安装 plank dock 工具可以在桌面底部设置一个常驻任务栏 xff08
  • Git 图解教程

    Git 图解教程 基础篇 git 简介 安装与配置 安装 git 配置 git 创建版本库 跟踪修改 提交修改 比较文件 辅助命令 创建分支 合并分支 git merge git rebase 高级篇 移动提交记录 分离的 HEAD 相对引
  • Doxygen + Graphviz 代码自动化分析

    Doxygen 43 Graphviz 代码自动化分析 目录 1 实际需求2 工具简介3 使用说明4 代码注释规范5 参考 1 实际需求 在开发程序时 xff0c 需要编写对应的说明文档 在阅读现有的项目源代码时 xff0c 需要梳理函数间