看代码神器:vscode+clangd轻松实现linux内核代码跳转(图文并茂)

这篇具有很好参考价值的文章主要介绍了看代码神器:vscode+clangd轻松实现linux内核代码跳转(图文并茂)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一点感悟
还是那句老话:工欲善其事必先利其器。在做代码开发之前,先准备好开发过程帮助提效的工具,能起到事半功倍的效果。比如本文要讲的vscode下进行linux内核代码开发或者阅读就是很好例子,如果没有先把代码跳转等基础环境搭建好,对后续的代码阅读和开发都可能会造成很大障碍,而先完成基础工具环境搭建再开发,阅读代码流畅了,理解能力更快加深,开发效率也会提高。所以,有点时候宁愿先多花80%时间‘力其器’,也许后边只需要20%即可‘善其事’。



回归正题,我们日常做代码阅读的工具可能这几种:

  1. source insight,这个很多做嵌入式开发的人估计都在使用,我最早也是用的这个,个人认为source insight对代码跳转能力不够精确化,尤其是工程代码存在不通文件但有相同符号表定义时,它就不知道该往哪跳,而且跳转速度没有vscode的灵活快速,搜索方面也不及vscode。

  2. vim+ctag, 感觉这个使用有一定门槛,见过一些老一辈经验丰富的工程师有用这个。

  3. vscode+clangd,个人认为这个才是与时俱进的工具,真的太好用辣,入门门槛也低,自从用上vscode后就没再用source insight。clangd会根据参与编译文件的符号表索引进行提取,这样不会提出无关文件的同名符号表情况,vscode里进行代码跳转时,能唯一精确跳转到对应位置。开发时,它还具备代码补全、错误检查、悬停查看原型等能力


环境准备

vscode下需具备linux shell终端,有代码编译能力。因此有3种方式使用vscode环境:

  1. ubuntu桌面linux系统里直接安装vscode。
  2. window vscode+ssh到ubuntu虚拟机。
  3. window vscode+ wsl。
    笔者采用第三种方式,关于vscode+wsl 插件安装可点击参考这篇博文的第二章节。

bear工具

安装bear工具核心目的是为了编译内核代码把参与的编译文件和关联头文件生成到json文件里,供后续的clangd解析,避免未参与编译的文件被索引。

下载

最快速的安装方式就是apt install bear在线安装,笔者亲测过这种方法不一定靠谱,如:bear工具和libear库版本不匹配;bear依赖的libc库与我gcc工具链依赖的libc库不齐配等等。为了闭坑,建议直接从ubuntu工具网站下载工具后离线安装,点击链接。

注意需要下载bearlibear两个deb文件。笔者使用2.4.3版本,如果使用过程存在诸如libc依赖库不匹配问题,尝试换更高或者更低版本解决。

安装

下载的deb文件,拷贝在linux环境中(ubuntu or wsl),执行对包解压到当前路径下。

dpkg -x bear_xxx.deb ./
dpkg -x libear_xxx.deb ./

bear工具路径:usr/bin/bear
libear路径:usr/lib/x86_64-linux-gnu/bear/libear.so

为方便,将bear拷贝到系统/usr/bin/ 下,libear.so拷贝到/usr/lib/下。

查看bear 版本号:

bear --version

使用bear编译生成json文件

进入linux工程代码下,在编译Image阶段,make命令前加入bear,如:

bear --libear /usr/lib/libear.so  make 

–libear /usr/lib/libear.so为指定libear库路径,防止该库文件找不到。否则可能报错:

ERROR: ld.so: object ‘/usr/${LIB}/bear/libear.so’ from LD_PRELOAD
cannot be preloaded (cannot open shared object file): ignored

如果编译顺利并完成,将会生成compile_commands.json,就是我们最后想要的文件(这里要注意的是,可能因为加入bear编译过程存在依赖报错,这时可以按如上所述,更换bear版本尝试)。

  • 采用bear工具生成compile_commands.json文件并不是唯一方式,如Cmake文件编译,可以加入编译参数:
    -DCMAKE_EXPORT_COMPILE_COMMANDS=ON参数也可以自动生成该文件。
  • 采用linux内核自带的python脚本:scripts/clang-tools/gen_compile_commands.py 也可以生成compile_commands.json文件,有兴趣的读者可以尝试。

clangd工具

clangd工具为解析compile_commands.json并生成所有符号表索引数据库,方便只参与编译的文件代码进行快速跳转。

下载&安装

  1. 打开vscode,并remote ssh到WSL或ubunut下。

  2. vscode remote里安装clangd拓展插件。
    linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读

  3. linux环境下安装clangd工具(wsl or ubuntu)

为何安装了插件还需要在系统里安装工具?因为插件会触发clangd工具生成代码索引数据库。

正常在第二步的插件安装过程,vscode会自动为linux系统下载clangd工具并安装,但这个下载过程特别久(避坑),建议自行下载离线包。点击下载。
下载的clangd包拷贝到linux系统里并解压。

查看版本号:

clangd --version

linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读

配置clangd工具

回到vscode环境,对插件进行配置:
linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读

加入下修改:

  1. 添加配置参数,注意一行一行加入。

–compile-commands-dir=${workspaceFolder}
–background-index
–completion-style=detailed
–header-insertion=never
-log=info

linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读

  1. 加入linux系统下的clangd工具绝对路径。

linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读

  1. 禁用C/C++ extension有代码跳转功能的相关插件,否则与clangd可能有冲突。
    linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读

  2. workspace路径下手动添加.clangd文件。否则会后面生成index过程可能会报错:Couldn’t build compiler instance...

.clangd文件,非64位平台填入下面内容:

CompileFlags: Add: --target=armv7-a

如果64位平台,用下面内容:

CompileFlags: Add: --target=aarch64-linux-gnu
Remove: -mabi=lp64

linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读

clangd生成符号表索引数据库

配置完clangd后,重新打开vscode代码,可以看到状态栏clangd开始工作,indexing所有文件,等待完成后,生成的索引数据库位于.cache/clangd/index/下。
linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读

完成。到此已经可以正常进行代码跳转、变量补全开发等。


效果展示

举例几个:

悬停查看声明

linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读

跳转

ctl + 单击,即可跳转。

补全和查错

linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读
linux内核源码 跳转,工具/软件/解决方案,vscode,linux,clangd,bear,代码阅读


非常好用,准确且速度也贼快,是得心应手的代码阅读和开发好帮手,除了linux代码,其他相关代码也可以用这样的方式配置。都来路转粉吧,嘿嘿 ^ _ ^文章来源地址https://www.toymoban.com/news/detail-819102.html

到了这里,关于看代码神器:vscode+clangd轻松实现linux内核代码跳转(图文并茂)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • clangd的使用,实现跳转提示

    一、插件卸载c插件下载clangd 二、设置搜索clangd 若没有找到compile_commands.json文件可以通过如下方式之后再便于即可生成 cmake项目: 在项目最顶层的.cmake文件中或者CMakeList文件中加入如下命令 或者 makefile项目: ①安装bear ② 编译时用 若后面突然失灵了 找到/home/xuerui/.vscode-s

    2024年02月10日
    浏览(37)
  • VScode clangd 插件浏览 linux 源码

    VScode clangd 插件浏览代码却决于 compile_commands.json 文件 生成该文件有很多种方法 bear 命令 linux 内核脚本 cmake 编译选项 VScode 插件安装 在 VScode 插件商城搜索安装即可 clangd 安装 方法一 插件下载好之后任意打开一个 C/CPP 文件,vscode 下方会出现弹窗直接 install 即可(若网络原因

    2024年02月06日
    浏览(55)
  • .NET神器:轻松实现数字转大写金额的秘籍与示例代码

      概述: .NET中实现数字转大写金额可通过现有库或自定义方法。自定义方法示例使用递归将数字分段转换为中文大写金额,处理了千、百、十、个位数。实际应用中可根据需求进一步扩展,例如处理小数部分或负数。 在.NET中,你可以使用以下方案之一来实现将数字转成大写

    2024年03月14日
    浏览(41)
  • VSCode使用clangd构建Linux驱动开发环境

    最初在使用Linux内核源码进行驱动开发时,由于没有代码补全、自动提示等功能写起来十分不方便,虽然有人使用Source Insight来阅读源码,但是我用起来还是感觉怪怪的,有时间同一个函数会找到很多的定义,不便判断。在调用层次方面,还是clangd更好用。 Clangd 是一个基于

    2024年01月16日
    浏览(69)
  • Linux下使用VScode开发ROS时clangd插件的使用

    本人在最近刚开始接触Linux和ROS开发,在开发过程中发现,微软的C/C++的intelliSense的代码补全,纠错等功能是真的难用,恰好有学长跟我提起了clangd这个东西,而且以前用clion去写一些小的C/C++工程,想着怎么去配置一下在vscode上使用clangd,让自己写代码更舒服一些(主要是太

    2024年02月02日
    浏览(40)
  • 【深度学习】vscode实现代码跳转功能

    在远程访问Linux服务器,使用vscode软件代码不能实现跳转主要是由于没有配置解释器,故对其配置解释器即可实现该功能。 在vscode中安装Python,如下图所示 在vscode中安装Pylance,如下图所示 如下图所示,在vscode软件右下角点击后选择对应自己的解释器即可 在File -- Preferences

    2024年02月17日
    浏览(38)
  • 一文轻松实现在VSCode中编写Go代码

    1.下载并安装VSCode VSCode(Visual Studio Code)是一款免费且功能强大的开源代码编辑器。VSCode适用于Windows、macOS和Linux操作系统,提供了丰富的编辑功能,包括语法高亮、智能代码补全、代码导航、重构支持、代码片段、多光标编辑等。另外VSCode具有丰富的扩展生态系统,开发者

    2024年02月19日
    浏览(50)
  • 关于在Vscode安装clangd的教程(分别在linux和windows)[很详细,很细节,很全!]【Windows端:缺少 language enginee的解决方法】

    一.背景: 在Vscode中,使用c/c++ 编译器(插件),但是自带的补全语法不好 clang 也是个编译器,而其对应的clangd的补全语法的功能很友善 所以在Vscode中,我们可以使用插件c/c++编译和执行,但是补全的语法用clangd,话不多说,直接开干! 安装分为2部分,linux端和本地端 1.先在

    2024年02月20日
    浏览(43)
  • 手机也可以轻松码代码!两款手机端代码最佳神器Pydroid和Pythonista!

    Pyroid是一款支持Android系统的移动代码编译器。 Python 3可以说是Android上一个易于使用且功能强大的Python 3 IDE,它可以帮助您在Android上使用Python、Jupyter笔记本等。 安装 我们可以从应用程序商店下载并安装。安装完成后,需要在第一次打开Python库时安装它。稍后,您可以根据需

    2024年02月12日
    浏览(50)
  • AI代码翻译神器,用AI翻译代码,轻松学习不同编程语言,已开源!

    体验地址,github地址和部署地址在文章底部 近年来,随着技术的快速进步,人工智能技术展现出了在各个领域发挥作用的巨大潜力。AI代码翻译器作为一项创新技术,为开发者带来了全新的可能性。这项技术运用人工智能,能够将一种编程语言的代码翻译成另一种,便利了跨

    2024年01月21日
    浏览(75)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包