Sourcetrail 概述

Sourcetrail 是一个代码分析工具,它旨在帮助开发人员理解和导航复杂的代码库。它可以创建代码库的可视化图形,显示代码中的类、函数、变量、依赖关系等信息,从而帮助开发人员更好地理解代码结构和关系,降低维护和开发过程中的复杂性。

Sourcetrail 的主要特点包括:

  1. 代码可视化: Sourcetrail 通过图形化的方式展示代码库的结构和关系,使开发人员能够更容易地理解和浏览代码。

  2. 代码导航: 开发人员可以通过 Sourcetrail 快速导航代码库,跳转到特定的类、函数或变量,并查看其定义、引用和调用。

  3. 依赖分析: Sourcetrail 可以帮助识别代码之间的依赖关系,包括类之间的继承关系、函数之间的调用关系等,从而更好地理解代码的运行流程。

  4. 多语言支持: Sourcetrail 支持多种编程语言,包括但不限于 C++、Java、Python 等。

  5. 实时同步: 当代码发生变化时,Sourcetrail 可以自动检测并同步更新代码库的图形表示,确保图形始终保持最新状态。

  6. 搜索功能: Sourcetrail 提供强大的搜索功能,可以快速查找特定的代码元素,例如类、函数、变量等。

  7. 插件支持: 开发人员可以通过插件扩展 Sourcetrail 的功能,以满足特定需求。

Sourcetrail 实践

本文以 MariaDB 源代码为例,描述 Sourcetrail 如何结合 compile_commands.json 分析 C/C++ 大型工程的的源代码。

代码编译

编译 MariaDB 源代码,在编译时加入 'CMAKE_EXPORT_COMPILE_COMMANDS' 选项以生成 compile_commands.json 文件。

  cmake .. -DCMAKE_BUILD_TYPE=Debug -DWITH_VALGRIND=ON -DWITH_DEBUG=1 \
-DCMAKE_INSTALL_PREFIX=/opt/mariadb \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_UNIT_TESTS=OFF \
-DWITH_WSREP=OFF -DWITH_MARIABACKUP=OFF -DWITH_ROCKSDB=OFF \
-DPLUGIN_TOKUDB=NO -DPLUGIN_CONNECT=NO -DPLUGIN_SPIDER=NO \
-DPLUGIN_OQGRAPH=NO -DPLUGIN_SPHINX=NO -DPLUGIN_MROONGA=NO \
-DPLUGIN_ROCKSDB=NO

执行上述命令后,会在编译目录下生成一个名为 compile_commands.json 的文件。

创建 Sourcetrail 工程

根据 MariaDB 源代码创建代码分析项目。

  1. 创建项目

  1. 指定项目类型

  1. 选择 compile_commands.json 文件的路径

  1. 创建 MariaDB 代码分析工程后,Sourcetrail 会创建对应的数据库,代码量比较大时,数据库的创建时间会比较长

代码导航示例

查看 MariaDB handler 类的继承关系图

  1. 在 Sourcetrail 主界面输入 handler,输入回车键

  1. handler 类的继承关系如下图所示

查看 trx_rseg_t 数据结构与其关联数据结构的关系

  1. 选择查看 trx_rseg_t 数据结构的信息

  1. trx_rseg_t 数据结构展示

Sourcetrail 代码分析工具的使用的更多相关文章

  1. Android代码分析工具lint学习

    1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...

  2. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  3. C++静态代码分析工具推荐——PVS-Studio

    长假归来,最近一直没更新,节前本来就想写这篇了,一直到今天才有时间. 关于静态代码分析在维基百科上可以查到很详细的介绍:https://en.wikipedia.org/wiki/List_of_to ...

  4. 来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧.

  5. Cppcheck 1.54 C/C++静态代码分析工具

    Cppcheck是一个C/C++代码分析工具,只检测那些编译器通常无法检测到的bug类型.   官方上建议让编译器提供尽量多的警告提示:1.使用Visual C++的话,应使用警告等级4 2.使用GC ...

  6. 阅读代码分析工具Understand 2.0试用

    Understand 2.0是一款源码阅读分析软件,功能强大.试用过一段时间后,感觉相当不错,确实能够大大提高代码阅读效率. 因为Understand功能十分强大,本文不可能详尽地介绍它的全部功能,所 ...

  7. [转载] 常用 Java 静态代码分析工具的分析与比较

    转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代 ...

  8. 【转载】常用 Java 静态代码分析工具的分析与比较

    摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后 ...

  9. VSS源代码管理器运行代码分析工具的命令

    当你发现代码库总是报需要联系管理员运行代码分析工具时,你可以使用命令分析代码库代码解决: To fix the database problems, you can restart the analy ...

  10. java静态代码分析工具infer

    infer是一个静态代码分析工具,探测bugs. 主要支持Java.C/C++ 安装:brew install infer 在线展示:https://codeboard.io/projects/115 ...

随机推荐

  1. Flutter编写的数独游戏

    一个使用Flutter编写的每日数独小游戏,支持Android和ios.代码已上传到github:https://github.com/huhx/flutter_sudoku Library 状态管理 ...

  2. distribute by在spark中的一些应用

    一.在二次排序当中的应用 1.1 说到排序当然第一想到的就是sort by和order by这两者的区别,也分情况. 在算子当中,两者没有区别,orderby()调用的也是sort.order by就 ...

  3. 配置pip源

    1.使用配置文件配置文件[global]trusted-host=pypi.doubanio.comindex-url=https://pypi.doubanio.com/simple配置文件放置位置 ...

  4. AcWing 278. 数字组合

    给定 N 个正整数 A1,A2,-,AN,从中选出若干个数,使它们的和为 M,求有多少种选择方案. 输入格式 第一行包含两个整数 N 和 M. 第二行包含 N 个整数,表示 A1,A2,-,AN. 输 ...

  5. 三款Github Copilot的免费替代

    大家好我是费老师,提起Github Copilot,相信很多读者朋友们都听说过甚至使用过,作为Github研发的一款先进的编程辅助插件,它可以在我们日常编写代码的过程中,根据代码的上下文内容.注释等信 ...

  6. PE 结构的三种地址

    三种地址   (一)VA(虚拟地址):PE 文件被 Windows 加载到内存后的地址.   (二) RVA(相对虚拟地址):PE 文件虚拟地址相对于映射基地址(对于 EXE 文件来说,映射基地址是 ...

  7. HTML5新特性之Web Storage

    Web Storage是HTML5新增的特性,能够在本地浏览器存储数据,对数据的操作很方便,最大能够存储5M. Web Storage有两种类型: SessionStorage 和 LocalStor ...

  8. .NET7 for LoongArch64(国产龙芯)

    目前龙芯通过自己的指令集LA64支持了.Net7.0.1版本,一同被支持的有Ruby,Nodejs,Java,Electron,Python等.原文:在此处 龙芯.Net7 sdk下载地址: http ...

  9. 【WebServer】项目总体流程

    1. 项目总体流程: 事件处理模式:采用Epoll边沿触发的IO多路复用技术,模拟Proactor模式: 主线程使用epoll监听与客户端连接的socket,并在主线程中对这些socket执行数据读写 ...

  10. 解决 Windows 环境下 conda 切换 Python 版本报错 NoWritablePkgsDirError: No writeable pkgs directories configured.

    1. 起因 今天运行一个 flask 项目,报错:AttributeError: module 'time' has no attribute 'clock' 一查才发现,Python3.8 不再支持 ...