Sourcetrail:半小时摸清一个陌生代码库的依赖结构
【免费下载链接】SourcetrailSourcetrail - free and open-source interactive source explorer项目地址: https://gitcode.com/GitHub_Trending/so/Sourcetrail
接手一个陌生的代码库,最先卡住你的是"这个函数到底被谁调用了"。Sourcetrail 是一个免费开源的交互式源码探索工具:它先把 C/C++、Java、Python 代码建好索引,再用一张能点能拖的关系图,把每个符号的定义和依赖摆出来。它不替代你的编辑器,专做索引和可视化导航这一件事。下面按你实际要做的动作走,每一步都写清操作、以及会发生什么。
📦 从压缩包到能跑:三个平台各一步
- Windows:解压发行包,跑
setup.exe,走完向导,从开始菜单启动。 - macOS:打开
.dmg,把Sourcetrail.app拖进 Applications。 - Linux:
.AppImage先chmod a+x,再双击或终端运行。
启动后落在 Start Window,只有几个入口:New Project(建新工程)、Open Project(开旧工程)、Recent Projects(最近列表里带一个 TicTacToe 示例)。第一次想立刻看效果,点开 TicTacToe 就行;要分析自己的代码,就点 New Project。
它全程离线。索引结果写进工程同目录的.srctrldb文件(本质是个 sqlite 库),重开工程不用重新建索引,也不上传任何东西。
📁 用编译数据库把 C++ 工程导进来
Sourcetrail 工程由若干Source Group组成,每个 Source Group 用一种语言、一批文件和一套配置去索引文件。对大多数项目,建一个 Source Group 就够。
C++/C 最省事的导入方式是编译数据库(compile_commands.json),它装好了源文件、include 路径和编译参数:
- 用 CMake:定义
CMAKE_EXPORT_COMPILE_COMMANDS导出。 - 用 Make:跑 Bear 模拟一次构建来生成。
- 用 Qt Creator(4.8+):Build 菜单里直接生成。
然后在向导里 New Project →Add Source Group→ 选 C/C++ 的 "Compilation Database" 类型,指向那份 json,再告诉它要索引哪些头文件即可。Java 对应 Gradle / Maven / 空工程三种类型,Python 走空工程类型。
Source Group 类型选择页:按语言和构建方式挑导入方式
⏳ 跑完索引,符号和关系才存下来
工程建好后它会问你要不要开始索引。点Start,状态栏会走出进度条;中途想停,点Stop或按 ESC,之后用刷新接着建。
开始时有三种刷新模式可选:Updated files(只重索引改动过的)、Incomplete & updated files(加上上次有错的)、All files(清掉旧索引全量重来)。Python 工程第一次可勾Shallow Python Indexing,按符号名快速解析、先跑个大概,再跑一遍深度索引。
跑完弹出完成对话框,列出文件数、耗时和错误数,同时图视图会把索引到的符号全铺出来。
索引结束对话框:已索引文件数、耗时与错误统计
🔎 输入一个符号,跳到它出现的所有地方
顶部搜索框用模糊匹配,可以跳着输字符。打几个字母,自动补全弹窗立刻列出命中的符号,右边标出类型,字符按节点颜色高亮。回车选中,三个视图会一起切到这个符号。
想要全文检索,就在查询前加?(不区分大小写),加??则是区分大小写。搜overview看全局概览,搜error看错误。
选中一个符号后,代码视图按文件把它的每处源码位置列成代码片段,最上面一段通常是定义。鼠标悬停到有框的位置,点一下就把选中切过去;每个文件标题栏能在 最小化 / 片段 / 整文件 三种状态间切换。
搜索视图:补全弹窗 + 全文检索命中的代码位置
几个高频键位:Ctrl+F聚焦搜索,Ctrl+G切到下一个引用,Tab在图视图和代码视图间切换焦点。
🕸️ 把调用链画成图,谁依赖谁一眼看清
点图里的节点就激活它,周围节点自动铺成它的依赖关系。图由节点(文件、类、函数、变量等)和边(include、类型使用、调用、继承、方法覆写等)组成,颜色区分类型:灰是类和类型、黄是函数、蓝是变量。
想只看一条调用链,用左上角的Custom Trail工具栏:可以直接画当前符号的调用图、继承树或 include 树。要更精确,进 Custom Trail 对话框设起点和终点("To Target Symbol"),或选 "All Referenced / All Referencing",再拖最大深度、勾节点和边的过滤器。
Custom Trail 生成的调用图:节点与边还原出符号间的调用关系
几个实用交互:点边会在代码视图里定位到那处引用;拖节点改布局;按?打开图例(Legend)对照所有节点和边的含义;左上角分组按钮能把节点按命名空间或文件合并。右键还有Save As Image(PNG/JPEG/BMP/SVG),方便把这张图贴进文档。
🔌 不离开编辑器:把位置丢给 Sourcetrail
不想切窗口,就用各编辑器的插件。VS Code、CLion/IntelliJ、Eclipse、Sublime、Vim 等都有对应插件,本质是走 Sourcetrail 的 IDE 通信端口做双向同步:
- 编辑器 → Sourcetrail:把光标停在某处,右键菜单选 "Send location to Sourcetrail",Sourcetrail 就显示这个位置上的全部符号。
- Sourcetrail → 编辑器:在代码视图里按住
Ctrl(或Cmd)点击某行,或右键选 "Set IDE Cursor",编辑器光标跳到对应位置。
CLion 里右键 "Send location",把当前符号传给 Sourcetrail
🧩 两个真实用法:定位核心模块、查废弃引用
- 接手大型项目:先用搜索定位到那个核心类,别急着通读。激活它,在图视图里看它依赖的节点——依赖特别密的那几个模块,就是你该先啃的部分。
- 维护遗留库:改完代码后按
F5刷新索引,状态栏冒出错误计数就点进去。Error 视图把没解析出的引用、不完整的文件按文件加行号列出来,哪个文件一直报错,就说明它和当前构建配置对不上。
Error 视图:按文件、行号列出索引时报错的引用位置
⚙️ 索引慢、屏显糊,去这两处调
索引太慢:
- Preferences 里把Indexer threads设成
default,它会按 CPU 自动选线程数。 - 建工程时在 Excluded Files 用
*/**通配把 test、docs 目录排除掉。 - C++ 工程指定一个Precompiled Header File,索引前先生成预编译头。
- Python 大工程第一次勾Shallow Python Indexing快扫一遍,再跑深度索引。
高分屏发糊:Linux 下在 Preferences 的Scale Factor调数值(它改的是QT_SCALE_FACTOR),或启动前QT_SCALE_FACTOR=1.2 ./Sourcetrail.sh。
排查不出来的问题:在 Preferences 勾上Logging和Indexer Logging跑一次,日志写在数据目录的logs里(Linux 在~/.config/sourcetrail)。
想从源码构建:依赖 CMake 3.12、Boost 1.67、Qt 5.12.3;启用 C/C++ 解析加 Clang 11 与-DBUILD_CXX_LANGUAGE_PACKAGE=ON,启用 Java 加 JDK 1.8 与-DBUILD_JAVA_LANGUAGE_PACKAGE=ON。
git clone https://gitcode.com/GitHub_Trending/so/Sourcetrail📚 想自己改,从这几个目录下手
- 完整交互说明:DOCUMENTATION.md,每个视图的按钮、菜单、快捷键都在里面。
- C/C++ 解析走 Clang 建 AST:src/lib_cxx/。
- Java 索引是独立 Java 进程,底层用 Eclipse JDT:java_indexer/。
- 图与存储的数据结构:src/lib/data/graph/ 和 src/lib/data/storage/。
- 想加新语言:项目提供 SDK 扩展,样例和回归用例见 testing/。
下一步别急着啃全部源码:挑一个你天天写的类,从它的调用图入手,把它依赖的那几个模块逐个激活看一遍。看完一个模块,你对这个库的骨架就有感觉了。
【免费下载链接】SourcetrailSourcetrail - free and open-source interactive source explorer项目地址: https://gitcode.com/GitHub_Trending/so/Sourcetrail
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考