VScode(8)之阅读大型CC++工程

VScode(8)之阅读大型CC++工程(Linux内核)代码

Author:Once Day Date:2023年4月25日/2024年3月17日

漫漫长路,有人对你微笑过嘛…

全系列文章请查看专栏: VScode开发_Once-Day的博客-CSDN博客

参考文档:

1. 历史包袱

由于上世纪70-80年代的硬件限制,C语言的编译解析是"单遍编译(one pass)",缺乏现代java,python,go等语言的模块化解析功能,这导致解析语法树需要“走一遍”上下文环境。

简单来说,如果不把include的文件走一遍,解析器无法确定各类符号的确切含义,而对于大型C/C++项目,随便include一个头文件,背后可能就有几千上万行代码,对于解析器来说,负担很大。

对于阅读大型的C/C++项目代码,需要一些辅助手段,下面是针对VScode的配置情况。

2. C和C++插件

vscode需要安装以下插件,以便提供良好的

  • C/C++ ,必备插件,。
  • c/c++ Extension Pack,扩展包。
  • c/C++ GNU Global,支持gtags。
  • GitLens,用于查看git commit记录和相关操作。
  • GitLab Workflow,用于查看代码MR和review,支持语法查询。
2. GNU Global源码标签数据库

此外Linux服务器需要安装global,这是gnu提供的一个解析代码的工具。生成二进制的数据库,对于大型代码工程非常有帮助。

下面是官网的介绍,传统上一般和Vim/Emacs等编辑器集成:

GNU Global is a source code tagging system that works the same way across diverse environments, such as Emacs editor, Vi editor, Less viewer, Bash shell, various web browsers, etc.

You can locate various objects, such as functions, macros, structs, classes, in your source files and move there easily. It is useful for hacking on large projects which contain many sub-directories, many #ifdef and many main() functions. It is similar to ctags or etags, but is different from them in the following two points:

  • independence of any editor
  • capability to treat definition and reference

It runs in UNIX (POSIX) compatible operating system, like GNU and BSD.

对于ubuntu系统,直接apt install global即可。其他linux系统仿照如此即可。

对于内网环境下的linux主机,需要本地编译运行,代码可在官网下载,或者下面的内网目录

/mnt/sata0/chenguang/global-6.6.9.tar.gz

复制到~家目录解压后,cd源码目录,./configure配置编译,然后make编译,最终make install即可

使用vscode连接ssh打开服务器上的内核代码文件夹。

设置配置文件(没有就新建)如下.vscode/settings.json:

{
    "C_Cpp.default.intelliSenseMode": "linux-gcc-x64",
    "search.followSymlinks": false,
    "C_Cpp.default.browse.limitSymbolsToIncludedHeaders": true,
}

"search.followSymlinks": false很关键,大型C工程代码有些文件是符号链接文件,可能造成循环引用,这会导致cpptool直接cpu占用拉满。其他配置字段的含义,可以自行百度,网上介绍非常多。

接下来是使用global生成代码解析文件,直接在vscode里面按下F1,然后搜索global

在这里插入图片描述

第一个命令是建立数据库,执行一次即可,如果代码改变,也可以再执行一次。

这个过程会在后台一直运行,大概几分钟,等着就好。如果运行正常,目录下面会出现三个文件:

-rw-r--r--   1 ubuntu ubuntu        17M Jan  5 23:27 GPATH
-rw-r--r--   1 ubuntu ubuntu       534M Jan  5 23:27 GRTAGS
-rw-r--r--   1 ubuntu ubuntu       708M Jan  5 23:27 GTAGS

可以看到,数据是非常大的,然后就可以正常在代码使用跳转等功能了。

一般开源的大型C/C++大型项目,这三个文件已经在.gitignore里面了,所以可以忽略下面的步骤:

  1. 可以在.gitignore中添加上面上个三个文件,但是这会对.gitignore造成改动。
  2. .git/info/exclude中添加上面三个文化,这个是本地仓库屏蔽。

此外也可以使用clangd工具

3. 下面是使用实例截图

GNU Global不能支持变量解析,因此无法跳转变量,这个需要依靠cpp_tools进行解析

函数跳转

在这里插入图片描述

宏定义跳转

在这里插入图片描述

源文件函数(标识符)列表

在这里插入图片描述

结构体类型定义跳转

在这里插入图片描述

  • 70
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 100
    评论
VSCode是一款轻量级的集成开发环境(IDE),它支持多种编程语言,并且具有丰富的插件生态系统。"Run and Debug"是VSCode提供的功能之一,它可以帮助开发者在编辑代码的同时进行程序的运行和调试。 使用"Run and Debug"功能,你可以通过以下步骤来配置和运行你的程序: 1. 打开VSCode,并确保已经安装了相应的编程语言扩展和调试器插件。 2. 在VSCode中打开你的项目文件夹。 3. 在左侧的侧边栏中,点击调试图标(一个虫子的图标)或按下快捷键`Ctrl+Shift+D`来打开调试视图。 4. 在调试视图中,点击顶部的"创建一个启动配置文件"按钮,选择你要调试的编程语言和调试器。 5. 根据你选择的编程语言和调试器,VSCode会自动生成一个初始的调试配置文件(launch.json)。 6. 在launch.json文件中,你可以配置程序的启动参数、工作目录、环境变量等。 7. 配置完成后,你可以在代码中设置断点,然后点击调试视图中的"启动调试"按钮或按下快捷键`F5`来开始调试。 8. 调试过程中,你可以使用调试视图中的各种调试控制按钮(如继续、暂停、单步执行等)来控制程序的执行。 9. 在调试过程中,你可以查看变量的值、调用栈、输出信息等,以帮助你分析和解决问题。 10. 调试完成后,你可以点击调试视图中的"停止"按钮来结束调试。 总结一下,"VSCode+Run and Debug"提供了一个方便的开发环境,可以帮助你在编辑代码的同时进行程序的运行和调试,提高开发效率和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 100
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值