gtags

news/2025/11/24 18:45:57/文章来源:https://www.cnblogs.com/jarico/p/19265328

针对您的情况(AOSP 代码量巨大、离线环境、无 root 权限、需安装在用户目录),我强烈推荐使用 GNU GLOBAL (Gtags) 配合 Universal Ctags

为什么选择 GNU GLOBAL (Gtags)?

  1. 比 Ctags 强大:Ctags 只能跳到定义(Definition)。Gtags 不仅支持定义,最重要的是支持反向引用(Reference)查询(即“谁调用了这个函数”),这对阅读 AOSP 这种复杂的代码至关重要。
  2. 性能优秀:处理 AOSP 这种几十 GB 的代码库,Gtags 的索引速度和查询速度都优于老牌的 Cscope。
  3. 独立性:不需要像 Language Server (LSP/Clangd) 那样依赖构建系统(Android.bp/Makefile),直接扫描源码。
  4. 适合离线/用户安装:非常容易通过源码编译安装到 $HOME 目录,不依赖复杂的外部库。

以下是针对您限制条件的分步实施方案


第一步:在有网的机器上下载源码

您需要下载以下两个工具的源码包(推荐 .tar.gz 格式):

  1. Universal Ctags (作为 Gtags 的后端解析器,比 Gtags 自带的解析器支持更多语言):
    • 下载地址:GitHub Releases 页面的 ctags-p5.9.xxxx.tar.gz (或者找名为 universal-ctags 的源)
    • 如果找不到稳定版 tarball,下载 Exuberant Ctags (ctags-5.8) 也可以,但 Universal Ctags 对新语法支持更好。
  2. GNU GLOBAL:
    • 下载地址:GNU FTP
    • 下载最新版,例如 global-6.6.x.tar.gz
  3. ncurses (可选):
    • 如果服务器极其精简,编译 Global 时可能会报错缺少 ncurses 库。建议顺便下载一个 ncurses.tar.gz 备用。

第二步:拷贝并安装到您的 Home 目录

将下载的压缩包拷贝到服务器您的个人目录下(例如 ~/downloads)。

假设您的目标安装目录是 ~/local(这样不会污染公共环境)。

1. 编译安装 Universal Ctags

需要注意的是如果./执行没有权限,就需要 chmod a+x xxx 赋值权限

tar -xzvf ctags-*.tar.gz
cd ctags-* 
# 注意:如果是 Universal Ctags 源码,可能需要运行 ./autogen.sh,但这需要 autotools。
# 建议下载包含 configure 脚本的 release 包。./configure --prefix=$HOME/local
make -j8
make install

2. 编译安装 GNU GLOBAL

这是关键一步,我们需要告诉 Global 使用我们刚才安装的 Ctags 作为后端,并且安装到个人目录。

tar -xzvf global-*.tar.gz
cd global-*# --prefix 指定安装路径
# --with-exuberant-ctags 指定刚才安装的 ctags 路径
./configure --prefix=$HOME/local --with-exuberant-ctags=$HOME/local/bin/ctagsmake -j8
make install

第三步:配置环境变量

为了让系统识别您安装的工具,需要修改您的 Shell 配置文件(通常是 ~/.bashrc~/.zshrc)。

# 编辑 ~/.bashrc,在末尾添加:export PATH=$HOME/local/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/lib:$LD_LIBRARY_PATH# 告诉 Gtags 默认使用 Exuberant/Universal Ctags 解析
export GTAGSCONF=$HOME/local/share/gtags/gtags.conf
export GTAGSLABEL=ctags

保存后,执行 source ~/.bashrc 生效。
验证安装:输入 which globalwhich ctags,应该显示 ~/local/bin/ 下的路径。

第四步:在 AOSP 中生成索引

进入 AOSP 根目录,执行:

# 这一步会非常耗时(视机器性能,AOSP全量可能需要30分钟-1小时)
# 生成的文件名为 GTAGS, GRTAGS, GPATH
gtags

优化建议:
AOSP 包含大量构建产物(out 目录)和 .repo 目录,不应该索引它们。
您可以在 AOSP 根目录创建一个 gtags.files 文件,列出需要索引的文件列表,或者简单的使用 gtags 忽略参数(如果版本支持),但最简单的方法是利用环境变量或忽略文件。

Global 默认会忽略 .git 等目录。对于 AOSP,建议忽略 out/.repo/
您可以创建一个 .notags 文件(类似 .gitignore)放在 AOSP 根目录(如果版本支持),或者直接让 gtags 忽略特定目录不是特别方便。

更实用的 AOSP 索引策略:
通常我们不需要索引整个 AOSP(太大,生成文件可能有几 GB)。如果您只关注 Frameworks 或 Kernel,建议只在该目录下运行 gtags

如果必须索引全量,建议使用 -i (incremental) 参数进行增量更新:

gtags -i

第五步:在编辑器中使用

  • Vim: 安装 gtags.vim 插件(Gtags 源码包里通常自带,或者使用 vim-gutentags 插件自动管理)。
    • .vimrc 中配置 set cscopetag,Vim 会自动使用 Gtags 的数据库像 Cscope 一样工作。
    • 常用命令:Ctrl+] 跳转定义,:cs find s symbol 查找引用。
  • VS Code: 安装 C/C++ GNU Global 插件。

总结

GNU GLOBAL + Universal Ctags 是离线、无 root 环境下索引 AOSP 的最佳方案。它只在您的 $HOME/local 下生成几个二进制文件,完全不影响他人,且提供了代码阅读最核心的“跳转定义”和“查找引用”功能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧姆定律是个啥?

2025/11/24常用的电学量物理量 符号 单位(简称/全称)电压 U V / 伏特电流 I A / 安培电阻 R Ω / 欧姆功率 P W / 瓦特 欧姆定律核心定律I = U / R U = I * R R = U / I电流 = 电压 / 电阻 电压 = 电流 * 电阻 电阻…

抖音投流健康领域领航者——苏州诊途赋能品牌全域增长 - langchain

在短视频营销的新时代,如何让品牌在抖音平台脱颖而出?苏州诊途健康科技有限公司,专注抖音投流领域,为您提供精准高效的流量解决方案。 公司总部位于苏州,并在杭州、重庆等核心城市设立分支机构,构建起覆盖全国的…

Windows后门排查_2025/11/24(持续更新)

Windows后门排查_2025/11/24(持续更新)Windows后门排查 dll劫持 dll劫持介绍 劫持原理: 为了性能需求,程序开发时会同时开发一些dll文件,不过并没有指明绝对路径;所以程序启动时就会寻找并加载这些dll文件,寻找…

2025年11月江苏徐州系统门窗隔热条、江苏门窗隔热条、国标隔热条、隔热条、定制隔热产品厂家综合推荐指南

摘要 随着建筑节能标准的提升和消费者对门窗性能要求的提高,系统门窗隔热条行业在2025年迎来了快速发展期。隔热条作为影响门窗隔热性能的关键部件,其质量直接关系到整个门窗系统的保温效果和使用寿命。本文基于市场…

188. 买卖股票的最佳时机 IV -- DP问题如何确定dp数组的含义以及状态转移方程?

188. 买卖股票的最佳时机 IV 如何推导状态转移方程? 当前层的每一个状态来自上一层的哪些状态? 若状态转移方程中出现复杂计算,改变dp数组的定义或增加dp数组的维度。 class Solution {public int maxProfit(int k,…

博客园真不错

BbS.23bbb1.InFo/AuSt/2025_1.tmL BbS.23bbb1.InFo/AuSt/2025_2.tmL BbS.23bbb1.InFo/AuSt/2025_3.tmL BbS.23bbb1.InFo/AuSt/2025_4.tmL BbS.23bbb1.InFo/AuSt/2025_5.tmL BbS.23bbb1.InFo/AuSt/2025_6.tmL BbS.23bbb…

程序人生必读:如何通过读书会提升工艺深度与广度

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MAF快速入门(2)Agent的花样玩法

上一篇,我们学习了如何使用MAF创建一个简单的Agent,这一篇我们学习下MAF对于单个Agent的花样玩法,这些玩法可以极大扩展我们对于Agent的适用场景。大家好,我是Edison。 上一篇,我们学习了如何使用MAF创建一个简单…

效率与安全的双引擎:聚焦合同管理中的印章文识别技术

在合同管理的数字化进程中,我们往往追逐于复杂的技术幻象,却忽略了最本质的数据价值。一枚印章,其最核心的信息并非它的轮廓与色彩,而是它所承载的文字内容。剥离防伪鉴定的复杂外衣,聚焦于将印章图像精准转化为结…

re笔记1

polar 简单re-shell 打开后查壳,用upx -d 脱壳 找到主函数(其实不是主函数,没加载完导致跳转错了) // attributes: thunk int __stdcall sub_45CC60(int a1, int a2, int a3, int a4, int a5) { return sub_4795…

海外求职必备:多语言AI简历工具如何助力求职外企和跨国公司

全球人才流动的趋势日益显著,海外求职已成为越来越多职场人实现职业突破的关键一步。然而,跨越国界寻找工作,除了应对语言障碍,更要面对不同国家和地区在简历格式、文化偏好乃至职业表达上的巨大差异。 一份未能精…

MATLAB/Simulink水箱水位控制系统实现

一、系统建模与参数设定 1.1 水箱动力学模型 质量守恒方程: \(A\frac{dh}{dt}=Q_{in}−Q_{out}\) 其中:\(A\):水箱横截面积(m) \(h\):水位高度(m) \(Q_{in}\):进水流量(m/s) \(Q_{out}\):出水流量(m/s)阀…

AI语言大模型支持下的:SCI论文从设计到发表的全流技巧(选题、文献调研、实验设计、数据分析、论文结构及语言规范) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ai元人文:前言

Ai元人文:前言 AI元人文”不是一个企图统治世界的“哲学帝国”,而是一个旨在促进人机之间、学科之间良性互动的“协作生态”。它谦卑地承认权重的决定权属于全人类,并明智地将自己的雄心限定在解决“人机文明”这一…

Oracle ASM存储维护实践与规范指南

Oracle ASM存储维护实践与规范指南在现代融IT架构中,Oracle Automatic Storage Management (ASM) 已成为数据库存储管理的首选方案,尤其在RAC(Real Application Clusters)环境中,它提供了高效、可靠且易于管理的共…

新露谷物语-新手指南:

星露谷物语天行建--------君子以自强不惜

从 runC 到 runD:SAE 如何用 “装甲级” 隔离,化解运维安全焦虑!

阿里云 Serverless 应用引擎 SAE 是面向 AI 时代的一站式容器化应用托管平台,以“托底传统应用、加速 AI 创新”为核心理念。它简化运维、保障稳定、闲置特性降低 75% 成本,并通过 AI 智能助手提升运维效率。作者:张…

实用指南:SAP MM 采购申请转采购订单功能分享

实用指南:SAP MM 采购申请转采购订单功能分享2025-11-24 18:24 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

ddddocr: 滑块验证码的一个例子

一,代码: from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import Byfrom sel…

恢复Windows图片查看器

将下面的内容保存为 .reg 文件,双击运行即可。 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Applications\photoviewer.dll][HKEY_CLASSES_ROOT\Applications\photoviewer.dll\shell][HKEY_CLASSES_ROOT…