前言
上一篇我们使用vim及其插件搭建了一个类似ide的环境,可以实现跳转等功能,但是个人感觉,还是差点意思,特别是和VSCode对比下来,所以这些年来,基本都是使用VSCode阅读代码了,VSCode的优势明显:
-
配置方便简单,开箱即用
-
安装插件极其方便快捷,功能强大
-
可以同步配置和插件,即使换了电脑,只要登录账号,就可以将配置和插件同步过去
-
安装vim插件之后,既可以享受VSCode本身的强大,又可以享受vim的飞速编辑
接下来我们就来安装配置VSCode环境,实现更加高效的阅读Kernel源码的目标,利用clangd+compile_commands.json还可以实现精确跳转,阅读代码从未如此高效。
顺便说一下,VSCode有一个强大的远程开发功能,可以实现浏览、编辑远程服务器上的代码,就如同本地一样,不过本文只打算本地部署,需要远程开发的同学可以看我这篇文章:
安装VSCode
安装VSCode很简单,下载安装包之后,双击即可安装
下面使用命令行进行安装:
wget https://vscode.download.prss.microsoft.com/dbazure/download/stable/848b80aeb52026648a8ff9f7c45a9b0a80641e2e/code_1.100.2-1747260578_amd64.deb
sudo dpkg -i code_1.100.2-1747260578_amd64.deb
一路回车即可安装完成
安装clangd和clangd插件
我们实现精确跳转就是利用clangd和VSCode中的clangd插件完成的
安装clangd
sudo apt install clangd -y
VSCode中安装clangd插件
使用命令打开VSCode
code
然后在插件商店中搜索clangd并安装
生成compile_commands.json文件
在配置VSCode之前,我们先生成对应的compile_commands.json文件
cd debug_kernel/linux-6.12.28
make ARCH=x86 compile_commands.json
配置VSCode
配置clangd插件
在内核源码目录下打开code
cd debug_kernel/linux-6.12.28
code .
之后设置安装的clangd插件:
点击Workspace,因为我们只在内核源码目录下进行配置
点击Clangd: Arguments下的Add Item
输入如下内容:
--compile-commands-dir=./
--header-insertion=never
如图:
--compile-commands-dir=./
意思是到当前目录下找compile_commands.json文件
--header-insertion=never
意思是不要自动插入包含的头文件,因为这个自动插入头文件有时候会带来麻烦,不如不用,需要的话自己添加必要的头文件
注意clangd path,如果你的clangd没有安装到/usr/bin目录下,请修改一下:
至此,我们配置好了VSCode了,其实上面的配置也可以直接写到.vscode/settings.json文件中:
VSCode的其他配置
在VSCode中输入ctrl+shift+p,然后输入settings,选择Open User Settings (JSON)
其他配置直接参考我的配置吧:
VSCode高效阅读Kernel源码
现在我们就可以高效阅读Kernel源码了,而且可以精确跳转,现在我们打开init/main.c文件,如果操作没有错误的话,在VSCode的左下角,会有clangd进行解析的动作:
解析完成后,我们就可以实现精确跳转了,现在让我们定位到start_kernel函数中,然后试着分别跳转到其中调用的函数:
按F12跳转
直接跳到对应的函数定义处:
再找一个架构相关的函数,看一下是否会跳转到我们的目标架构源文件中:
Nice,果然直接跳到x86源文件中了
至此,我们的VSCode具备了精确跳转的功能了,阅读源码效率大大提高。
VSCode其他妙用
VSCode隐藏其他架构的源文件
VSCode最左侧的Explorer窗口,显示了所有架构的源文件,还显示了编译出的.o等中间文件,而且我们全局搜索时,也会把其他架构同样定义的符号给搜索出来,会影响我们阅读源码,这其实可以通过配置 .vscode/settings.json文件来解决:
VSCode安装vim插件
VSCode的强大已经无须多言,而且使用也方便快捷,但是像我这用使用惯了vim的操作,感觉还是有点难受,两者要是能结合一下,那得有多强大啊,刚好,VSCode中就有vim插件,可以实现在VSCode上使用vim的操作:
安装完vim插件,进行如下配置,当然这是我的习惯,你可以根据你的习惯调整:
"vim.easymotion": true,
"vim.searchHighlightColor": "#5f00af",
"vim.hlsearch": true,
"vim.highlightedyank.enable": true,
"vim.highlightedyank.duration": 300,
"vim.ignorecase": false,
"vim.replaceWithRegister": true,
"vim.useSystemClipboard": true,
"vim.visualstar": true,
"vim.leader": "<space>",
"vim.timeout": 600,
"vim.normalModeKeyBindingsNonRecursive": [
{ "before": ["H"], "after": ["g", "T"], },
{ "before": ["L"], "after": ["g", "t"] },
],
"vim.normalModeKeyBindings": [
],
"vim.commandLineModeKeyBindings": [
],
"vim.commandLineModeKeyBindingsNonRecursive": [
],
"vim.handleKeys": {
},
"vim.insertModeKeyBindings": [
{"before": ["j", "j"], "after": ["<Esc>"]},
],
"vim.insertModeKeyBindingsNonRecursive": [
],
"vim.visualModeKeyBindings": [
],
"vim.visualModeKeyBindingsNonRecursive": [
{"before": ["p"], "after": ["p", "g", "v", "y"]},
],
现在就可以使用vim进行操作了,使用ctrl+]进行函数跳转了,ctrl+o返回,手指不用离开主键盘区了,也不用鼠标了^_^
总结
当然,VSCode还有很多强大的功能和插件,比如强大的远程开发,这里不会再讲这些内容了,需要的同学到这里查看VSCode远程开发环境配置
还可以安装AI插件,遇到难以理解的代码,可以直接问AI,还具备代码插入等功能。
总之,现在我们有了阅读代码和编辑代码的环境了,从下一篇开始,将真正开始debug内核了,折腾起来吧!