程序代码分析工具

文章目录

  • 工具简介和安装
    • Doxygen
    • Graphziv
    • 软件安装
  • 工具的运用
    • 启动和配置
    • 工具分析结果


工具简介和安装


Doxygen

Doxygen 是一种用于从 C 、C++ 、Objective-C 、C# 、Java 和 Python 等语言的源代码中生成文档的工具。它通过解析源代码中的注释来创建详细的 API 文档,包括类、函数、变量和模块的描述。

Doxygen 支持多种输出格式,如 HTML 、LaTeX 、RTF 和 XML,其主要的特点如下:

  • 支持多种编程语言:Doxygen 可以从多种编程语言的源代码中提取注释并生成文档;

  • 自动生成目录:Doxygen 可以根据源代码中的结构自动生成目录,方便用户查找和浏览文档;

  • 支持多种注释风格:Doxygen可以识别并处理多种注释风格,如 Javadoc 、Qt 和 Doxygen 风格的注释;

  • 支持图表和示例代码:Doxygen 可以从源代码中提取类图、继承关系图和协作图,并在文档中展示;

  • 可定制性强:Doxygen 提供了许多配置选项,用户可以根据需要定制输出的文档样式和内容。

  • 支持多语言:Doxygen 支持将文档翻译成多种语言,方便不同语言的用户阅读。


Graphziv

Graphviz(Graph Visualization Software)是一个开源的图形可视化软件,用于绘制 DOT 语言脚本描述的图形。它主要用于生成结构化信息的图形表示,如流程图、组织结构图、网络拓扑图等。

Graphviz 具有高度的可扩展性和灵活性,支持多种输出格式,如 PDF 、PNG 、SVG 和 HTML 等,其主要的组件如下:

  • DOT :一种描述图形的语言,用于定义节点、边和属性等图形元素;

  • dot :一个命令行工具,用于将 DOT 脚本转换为 PDF 、PNG 等格式;

  • Graphviz 库:一组用于创建、解析和渲染 DOT 脚本的 API ,支持 C、 Python 等多种编程语言。


软件安装

  • 在线方式

(1)Linux 操作系统中可以在终端中安装 Doxygen 和 Graphziv 软件,依次执行以下命令:

apt install doxygen doxygen-gui
apt install graphviz
  • 离线方式

(2)在 Doxygen 和 Graphziv 官网中下载对应版本的软件,安装方法参考官网即可,如下图所示。

  • Doxygen

Doxygen 官网

  • Graphviz

Graphviz 官网

(3)安装成功后,在终端执行以下命令查看软件版本信息,如下图所示。

doxygen -V
dot -V

版本信息


工具的运用

启动和配置

(1)Doxywizard 是配置和运行 Doxygen 的 GUI 前端,可以快捷地创建配置文件,在终端中执行以下命令启动该程序。

doxywizard

(2)设置 Step1Step2 中的 ”Wizard“ 选项卡,如下图所示。

  • Step1 中选择 Doxygen 的工作目录;

  • 设置 Doxygen 的项目名称;

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

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

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

(3)设置 “Wizard” 选项卡的其它 topics ,如下图所示。

  • 在 “Mode” 中设置指定语言

Mode

  • 在 “Output” 中设置输出文档类型

Output

  • 在 “Diagrams” 中选择生成图类型

Diagrams

(4)设置 “Expert” 选项卡,如下图所示。

  • 取消勾选 FULL_PATH_NAMES

Expert

  • 在 “Build” 中设置 EXTPACT

Build

  • 在 “Input” 中排除文件或目录

Input

  • 在 “Dot” 中配置 Graphviz 的安装路径(Linux 默认路径为 /usr/bin

Dot

(5)在 “Run” 选择卡中点击 “Run doxygen” 开始分析源代码,完成后点击 “show HTML output” 会自动打开生成的文档网页,如下图所示。
run


工具分析结果

以 Linux 操作系统的 linux-0.11 内核源代码为例,展示 Doxygen 和 Graphviz 软件分析源码的部分结果,如下图所示。

  • 源码目录

linux

  • mian.c

main.c

  • task_struct 结构体

task_struct

  • 结构体索引

结构体


参考链接:

  • Doxygen 官网
  • Graphviz 官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/515976.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯23年第十四届省赛-异或和之和|拆位、贡献法

题目链接: 蓝桥杯2023年第十四届省赛真题-异或和之和 - C语言网 (dotcpp.com) 1.异或和之和 - 蓝桥云课 (lanqiao.cn) 参考题解: 蓝桥杯真题讲解:异或和之和 (拆位、贡献法)-CSDN博客 洛谷P9236 [蓝桥杯 2023 省 A]…

STM32中启用 UART 的特定中断( __HAL_UART_ENABLE_IT函数)开机立即进入中断问题(HAL库)

学习过程中发现启用 UART 的特定中断功能之后,原本应该是等到空闲中断的标志位变化了再进入中断,结果MCU开机就会进入中断,不符合逻辑,所以尝试解决这个问题。 DMA空闲中断 处理 串口接收不定长数据 的文章见以下 原文链接&#…

harmonyOS安装ohpm

下载 下载地址 HUAWEI DevEco Studio和SDK下载和升级 | 华为开发者联盟 初始化 注意:初始化ohpm前,需先完成node.js环境变量配置 1.解压文件,进入commandline-tools-windows-2.0.0.2\command-line-tools\ohpm\bin 2.执行: init.ba…

pycharm调试(步过(Step Over)、单步执行(Step Into)、步入(Step Into)、步出(Step Out))

pycharm调试 pycharm调试 pycharm调试为什么要学会调试?1. 步过 (Step Over)2. 单步执行 (Step Into)3. 步入(Step Into)4. 步出(Step Out) 为什么要学会调试? 调试可以帮助初学者更深入地理解编程基础&am…

ROS 2边学边练(11)-- colcon的使用

从此篇开始我们即将进入client library系列,主要包含包的创建、主题、服务、参数、消息等功能的自定义实现,开始真正进入ROS的大门咯。 前言 从ROS 1到ROS 2,对应的构建工具集由 catkin_make -> catkin_make_isolated ->catkin_tools …

python--不死兔子问题

def rabbit(n):if n < 3:return 1return rabbit(n - 1) rabbit(n - 3)if __name__ __main__:print(rabbit(4))

leetcode题库练习9\268\771

Leetcode: 9 回文数 简单的想法就是将数字转化为字符进行比较&#xff0c;但是这样占空间 class Solution { public:bool isPalindrome(int x) {if(x < 0) return false;if(x < 10 && x > 0) return true;vector<int> num;while(x > 9){num.push_b…

7 X 24h智能安全运维再升级!Fortinet 全面集成全新 FortiGuard SOCaaS

数字化时代网络安全威胁层出不穷&#xff0c;网络犯罪分子的狡诈攻击手段不断翻新&#xff0c;传统安全防御手段亟需进化。更为棘手的是&#xff0c;网络安全专业人才的匮乏&#xff0c;让众多企业陷入安全运营的困境。为了有效应对这一挑战&#xff0c;Fortinet全新推出FortiG…

自动驾驶之心规划控制笔记

Search-based Path Planning Methods Path Finding Problem 一般来说指标有距离,耗费时间,能量,或者多目标。 左图是拓扑地图,蓝色的点就是顶点,绿色的线是连接关系。最后得到的是一个从哪里走的一个最优,并非精细解。 右图是栅格地图,这个搜索出来的是在相对分辨率比…

Java集合(个人整理笔记)

目录 1. 常见的集合有哪些&#xff1f; 2. 线程安全的集合有哪些&#xff1f;线程不安全的呢&#xff1f; 3. Arraylist与 LinkedList 异同点&#xff1f; 4. ArrayList 与 Vector 区别&#xff1f; 5. Array 和 ArrayList 有什么区别&#xff1f;什么时候该应 Array而不是…

浅析JavaWeb内存马基础原理与查杀思路

文章目录 前言Java内存马内存马分类&原理JavaWeb三大组件注入Servlet内存马注入Filter型内存马JAVA Agent内存马 哥斯拉木马0x01 WebShell0x02 MemShell0x03 FilterShell0x04 Arthas排查0x05 scanner查杀 总结 前言 几年前写过《Web安全-一句话木马》&#xff0c;主要介绍…

Java快速入门系列-1(Java概述)

第一章&#xff1a;Java概述 1.1 Java的发展历程1.2 Java的特点与优势1.2.1 特点1.2.2 优势 1.3 Java生态系统介绍1.4 Java在当前技术领域的应用案例 1.1 Java的发展历程 Java语言由Sun Microsystems公司于1995年推出&#xff0c;由James Gosling领导的Green Team小组研发而成…

CSGO比赛赛事大科普,Major并不是一个赛事!

关于CSGO比赛&#xff0c;有很多人都听过许多相关名词&#xff1a;Major、Minor、IEM、EPL、ESL ONE、Dreamhack、ESEA、Blast、EPICENTER等等&#xff0c;但大家有没有想过这些名词所代表的含义呢&#xff1f; Major、Minor严格意义上说&#xff0c;Major、Minor本身并不是赛事…

root@localhost‘s password: Permission denied, please try again.

编辑、etc/ssh/sshd_config文件 ,将PermitRootLogin这行改为yes rootubuntu:/home/ubuntu# vim /etc/ssh/sshd_config 重新加载改文件 /etc/init.d/ssh restart

Fusion360修改嘉立创EDA专业版生成的3D外壳文件

需要第三方软件的原因 嘉立创EDA专业版生成电路板的3D外壳文件是比较快捷的&#xff0c;但如果侧面精密开孔或者添加其它非常规的元素还是有些局限。嘉立创EDA专业版可以把3D外壳文件导出&#xff0c;这就大大方便了第三方软件的修改。 本文是利用Fusion360修改3D外壳文件&…

信息传播的AI时代:机器学习赋能新闻出版业的数字化之旅

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

Codeforces Round 932 (Div. 2) ---- F. Andrey‘s Tree ---- 题解

F. Andreys Tree&#xff1a; 题目描述&#xff1a; 思路解析&#xff1a; 我们假设删除任意一个结点后&#xff0c;我们会将整个树切分为k个联通块&#xff0c;那么可以明确的知道我们只需要连接(k-1)条边就可以将这k个联通块重新连为一棵树。 那么最小代价是啥呢? 图解分…

uniapp 设置globalStyle navigationBarTitleText 不显示

设置全局的navigationBarTitleText但是没有显示 没效果: 原因: 这里实际上设置了navigationBarTitleText 为"" 所以不会使用全局的设置 解决方法就是直接将这一行代码删除

【YOLOv5改进系列(9)】高效涨点----使用CAM(上下文增强模块)替换掉yolov5中的SPPF模块

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ CAM模块详细介绍二、2️⃣CAM模块的三种融合模式三、3️⃣如何添加CAM模块3.1 &#x1f393; 添加CAM模块代码3.2 ✨添加yolov5s_CAM.yaml文件3.3 ⭐️修改yolo.py文相关文件 四、4️⃣实验结果4.1 &#x1f39…

RegionCLIP网络结构解析 Region-based Language-Image Pretraining

1、简单介绍 主要是关注目标检测方面的工作&#xff0c;现在纯CV已经前景黯淡&#xff0c;即使前段时间的YOLOv9发布也是关注一般。 现在大模型已成热点&#xff0c;而大模型要求的数据量和算力和算法复杂度&#xff0c;显然让很多人却步。但是具有大模型特点的多模态算法也算…