VScode 结合Global构建linux源代码阅读环境

2023-11-11

1、背景介绍

上一篇文章:VScode ssh远程登陆到服务器阅读代码介绍了在VSCode工具中使用SSH远程登陆服务器加载Linux源代码,本文向大家介绍使用Global构建linux源代码阅读环境,对linux kernel代码进行解析,实现全局搜索、自动跳转、代码补全等功能。

2、加载代码

VS Code中使用SSH登陆到服务器后,点击“打开文件夹”打开linux kernel源代码:

打开源代码后效果如下:

3、过滤文件

打开源代码胡,从左侧的资源管理器中可以查看相关的文件,包含了kernel源代码所有的文件,其中部分文件比如:*.o文件、.*文件等跟代码不相关的,可以配置过滤掉跟源代码不相关的文件,使其不显示出来。

如上图所示,点击左下角的配置按钮->设置,进入设置界面,VS Code的设置分为三个层级:用户、SSH远程、工作区,层级会依次进行配置覆盖,代码过滤是跟代码工程相关,所有这里配置到工作区配置里面;图示是可视化的配置界面,也可以通过点击上图右上角标注的数字“3”所示区域图标打开文本配置,如下图所示:

配置文件过滤使其不显示出来,在工作区的 setting.json 中添加如下配置:

/* files.exclude 表明不包含在工作区中,在vscode中不显示出来*/
    "files.exclude": {
        /*true:不显示出来;false:显示出来*/
        "**/*.o":true,
        "**/.*":true,
        "**/*.su":true,
        "**/*.cmd":true,
        /* 屏蔽不用的架构相关的文件 */
        "arch/arc":true,
        "arch/alpha":true,
        "arch/[b-z]*":true,

        "board/[a-e]*":true,
        "board/[g-z]*":true,
        "board/[0-9]*":true,
        "board/[A-Z]*":true,
        "board/fir*":true,
        "board/freescale/b*":true,
        "board/freescale/l*":true,
        "board/freescale/m5*":true,
        "board/freescale/mp*":true,
        "board/freescale/c29*":true,
        "board/freescale/cor*":true,
        "board/freescale/mx7*":true,
        "board/freescale/mx2*":true,
        "board/freescale/mx3*":true,
        "board/freescale/mx5*":true,
        "board/freescale/p*":true,
        "board/freescale/q*":true,
        "board/freescale/t*":true,
        "board/freescale/v*":true,
        "configs/[a-l]*":true,
        "configs/[n-z]*":true,
        "configs/[A-Z]*":true,
        "configs/M[a-z]*":true,
        "configs/M[A-Z]*":true,
        "configs/M[0-9]*":true,
        "configs/m[a-w]*":true,
        "configs/m[0-9]*":true,
        "configs/[0-9]*":true,
        "include/configs/[a-l]*":true,
        "include/configs/[n-z]*":true,
        "include/configs/[A-Z]*":true,
        "include/configs/m[a-w]*":true,
    },
    /* search.exclude 表明不搜索的文件*/
    "search.exclude": {
        "**/node_modules": true,
        "**/bower_components": true,
        "**/*.o":true,
        "**/.*":true,
        "**/*.su":true,
        "**/*.cmd":true,
        "Documentation":true,
  
        /* 屏蔽不用的架构相关的文件 */
        "arch/arc":true,
        "arch/alpha":true,
        "arch/[b-z]*":true,
    },

效果如下所示,配置后Linux kernel 源代码arch目录下只显示arm\arm64 两个目录:

4、代码检索

接下来介绍使用Global工具实现对linux kernel的搜索、自动跳转功能。

4.1、安装Global

首先在VS code 安装 global插件:C/C++ GNU Global

然后在服务器上安装global工具(ubuntu服务器举例):sudo apt install global

安装完成后在linux服务器上使用命令查找安装路径:which is global、which is gtags

$ which is global
/usr/bin/global
$ which is gtags
/usr/bin/gtags

4.2、配置Global

在VS code 中需要对Global进行配置,上文提到VS code 的配置文件分级情况,由于global跟服务器绑定所以配置到SSH 远程 setting.json 配置文件中:

    "gnuGlobal.globalExecutable": "/usr/bin/global",
    "gnuGlobal.gtagsExecutable": "/usr/bin/gtags",
    "gnuGlobal.encoding": "Big5",

PS:VS code 在配置成中文语言时,需要配置 "gnuGlobal.encoding": "Big5",不然会报错:Failed to get GNU Global version。

配置完成后,在VS code 中按 “F1”键,输入global,选择 Show GNU Global Version,右下角如果右消息提示 global 的版本信息,那么global则安装成功:

4.3、使用Global

VS code 中按 “F1”键,输入global,选择 Global: Rebuild Gtags Database,稍等片刻消息提示:Build tag files successfull,那么global解析linux kernel源代码完成,在文件目录下会生成:GPATH、GRTAGS 、GTAGS 3个文件。

打开任意代码文件,选择相关函数或者变量,使用快捷键: CTRL+鼠标左键(或者F12),实现函数定义的跳转查询,跳转以后使用快捷键:ALT+左键头 返回;

这样就可以对linux kernel 代码进行愉快的探索了................

5、后记

使用VS Code + global工具对Linux kernel代码建立索引,实现全局搜索、自动跳转、代码补全等功能,能够愉快的阅读Linux kernel源代码了。但是Global工具在建立代码索引数据时,将整个Linux源代码都进行了数据检索分析,这样会有很多重复的定义和声明,不够智能,不够方便,下一步将介绍使用VS code +clangd 中实现根据编译文件来建立索引数据解决此问题:

VScode 结合clangd 构建linux源代码阅读环境

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VScode 结合Global构建linux源代码阅读环境 的相关文章

  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • 如何从远程 ssh 连接上运行的 tmux(复制模式)复制到本地剪贴板

    我通过 OS X 上的 VirtualBox 运行 Linux 我通过在无头状态下运行虚拟机 然后使用端口转发 sshing 到 Linux 机器来实现这一点 现在 无论复制到我的虚拟机上的剪贴板 我都可以粘贴到我的远程 ssh 会话上 但
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • 计算 TCP 重传次数

    我想知道在LINUX中是否有一种方法可以计算一个流中发生的TCP重传的次数 无论是在客户端还是服务器端 好像netstat s解决了我的目的
  • 可以作为命令行参数传递多少数据?

    在 Linux 下生成进程时可以发送多少字节作为命令行参数 gahooa 推荐了一篇好文章http www in ulm de mascheck various argmax http www in ulm de mascheck vari
  • SMP 上如何处理中断?

    SMP 对称多处理器 多核 机器上如何处理中断 内存管理单元是只有一个还是多个 假设两个线程 A 和 B 运行在不同的内核上 同时 访问页表中不存在的内存页面 在这种情况下 将会出现页面错误 并从内存中引入新页面 将会发生的事件的顺序是什么
  • 如何在perl中使用O_ASYNC和fcntl?

    我想使用 O ASYNC 选项 当管道可以读取时 SIGIO 的处理程序将运行 但以下代码不起作用 任何人都可以帮助我吗 bin env perl use Fcntl SIG IO sub print catch SIGIO n my fl
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • 提高mysql导入速度[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我有一个很大的数据库22GB 我曾经用过进行备份mysqldumpgzip 格式的命令 当我提取 gz 文件时 它会生成 sql文件的
  • 为什么默认情况下不启用 arp 忽略/通告 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个需要经验才能回答的具体问题 为什么 arp ignore arp announce 在 Linux 安装 例如 debian 上默认不启用 有
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • 在用户程序中使用 或在驱动程序模块代码中使用 ...这有关系吗?

    我正在开发一个设备驱动程序模块和关联的用户库来处理ioctl 来电 该库获取相关信息并将其放入一个结构中 该结构被传递到驱动程序模块中并在那里解压 然后进行处理 我省略了很多步骤 但这就是总体思路 一些数据通过结构体传递ioctl is u
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何从程序内部获取指向程序的特定可执行文件部分的指针? (也许是诽谤)

    我在 Linux 环境中 需要编写一个程序来检索放置在其可执行文件的某个部分中的一些数据 那么 如何从程序内部获取指向程序某个部分 通过其名称 的指针呢 我知道可以使用elf getdata 将节的索引作为参数传递给 get 和Elf Da
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之

随机推荐

  • 2023最新网络安全毕业设计题目选题大全

    0 简介 毕业季马上就要开始了 不少同学询问学长网安专业选题以及开题相关的问题 今天跟大家分享信息安全毕设选题 最新的信息安全 网络安全 专业毕设选题 难度适中 适合作为毕业设计 大家参考 学长整理的题目标准 相对容易 工作量达标 题目新颖
  • C++对象调用优化

    C 对象调用优化 临时对象拷贝构造新对象 临时对象就不会产生 常见的对象调用过程 c 编译器对于对象构造的优化 用临时对象拷贝新对象的时候 临时对象就不产生了 直接构造新对象就可以了 include
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 打造智能机器人的秘诀:利用ChatGPT提示词,让机器人更聪明

    当我们与聊天机器人交互时 我们希望它们能够理解我们的意图并提供准确 有针对性和完整的答案 然而 聊天机器人并不是神 它们需要我们的帮助才能更好地服务我们 在使用ChatGPT时 提示词就像是聊天机器人的 灵魂 可以帮助ChatGPT更好地理
  • 最近都在说移民火星,这些黑科技你了解吗?

    点击查看全文 火星移民计划是由埃隆 马斯克所对媒体透露的移民火星并在火星建立社区的计划 尽管被曝出是骗局 许多人还是对这一计划抱有极大兴趣 近年来除了美国宇航局NASA 就连民间机构SpaceX 亚马逊 荷兰公司等都着手研发火星计划 预计在
  • 死循环任务的线程结束方式

    文章目录 前言 一 两种方法 1 方法一 2 方法二 二 代码实例 1 方法一 2 方法二 总结 记录于2021年11月16日 前言 以下介绍的两种方发的适用情景不同 可根据具体需求选择使用 一 两种方法 1 方法一 用定时器去结束任务 设
  • 20230907docker安装MySQL配置

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 docker 安装 启动 docker安装 docker 设置开机启动并立即运行 docker国内镜像源配置 二 docker安装mysql 1 从hub
  • 用几句话说一说CMake add_dependencies & target_link_libraries的使用区别

    简单说一说前两天学习使用CMake解决链接问题时遇到的一个问题 对于编译时遇到的依赖问题 很多时候我们只需要一句target link libraries就可以搞定 但是CMake还有另外一个command add dependencies
  • 天梯题集——愿天下有情人都是失散多年的兄妹(隐藏条件)

    愿天下有情人都是失散多年的兄妹 解题思路 利用结构体读入每个 ID 下数据 隐藏条件 标记父母的性别 卡死个人 假设判断 a b 是否可通婚 同性输出 Never Mind 不同性 bfs标记 a 的五代内的祖先 check检查 b 五代内
  • Bert base和 Bert large参数对比

    Bert base的网络结构 L 网络层数 12 H 隐藏层维度 768 A Attention 多头个数 12 Total Parameters 12 768 12 110M 使用GPU内存 7G多 Bert large的网络结构 and
  • 基础篇:ios开发概述

    1 介绍 iOS是由苹果公司开发的移动操作系统 苹果公司最早于2007年1月9日的Macworld大会上公布这个系统 最初是设计给iPhone使用的 后来陆续套用到iPod touch iPad上 iOS与苹果的macOS操作系统一样 属于
  • 图像拼接 之 特征点匹配

    图像拼接 之 特征点匹配 介绍 特征点对搜索 建立 K D 树 搜索 K D 树 特征点对的筛选 计算单应性矩阵 基于特征点对计算单应性矩阵 RANSAC 优化单应性矩阵 总结 参考资料 介绍 在人们实际生活和工作中时常需要获得宽视角 高分
  • 如果一个类实现接口,那么它要实现这个接口所有的方法吗?如果这个类继承抽象类呢?

    一个类实现接口和继承抽象类对于抽象方法的实现原则是相同的 1 如果这个类是个普通类 那么必须实现这个接口 抽象类的所有抽象方法 2 如果这个类是个抽象类 那么不必实现这个接口 抽象类的抽象方法 因为抽象类中可以定义抽象方法 接口中定义的属性
  • 推荐一个开源的区块链开发者工具网站

    开源区块链开发者工具箱 https ChainTool tech 今天可以正式上线了 ChainTool 使用完全开源的方式编写一些开发者日常经常使用的工具 关于 ChainToolDAO 大约在两个月前 ChainToolDAO 成立了
  • 立体匹配 --视差预测‘soft argmin‘

    1 立体匹配的关键任务就是预测精准的视差图 对于视差图每一个像素位置的值并不是 0 255 灰度值 而是一个视差值 2 那么这些视差值如何得到的呢 最开始是由传统方法的 argmin 得到 arg min 就是使后面这个式子达到最小值时的变
  • windows系统下帧率获取工具--fraps

    系列文章目录 文章目录 系列文章目录 前言 二 fraps使用 1 下载 2 使用 前言 我们在展示三维场景 或者是查看游戏帧率 可以使用帧率显示工具 Fraps Fraps是一款显卡辅助软件 有了它可以很轻松的了解电脑上正在运行游戏的帧数
  • 电脑桌面下方的任务栏卡死解决方案:

    重启 Windows资源管理器 方法 1 按 Ctrl Alt Del 打开 任务管理器 切换到 进程 选项卡 2 找到 Windows资源管理器 鼠标右击选中 重新启动
  • 服务器UDIMM、LRDIMM、RDIMM的区别

    随着应用程序的增加 存储器不得不承受更大的压力 现在 无论是服务器租赁还是PC领域 DDR4存储技术仍然是主流 DDR4为了保证并行数据的有效传输 必须在存储器上下功夫 在服务器领域 现在使用的存储器类型 DIMM 主要有UDIMM RDI
  • JavaScript设计模式(一)——构造器模式、原型模式、类模式

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 正逐渐往全干发展 个人状态 研发工程师 现效力于中国工业软件事业 人生格言 积跬步至千里 积小流成江海 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 3项目实战 Node js
  • VScode 结合Global构建linux源代码阅读环境

    1 背景介绍 上一篇文章 VScode ssh远程登陆到服务器阅读代码 介绍了在VSCode工具中使用SSH远程登陆服务器加载Linux源代码 本文向大家介绍使用Global构建linux源代码阅读环境 对linux kernel代码进行解