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

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源代码阅读环境

  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
构建水下动态3D环境需要考虑到很多因素,例如水的物理特性、光照效果、水下生物、植被等等。下面是一个简单的Unity代码示例,可以实现水下动态3D环境: 1. 创建一个水体 ``` GameObject water = GameObject.CreatePrimitive(PrimitiveType.Plane); water.transform.position = new Vector3(0, 0, 0); water.transform.localScale = new Vector3(100, 1, 100); water.GetComponent<MeshRenderer>().material = waterMaterial; // 水的材质,可以通过调整材质属性实现水的效果 ``` 2. 添加水面的波动效果 ``` using System.Collections; using System.Collections.Generic; using UnityEngine; public class Water : MonoBehaviour { public float waveSpeed = 1f; public float waveHeight = 0.1f; public float waveFrequency = 0.5f; private Vector3[] baseHeight; void Start() { Mesh mesh = GetComponent<MeshFilter>().mesh; baseHeight = mesh.vertices; } void Update() { Mesh mesh = GetComponent<MeshFilter>().mesh; Vector3[] vertices = new Vector3[baseHeight.Length]; for (int i = 0; i < vertices.Length; i++) { Vector3 vertex = baseHeight[i]; vertex.y += Mathf.Sin(Time.time * waveSpeed + baseHeight[i].x * waveFrequency + baseHeight[i].y * waveFrequency) * waveHeight; vertices[i] = vertex; } mesh.vertices = vertices; mesh.RecalculateNormals(); } } ``` 这个脚本可以实现水面的波动效果,可以根据需要调整波动速度、高度和频率。 3. 添加光照效果 在场景中添加光源,并使用合适的光照设置来实现逼真的水下光照效果。可以使用Unity内置的全局照明渲染(Global Illumination)系统或使用第三方插件来实现。 4. 添加水下生物和植被 通过在场景中放置水下生物和植被的模型,或使用粒子系统来实现。 需要注意的是,以上只是一个简单的示例,实现水下动态3D环境需要根据具体的需求和场景来进行更加详细的设计和开发。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

module_exit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值