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

这篇具有很好参考价值的文章主要介绍了VScode 结合clangd 构建linux源代码阅读环境。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、背景介绍

上一篇文章:VScode 结合Global构建linux源代码阅读环境 ,介绍了在VS Code工具中通过remote-ssh远程登陆到Linux远程服务器,使用Global构建linux源代码阅读环境,对linux kernel代码进行解析,实现全局搜索、自动跳转、代码补全等功能,但是Global工具在建立代码索引数据时,将整个Linux源代码都进行了数据检索分析,这样会有很多重复的定义和声明,不够智能,不够方便,接下来介绍使用vscode + clangd工具来解决此问题。

2、原理介绍

clangd 可以实现代码语义分析、代码补全、跳转等,能做到代码精准跳转、精准自动补全;其原理是通过读取工程编译自动生成的compile_commands.json 文件来索引其中包含的源文件和关联的头文件,因此能避免索引非编译的代码造成解析时语义混乱。compile_commands.json 文件是每个源文件的编译参数、路径等信息组成的一个json文件,clangd 通过这个文件可以准确定位源文件需要引用的头文件从而准确的找到各种宏定义、函数、变量声明的准确值。

Linux源代码已包含可以直接生成compile_commands.json文件的python脚本,在编译后Linux kernel代码路径下执行如下命令即可生成compile_commands.json文件:

python3 ./scripts/clang-tools/gen_compile_commands.py

3、安装插件

打开VS Code,在扩展界面搜索clangd后安装插件:

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

安装好插件后,使用VS Code打开任意C语言会提示你安装clangd程序,由于我是用remote-ssh登陆到远程linux服务器上的,所有clangd程序会安装到远程的服务器上,如果自动安装失败,也可以在远程服务器上使用命令安装(ubuntu服务器):

$ sudo apt install clangd
VScode 结合clangd 构建linux源代码阅读环境

需要注意的是 clangd插件与C/C++ Intellisense、C/C++ GNU Global是冲突的,需要禁用或者卸载。

4、环境配置

前面的文章有提到在VS code 下如何进行配置,和前面一样clangd的配置我们同样配置到远程用户 setting.json文件中,在setting.json文件中新增如下配置:

    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}",
        "--background-index",
        "--completion-style=detailed",
        "--header-insertion=never",
        "--log=verbose"
    ],

完成配置后,打开任意源代码文件触发clangd进行解析:

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

clangd 检索的数据库位于工作目录 .cache/clangd 文件夹,如果想重新生成检索只要删除相关的文件即可。如果一切正常,就看实现代码跳转了,但是一般都会出现问题:

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

如上图所示,出现了 Unknown argument: '-fno-allow-store-data-races' 等错误。

解决方案:在工作目录新建 .clangd 文件,输入如下内容(同类型的错误都可以使用此方案解决)

CompileFlags:
  Remove: [-fno-allow-store-data-races,-fconserve-stack]   

clangd解析过程会输出相应的日志信息,可以根据输出信息进行问题的排查:

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

上图最核心的错误提示:unkown target ABI 'lp64',在 .clangd 文件添加:-mabi=lp64

CompileFlags:
  Remove: [-fno-allow-store-data-races,-fconserve-stack,-mabi=lp64]   

解决相关的错误问题后,重新打开VS code,clangd会触发重新检索源代码,检索完成后即可使用clangd来检索代码:

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

5、阅读代码

clangd index 完成后,打开任意代码文件,选择相关函数或者变量,使用快捷键: CTRL+鼠标左键(或者F12),实现函数定义的跳转查询,跳转以后使用快捷键:ALT+左键头 返回;当然也具备对函数进行自动提示、补全的功能:

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

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

6、后记

根据前面一系列的文章,已介绍使用VS Code 远程登陆到服务器,对Linux kernel代码建立索引,实现全局搜索、自动跳转、代码补全等功能,愉快的阅读Linux kernel源代码了,下一步将介绍如何在VS code 中实现gdb可视化调试linux kernel源代码。

VS code 可视化调试Linux kernel内核文章来源地址https://www.toymoban.com/news/detail-415444.html

到了这里,关于VScode 结合clangd 构建linux源代码阅读环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vscode git 源代码管理 无法自动更新显示变更

    最近vscode 远程写代码遇到问题,git的源代码管理不能自动罗列被修改的文件 原因: 早期出现警告\\\"Visual Studio Code is unable to watch for file changes in this large workspace\\\"无法在这个大型工作区中监视文件更改 ,时不小心按到了“不再提醒”,导致当前工作区的文件数量超过了VS Code文

    2024年02月11日
    浏览(59)
  • 【大数据】Apache Iceberg 概述和源代码的构建

    我们在使用不同的引擎进行大数据计算时,需要将数据根据计算引擎进行适配。这是一个相当棘手的问题,为此出现了一种新的解决方案:介于上层计算引擎和底层存储格式之间的一个中间层。这个中间层不是数据存储的方式,只是定义了数据的元数据组织方式,并向计算引

    2024年02月09日
    浏览(36)
  • vscode同步git代码时源代码管理出现10k+更改如何处理?

    出现原因:获取项目代码,通过vscode的sftp插件进行远程项目拉取。建立新文件夹后发现vscode的git源代码管理器出现多个更改需要处理,如下图左侧所示(10k+)。 解决办法:查看具体更改,定位更改发生的文件夹(我的在桌面),打开文件管理器,定位到对应路径,删除.gi

    2024年02月12日
    浏览(49)
  • ST电机库v5.4.4源代码分析(1): FOC原理(结合ST电机库)

    编者:沉尸 (5912129@qq.com) 本文字描述电机FOC的原理性内容,大部分取材于网络,但是我对于某些细节进行了比较详细的描述。因为很多最初的出处链接没有记录下来,所以没有标明,忘谅解!本文字不会用于任何商业行为!  设计目标: 电流流经三个绕组会产生磁场,我们希

    2024年01月17日
    浏览(33)
  • Jenkins自动拉取SVN源代码构建打包vue前端项目

    目录 1.功能需求 2.安装插件 2.1 安装NodeJS插件 2.2  安装SVN插件 3.配置环境 3.1  NodeJS环境 4.新建任务配置部署信息 4.1  源代码管理 4.2  构建触发器 4.3  构建环境  4.4  构建步骤 5.构建项目  5.1 点击查看控制台日志 使用Jenkins从SVN上拉取Vue项目进行自动构建打包。如果需要发

    2023年04月22日
    浏览(40)
  • 【vscode基于clangd实现Android/Linux代码跳转】

    背景: 在开发大型工程例如Android或Linux时若我们使用vscode搭配官方的C/C++插件使用发现,经常很多代码都无法跳转,代码补全功能几乎是废的,通过网友以及同事身边了解之后发现 vscode+clangd可以实现代码任意跳转补全等功能 ,因此本文通过讲解如何配置clangd相关环境实现高

    2024年02月11日
    浏览(37)
  • 新手入公司git的运用,项目克隆拉取与推送。vscode的源代码管理

    1.项目的克隆拉取 新建一个文件夹  打开文件夹后,鼠标右键git Bash Here  选择好分支,在复制url   就把项目克隆下来 , 拉取就是 后面的master也是对应的分支 2、项目的推送  新建一个空的文件夹   打开文件夹后,鼠标右键git Bash Here 先仓库初始化 git init   把你写的项目复

    2024年02月03日
    浏览(61)
  • 看代码神器:vscode+clangd轻松实现linux内核代码跳转(图文并茂)

    一点感悟 还是那句老话:工欲善其事必先利其器。在做代码开发之前,先准备好开发过程帮助提效的工具,能起到事半功倍的效果。比如本文要讲的vscode下进行linux内核代码开发或者阅读就是很好例子,如果没有先把代码跳转等基础环境搭建好,对后续的代码阅读和开发都可

    2024年01月23日
    浏览(43)
  • linux 源代码编译

    有时候会在linux上下载源码包,然后进行编译成可执行的文件,这个过程需要经过configure、make、make install、make clean四个步骤 configure 为这个程序在当前的操作系统环境下选择合适的编译器和环境参数来编译该代码 make 对程序代码进行编译操作,会将源码编译成可执行的目标文

    2024年02月11日
    浏览(42)
  • 【Linux】源代码软件包

    人不走空                                                                            目录         🌈个人主页:人不走空       💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 1. 什么是源代码软件包? 2. 源代码软件包的主要组成部分 3. 源代码软

    2024年01月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包