手把手教你使用VSCode进行linux内核代码阅读和开发

现状

Linux内核由于其本身代码量庞大,其中又包含各种平台宏定义开关/配置,外加各种结构体指针的注册,这使得阅读内核代码变成一件令人头疼的事。针对这个问题目前常见的解决方案有以下几种:

  1. 使用简单的文本浏览工具 + grep进行代码搜索浏览,这种方法最简单,效率也最低。
  2. 使用source insight进行代码浏览,使用这种方法的人应该很多,但是在浏览内核代码的时候有个缺点就是内核下有多个平台的头文件、源码,如果不做排除的话在代码跳转的时候往往能找到很多个同名函数或变量的定义,还得一个一个去确认,非常麻烦。虽然可以手动排除目录但仍然比较麻烦,之前好像看到网上有大神弄了一个脚本还是插件啥的可以根据内核中编译出的.o自动排除未编译的文件,这种相对方便点,但是头文件可能还是得手动排除。另外最重要的是source insight是收费软件,后面不用我说,相信大家心里有数┐( ̄ヘ ̄)┌。
  3. 使用vim + ctags,这种方法就比较高大上了,比较适合大神使用,咱vim都没玩的很透的人一般用不了。
  4. 使用VSCode加上C++ Intellisense插件或者global插件(见文章末尾参考链接2、3、4),类似source insight,需要手动排除未编译文件减小索引范围,代码定位不准。

新的方法

本文要介绍的是使用VSCode + Remote SSH + clangd插件来阅读linux内核代码。其中VSCode作为最强大的代码开发工具之一,主要负责主体框架及界面展示。Remote SSH插件用于访问远程服务器,实现远程代码本地化访问,也具有与远程服务器shell交互的终端功能,可以替代常用的putty、xshell、securecrt之类的工具(虽然功能上略弱)。clangd插件用于代码语义分析、代码补全、跳转等。该方案克服了上面列举的几种方案的几乎各种缺点,能做到代码精准跳转、精准自动补全,其他默认一些如代码着色自动缩进之类的VSCode自带。另外最重要的是这些都是免费的!

除VSCode IDE以外,该方法的核心是clangd插件,clangd默认通过读取工程编译自动生成的compile_commands.json文件来索引其中包含的源文件和关联的头文件,因此能避免索引非编译的代码造成解析时语义混乱。下面展示一段compile_commands.json文件中的大致内容:

[
    {
        "arguments": [
            "cc",
            "-c",
            "-Wp,-MD,net/netfilter/.nf_conntrack_proto_udp.o.d",
            "-nostdinc",
            "-isystem",
            "/home/work/my-kernel/prebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3/bin/../lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/include",
            "-I./arch/arm/include",
            "-Iarch/arm/include/generated/uapi",
            "-Iarch/arm/include/generated",
            "-Iinclude",
            "-I./arch/arm/include/uapi",
            "-Iarch/arm/include/generated/uapi",
            "-I./include/uapi",
            "-Iinclude/generated/uapi",
            "-include",
            "./include/linux/kconfig.h",
            "-D__KERNEL__",
            "-mlittle-endian",
            "-Wall",
            "-Wundef",
            "-Wstrict-prototypes",
            "-Wno-trigraphs",
            "-fno-strict-aliasing",
            "-fno-common",
            "-Werror-implicit-function-declaration",
            "-Wno-format-security",
         
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Visual Studio Code(VSCode)中使用Jupyter非常简单。以下是手把手你如何在VSCode使用Jupyter的步骤: 1. 首先,确保已经安装了VSCode和Python。如果你还没有安装VSCode,请先到官方网站下载并安装。 2. 在VSCode中,按下Ctrl + Shift + X或点击左侧面板的插件图标。在搜索框中输入"Jupyter"并选择Jupyter插件进行安装。 3. 安装完成后,点击左下角的齿轮图标选择"Jupyter",然后选择你想要使用的Python环境。如果你没有其他的Python环境,可以选择默认的Python解释器。 4. 在VSCode中,点击左侧面板的文件夹图标,选择一个文件夹作为你的工作区。通过点击"新建文件"按钮创建一个新的Jupyter笔记本文件(后缀为.ipynb)。 5. 在笔记本文件中,你可以使用Markdown语法编写文本说明,并在代码块中编写Python代码。在代码块中,点击"+"按钮或使用快捷键Shift + Enter执行代码。 6. 可以在工具栏中找到其他常用的Jupyter功能,如保存笔记本、插入新的代码块和重新运行代码等。 7. 此外,你可以通过点击右上角的"扩展视图"按钮打开Jupyter的交互式预览。预览窗口将显示已经执行的代码和输出结果,并支持在代码块中编辑并重新运行代码。 8. 当你完成了所有代码的编写和调试后,可以将Jupyter笔记本导出为其他格式,如HTML或PDF。点击菜单栏的"文件",选择"导出为",然后选择你想要的导出格式。 总结起来,在VSCode使用Jupyter非常简单。安装Jupyter插件后,你只需要创建一个Jupyter笔记本文件,并在其中编写和执行代码即可。通过预览功能,你可以方便地查看代码的执行结果。希望这个回答能够帮助你在VSCode使用Jupyter!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值