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. uni-app 真机运行

    运行-运行到手机或模拟器 注意事项: 1.真机运行时需要开启开发者选项中的USB调试和USB安装,否则app无法通过USB安装到手机或平板中. 2.模拟器功能有,单模拟机没有,需要自己安装,然后开放端 ...

  2. Nacos必知必会:这些知识点你一定要掌握!

    前言 Nacos 是一个开源的服务发现.配置管理和服务治理平台,是阿里巴巴开源的一款产品. Nacos 可以帮助开发者更好地管理微服务架构中的服务注册.配置和发现等问题,提高系统的可靠性和可维护性. ...

  3. Springboot——参数校验

    springboot参数校验注解 在controller层需要对前端传来的参数进行校验 校验简单数据类型 使用springboot自带的validation工具可以从后端对前端传来的数据进行校验 使用 ...

  4. 使用C语言实现简单的通用的链表

    在数据结构中,我们已经学习到了简单的静态链表以及单链表和双链表,它们各有优缺点,但是有个共同的问题是他们呢无法存储不同的数据.下面提供了一种方法,可以将不同节点的数据链接起来. 下面的代码都是基础的C ...

  5. Hive执行计划之什么是hiveSQL向量化模式及优化详解

    Hive开启向量化模式也是hiveSQL优化方法中的一种,可以提升hive查询速率,也叫hive矢量化. 问题1:那么什么是hive向量化模式呢? 问题2:hive向量化什么情况下可以被使用,或者说它 ...

  6. Handler机制实现原理总结

    Handler一般用于线程间通信,如常用的子线程使用handler让主线程更新UI.那么这是怎么实现的呢? 我们先把这个大问题分解成多个小问题: post();postDelayed();sendMe ...

  7. 区块链的Token机制如何理解?

    区块链的Token机制如何理解? 为了更好的理解区块链和Token的关系,今天专门基于互联网中的内容,做了下筛选过滤,从而可以让大家更好的理解,对于Token,如果是从事过开发的同学来说,比如容易理解 ...

  8. 逍遥自在学C语言 | 指针和数组的关联

    前言 指针和数组之间存在着紧密的关系.在本文中,我们将探讨指针和数组的关系.指针算术和数组遍历.多维数组与指针以及指针数组和数组指针. 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 ...

  9. 全志G2D实现屏幕旋转,开机logo实现手动旋转。

    产品设计出来之后啊,大家使用的时候觉得反过来使用更加便捷.但是屏幕显示是反的.那怎么办那????? 修改硬件费时费工,那能否软件实现那????? 如果纯软件使用那就太费系统资源了.于是就想到了使用全志 ...

  10. 【论文阅读】Learning Deep Features for Discriminative Localization

    这个是周博磊16年的文章.文章通过实验证明,即使没有位置标注,CNN仍是可以得到一些位置信息,(文章中的显著性图) CNN提取的feature含有位置信息,尽管我们在训练的时候并没有标记位置信息: 这 ...