广西网站怎么制作,二楼平台设计,外贸网站怎么做关键词,4399国语免费播放VScode(8)之阅读大型CC工程(Linux内核)代码
Author#xff1a;Once Day Date#xff1a;2023年4月25日/2024年3月17日
漫漫长路#xff0c;有人对你微笑过嘛…
全系列文章请查看专栏: VScode开发_Once-Day的博客-CSDN博客
参考文档:
1. 历史包袱
由于上世纪70-80年代的…VScode(8)之阅读大型CC工程(Linux内核)代码
AuthorOnce Day Date2023年4月25日/2024年3月17日
漫漫长路有人对你微笑过嘛…
全系列文章请查看专栏: VScode开发_Once-Day的博客-CSDN博客
参考文档:
1. 历史包袱
由于上世纪70-80年代的硬件限制C语言的编译解析是单遍编译(one pass)缺乏现代javapythongo等语言的模块化解析功能这导致解析语法树需要“走一遍”上下文环境。
简单来说如果不把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提供的一个解析代码的工具。生成二进制的数据库对于大型代码工程非常有帮助。
GNU Global source code tagging system
下面是官网的介绍传统上一般和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 editorcapability 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里面了所以可以忽略下面的步骤:
可以在.gitignore中添加上面上个三个文件但是这会对.gitignore造成改动。在.git/info/exclude中添加上面三个文化这个是本地仓库屏蔽。
此外也可以使用clangd工具。
借助clangd实现VSCode C代码补全 - 知乎 (zhihu.com)
3. 下面是使用实例截图
GNU Global不能支持变量解析因此无法跳转变量这个需要依靠cpp_tools进行解析。
函数跳转 宏定义跳转 源文件函数(标识符)列表 结构体类型定义跳转