如何在vscode中优雅的浏览Linux Kernel源码

近期需要写 Linux kernel 相关的内容,对于这样大型的 C+Makefile 项目,vscode 中的 C/C++ 插件不能够很好的做代码跳转。

我们使用 clangd 进行代码的分析

步骤

clangd需要知道代码的编译参数才能够对代码进行 index。对于基于 Makefile 的项目,可以使用 bear 生成 compile_commands.json ,其中包含了代码的编译参数信息。

安装 bear clangd

sudo apt install bear clangd

如果使用的是别的系统,或者需要特定版本的 bear 或 clangd,可以自行寻找安装方法。

生成 compile_commands.json

// 先清理,使得之后的 make 进行完整的编译过程。否则 bear 不能捕获所有参数
make $(Your Args) clean
// 在正常的编译命令前,添加 bear -- 
bear -- make $(Your Args)

在这之后,可以在 kernel 根目录中找到 compile_commands.json 。这一般很大。

禁用 C/C++ 插件

首先需要在 vscode 扩展列表中禁用 C/C++ 插件,这和 clangd 插件冲突。

安装 clangd 插件

在 vscode 插件商店中搜索 clangd,安装。

设置 clangd 插件

一般来说,我们不需要进行全局设置。而在 .vscode/settings.json 中,可以针对于本工作区进行设置。

将 .vscode/settings.json 添加以下内容

{
    // 之前已有的设置参数
    ...,
    // 添加以下内容
    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}",
        "--background-index",
        "--completion-style=detailed",
        "--header-insertion=never",
        "-log=info"
    ]
}

--compile-commands-dir=${workspaceFolder} 使clangd能识别到 compile_commands.json

完成

重启 vscode 后,就可以在 vscode 中方便地进行函数跳转啦。