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

1. 使用 vs-code 来阅读源码 地址:https://github.com/kubernetes/kubernetes/releases/tag/v1.25.15。目录,这时会提示我们下载 go 库,按照提示下载按照即可。然后 kubernetes 本身是支持 gomod 的,但源码这里提供了所有的依赖在。接着重启 vscode,这时会提醒我们下载更多依赖库,按照提示下载按照即可。我的电脑 -> 属性 -> 高级系统设置 -> 环境变量,添加如下形式。目录下,可以将此目录内的文件复制到。使用 vscode 打开。目录,注意目录层次, 阅读详情
AI摘要

本文介绍了如何在VScode中配置插件和工具,如C/C++ExtensionPack、GNUGlobal和GitLens,以优化阅读和处理包含大量include文件的Linux内核C++项目。重点讲解了GNUGlobal的安装与使用,以及如何设置VScode配置以减少内存消耗和实现代码跳转功能。

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

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

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

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

参考文档:

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进行解析。

函数跳转:

在这里插入图片描述

宏定义跳转:

在这里插入图片描述

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

在这里插入图片描述

结构体类型定义跳转:

在这里插入图片描述

使用VScode + clangd 阅读 c/c++ 源码环境搭建 clangd 是一个应用程序,可以实现对c项目中的符号定义跳转,函数补全等功能。Vscode 是文本编辑器,可以使用clangd 插件与服务器上的clangd 交互,实现vscode编辑器内的符号跳转等。 阅读详情

相关推荐

【全网最细】VScodeC++配置和发光字体教程

VScode和Gcc安装教程【全网最细】【不会你来找我】

skstudio的博客 2105

使用VSCode进行linux内核代码阅读和开发

使用VSCode进行linux内核代码阅读和开发现状新的方法安装与配置1.安装VSCode2.安装Remote - SSH插件3.添加远程主机4.安装clangd5.在远程服务器安装bear6.配置clangd7.触发clangd工作效果遇到的问题总结参考链接 现状 Linux内核由于其本身代码量庞大,其中又包含各种平台宏定义开关/配置,外加各种结构体指针的注册,这使得阅读内核代码变成一件令人头疼的事。针对这个问题目前常见的解决方案有以下几种: 使用简单的文本浏览工具 + grep进行代码搜索浏览,这种方

xhnmdlfl的博客 3万+

Windows VSCode配置MPI开发环境:从零搭建高性能计算开发平台

并行计算是处理大规模数据模拟和高性能计算任务的核心技术,其核心原理是通过消息传递接口(MPI)实现多进程间的通信与协同工作,从而将计算任务分布到多个处理器核心或计算机节点上执行,显著提升计算效率。在工程实践中,MPI为科学计算、气候模拟、流体力学等复杂应用场景提供了标准化的并行编程模型。对于需要在Windows平台进行并行程序开发的工程师和研究人员,配置稳定高效的开发环境是首要挑战。本文聚焦于在Windows系统下,使用轻量级编辑器VSCode,结合MS-MPI和MinGW-w64工具链,手把手指导如何搭建

weixin_33754065的博客 401

VSCode代码阅读工具

在vosdecode设置中搜索 aide 配置如图(我这里使用deepseek,注册有免费500w token,体验相应功能)vscode拓展搜索aide并安装。主要功能:代码帮助阅读、代码转换。

lostmagicyan的博客 1492

大模型周榜解读:GLM与Kimi API接入实践指南

大模型评测榜单是技术选型的重要参考,它通过标准化测试严谨对比不同模型的综合能力与细分表现。理解榜单背后的评测维度与权重设计,能够帮助开发者在众多模型中快速定位适合业务的方案。随着国产大模型快速发展,API接入成为最便捷的使用方式,开发者可以通过官方SDK将模型能力集成到应用中。本文以智谱GLM和月之暗面Kimi为例,讲解从API调用到本地部署的完整路径,并给出成本控制与模型选型的实践建议。

weixin_34208185的博客 548

20亿Token写C++编译器:AI编程的Token消耗与工程控制

在AI辅助编程中,Token是模型处理文本与计费的基本单位,代码中的符号、缩进和注释都会显著增加Token消耗。大型软件项目如编译器,因其模块复杂、语义验证严格,天然成为Token消耗的黑洞。理解Token的构成原理与消耗规律,不仅能帮助开发者合理规划AI编程预算,还能提升复杂工程的交付质量。在实际开发中,掌握如何拆分任务、控制上下文长度、优化TPM(每分钟Token吞吐量)与测试驱动验证,是降低无效消耗、提升AI产出效率的关键。无论是嵌入式工具链的环境配置,还是vscode配置c++环境、visual c

weixin_33824363的博客 454

Vscode配置CC++编程环境的使用体验优化和补充说明

文章目录快速编译运行????code runner插件方案Code Runner Configuration直接配置相关指令和快捷键默认task配置和取消默认配置文件补充介绍(可选 推荐阅读)????使用vscode预置变量和环境变量环境变量的使用使用环境变量的好处环境变量可能引起的问题检查编译器所在目录是否正确配置进Path变量简化...

cnzzs的博客 549

C++编译错误‘vector‘ does not name a type:从环境配置到STL容器的完整解决方案

在C++编程中,头文件包含和命名空间管理是基础且关键的概念,它们直接关系到编译器能否正确识别代码中的标识符。其原理在于,C++标准库的所有组件都封装在特定的头文件和std命名空间中,编译器需要明确的指引来定位这些定义。掌握这些机制的技术价值在于,能够避免常见的编译错误,并编写出符合现代C++工程实践的高质量代码。这一知识在多种应用场景中至关重要,例如在配置VSCode、CLion等集成开发环境时,或是在处理多文件项目中的依赖关系时。本文聚焦于解决典型的‘vector‘ does not name a typ

hqmln的博客 753

用C语言开发NES游戏(CC65) 准备工作

粘贴到优快云格式没调,想看格式好的点下面 https://happysoul.github.io/nes/nesdoug/ 你需要什么 这是你编写NES游戏所需要的 1.汇编程序(或编译器) 2.贴图编辑器 3.Photoshop或GIMP(或类似) 4.Notepad ++(或类似) 5.一个好的NES模拟器 6.一个贴图地图程序 7.python 3(可选,...

firseve的专栏 1946

VSCode代码查看工具

相当方便好用的 VSCode代码查看工具,和sourceinsight有得一比

【开关电源】开关电源实战经验分享

开关电源原理设计、Layout设计经验分享

weixin_42098658的博客 4166

Vscode配置CC++编程环境的使用体验优化@相关指令和快捷键配置@编译调试模式选择@CodeRunner一键编译运行@补充说明

下面我给出自己的配置,其特点是基本满足各种编译需求,适用于轻量的C/C++编译在讲具体配置内容之前,先了解以下内容tasks.json中的tasks数组每个元素是一个对象,视为一个build task,分别表示一种build源代码的方案首先我的建议是取一个合适的task名字,在各个task对象的label字段中配置,名字可以设置的简单一些不需要担心命名太简单而看不出配置的用途,因为我们可以在detail字段中写入详细的信息将label字段设置的简单的好处在于中的。

xuchaoxin1375的博客 1439

目标检测技术的发展:从R-CNN、YOLO到DETR、DINO

OV-DINO的出现标志着在开放域目标检测领域的重大进步,其在处理未见过的物体类别时的能力得到了显著提升。这项技术对于需要适应未知或变化环境的应用具有重要意义,如自动驾驶、机器人视觉、安防监控等。

DeepAIedu的博客 2628

vscode 的tab与空格设置 ,vscode使用sftp配置 ,vscode代码补全插件

vscode默认就是一个tab=4个空格,若想要修改请进入seting里面设置。3.也可以选择:将缩进转换为制表符,然后保存即可。目前使用shell-format。目前使用Clang格式化风格。

喜欢打篮球的普通人 1万+

保姆级教程:用SNAP处理哨兵一号数据,5步搞定城区范围提取(附江西晋城案例)

本文提供了一份详细的保姆级教程,介绍如何使用SNAP软件处理哨兵一号数据,通过5个关键步骤快速提取城区范围。以江西晋城为例,教程涵盖数据准备、预处理、核心处理流程、自动化搭建及成果分析,帮助用户轻松掌握SNAP操作技巧,适用于城市规划、环境监测等领域。

weixin_32535389的博客 452

IPV6基本配置

IPV6配置,DHCPV6,华为模拟器,IPV6的M/O标志位

路漫漫其修远兮 4665

【2026年5月5日】Win11最新版VSCode下的Claude+Deepseek-V4[1m]安装与配置

Win11最新版VSCode下的Claude+Deepseek-V4[1m]安装与配置

北邮22级信通一枚 1853

在 Windows 上使用 Anaconda 创建 配置 YOLOv8虚拟环境,并更改 pip 源以及以 可编辑模式 安装ultralytics

前往 NVIDIA cuDNN 下载页面,下载与您安装的 CUDA 版本匹配的 cuDNN 版本。:根据您的系统和 CUDA 版本,选择适当的 whl 文件。如下12.7,表示最高可装12.7版本CUDA,与上图中的支持的最高cuda版本一致。,无需重新安装,从而大幅提升开发效率,适用于项目开发、调试或依赖本地未发布的版本时使用,但需确保当前目录包含。:访问 NVIDIA 官方网站,下载与您的显卡和操作系统兼容的 CUDA 版本。首先,确保NVIDIA 显卡支持 CUDA,并安装相应版本的驱动程序。

weixin_44115575的博客 1891

在MacOSX上使用VSCode 查阅、调试NGINX代码

原文作者:宗兆伟 原文链接:在MacOSX上使用VSCode 查阅、调试NGINX代码 - NGINX开源社区 转载来源:NGINX开源社区 NGINX是一款十分流行的开源软件,代码量有17万行。如何从代码学习、研读它成为一个很挑战的问题。如果能够凭借VSCode等调试工具的能力边调试跟踪边学习,效率和效果要好很多。 网上关于用GCC、GDB去编译调试NGINX代码的文章有很多。但是实际配置起来会出现各种各样的问题。 这里经过实际验证把验证的过程总结下来,希望对大家有帮助。 编译器的选择 我们.

NGINX开源社区的博客 606

SAP 批次管理

批次管理: 业务场景: 批次常用于:采购、生产、SD等: 1、先进先出,先入库的先出库(如何实现),基于入库时间来自动确定出库策略。 2、追塑:基于批次进行产品质量追溯 例如订单MTO ---> PP ----> MM(批次关联)。SO—>PP工单 --> 预留 --> 发料(基于批次A\B\C)-->产成品入库-->批次入库D--> ...

willieyuan的博客 1万+

Python爬虫实战:京东/淘宝商品价格与评论监控系统——从User-Agent伪装到编码陷阱的全面攻克

在电商数据驱动决策的今天,无论是个人消费者想抓住历史低价,还是市场分析师需要追踪竞品动态,抑或是算法交易员依赖实时价格信号,自动化的商品价格与评论监控系统都已成为不可或缺的工具。然而,电商平台的反爬虫策略日益严苛,字符编码的“暗坑”更是让初学者屡屡碰壁。本文将以京东(JD.com和淘宝(Taobao.com两大主流平台为目标,手把手带你构建一个稳定、高效的商品监控爬虫。User-Agent伪装——如何模拟真实浏览器行为,突破初级反爬。GBK/UTF-8编码混战。

2201_76125261的博客 72

VSCode 的一些插件记录

(1)、CC+, 这个肯定是必须的。 (2)、CC++ Snippets, 即CC+重用代码块 (3)、C/C+ Advanced Lint. 即CC+静态检测 (4)、 Code Runner, 即代码运行。 (5)、 Include Autocomplete, 即自动头文件包含 (6)、 Rainbow Brackets, 彩...

保持每天的清醒 1279

Whisper 模型在嘈杂环境中的表现:降噪与增强技术

本报告系统分析了OpenAI Whisper模型在嘈杂环境中的表现机制,重点揭示其内在降噪能力的技术边界,并结合语音增强(SE)、时频分析等前沿技术提出优化方案。内容覆盖从基础概念(如噪声类型对ASR的影响)到理论框架(模型架构与数学形式化),再到实际应用(端到端部署策略)的全链路分析,同时通过案例研究与可视化工具(如梅尔频谱对比图)降低复杂概念的认知门槛。核心结论指出:Whisper的多语言预训练虽提升了泛化性,但在低信噪比(SNR<5dB)场景下需结合前端降噪或联合训练技术以突破性能瓶颈。

AI 原生应用开发的博客 488

从TXT到Markdown:文本格式进化的工程实践与协作升级

文本格式是信息表达的基础载体,而Markdown作为轻量级标记语言,正逐步取代纯文本(TXT)成为技术文档、知识库和自动化工作流的事实标准。其核心价值在于将非结构化文字升维为可解析、可版本化、可自动化处理的语义化内容。相比TXT的线性存储,Markdown通过简单符号(如#、*、![]())隐式定义标题层级、列表逻辑与资源引用,天然适配Git差异比对、静态站点生成、CI/CD集成及多端输出(PDF/API/微信)。本文聚焦真实工业场景中TXT迁移至Markdown的关键断层——结构识别、双编辑器协同(Not

weixin_34416649的博客 361

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Windows下用VSCode与WSL2搭建PX4固件开发环境全指南

PX4作为开源飞行控制系统,其固件编译链深度依赖Linux生态,原生Windows环境难以直接构建。WSL2通过轻量级虚拟机技术,在Windows内提供接近原生的Linux运行环境,兼顾编译性能与开发体验,已成为无人机开发者搭建PX4固件开发环境的优选方案。借助VSCode集成开发环境,开发者可无缝完成源码阅读、C/C++智能提示、断点调试及SITL仿真,大幅降低环境配置门槛。本文从WSL2安装、工具链配置、源码获取与子模块管理、固件编译优化、VSCode远程调试,到硬件刷写边界与仿真连接方法,系统梳理Wi

weixin_34184561的博客 195

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

从Glasklart到Wunderbaum:jQuery树组件选型指南与后继者迁移路径详解

**Glasklart** 仓库(实际内容为 jQuery 插件 **Fancytree**)是一款成熟、功能完备的 jQuery 树组件 / 树形网格插件,支持键盘导航、行内编辑、过滤、复选框、拖放和懒加载。本文是一份面向新手与架构师的完整选型指南:先搞清它"能做什么",再看官方后继者 **Wunderbaum** 如何承接,帮助你判断项目该继续用、还是开始迁移。 [![Fancytree j

gitblog_00885的博客 425

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: VScode(1)之内网离线安装开发环境(VirtualBox+ubuntu+VScode)
下一篇: Python界面库Flet(1)介绍和快速使用
Once-Day
Once-Day 新星创作者: 运维技术领域 新星创作者: 运维技术领域 优质创作者: C/C++技术领域 优质创作者: C/C++技术领域
博客等级 码龄7年 1万+粉丝 417原创
评论 100
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值