【利用vscode + clangd阅读linux源码】

利用clangd阅读linux源码

前提步骤

在上篇【利用qemu启动linux吧】中描述了怎样编译linux内核,内核中有许许多多的宏,普通跳转很容易跳到云里雾里,利用内核原生的工具和clangd容易让我们完成一个完美的跳转工具。

  • vscode
  • 编译好的linux内核
  • sudo apt-get install clangd

生成索引文件

clangd利用compile_commands.json作为索引文件的来源,其生成方式有很多种,本文利用原生内核的脚本生成;

  1. 在之前直接在源码目录下执行make,导致编译产物散落在各个目录下,我们可以利用编译选项来归类到某个目录下;
make O=output defconfig
make O=output menuconfig
make O=output -j$(nproc)

O后面接输出路径,通过上面的命令可以将编译产物输出到output文件夹下
2. 利用gen_compile_commands.py和上面的编译产物生成符号表信息
gen_compile_commands.py文件在低版本的kernel可能没有(kernel-4.9上就没有),可以在高版本的kernel中下载一个,本文用的是6.6kernel中的文件去解析4.9的kernel也是可以的,该文件的路径在scripts/clang-tools/目录下,利用python3来执行;【注意在要解析的源码目录下执行】

python3 gen_compile_commands.json -d 产物路径

执行完毕之后,即可在目录下生成compile_commands.json文件,clangd插件利用该文件进行解析,可以避免非编译代码导致的跳转混乱。
正确执行上述命令之后,compile_commands.json文件不为空;

配置vscode

【首先禁掉Micorsoft C/C++插件】
在这里插入图片描述

  1. 在源码所在的服务器安装clangd
sudo apt-get install clangd
  1. 在本地和服务器端安装clangd插件
    在这里插入图片描述

  2. 重启vscode之后,加载源码目录,目录下有compile_commands.json文件,下面有插件运行的标记,此时即可实现代码跳转了在这里插入图片描述

  3. 注意
    如果出现不能跳转的情况,查看vscode的output的输出,如果出现" Couldn’t build compiler instance"的报错,在源码目录下创建.clangd文件,在文件中添加如下内容:

CompileFlags:
    Remove: -mabi=lp64

这是因为clang不支持API ‘lp64’ 这个参数
重启vscode,即可实现跳转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值