文章目录
- clangd 是什么,原理是什么
- local ubuntu vscode
-
- vscode on ubuntu
- clangd client in vscode & clangd server on ubuntu
-
- clangd client in vscode
- clangd server on ubuntu
- bear on ubuntu
- build kernel
- clangd server setup
- open vscode
- error fix
- check
- windows vscode + ubuntu code
clangd 是什么,原理是什么
local ubuntu vscode
这是一个 在 x64-ubuntu 上装 vscode , 目标代码(linux) 在 x64-ubuntu 22.04 上的 安装方法
涉及到
1.bear(自己用apt装)
2.vscode(自己用apt装)
3.clangd插件(client)(在vscode主动装)
4.clangdserver (打开代码时,vscode 提示你装(这种情况下需要主机联网!!!)/或者自己装到标准目录)
流程
bear 生成 compile_commands.json
ubuntu 上的 clangd server 解析 compile_commands.json 和 编译代码 , 并生成idx , 并监听 clangd client(vscode 插件clangd)的请求
vscode 中的clangd 向 clangd server 发送 (符号信息), 获取 到 (代码信息和位置)
本质:
clangd 作为 服务器, 客户端可以是 vscode 的插件clangd,也可以是 vim的插件 vim-clangd/coc-langd/YouCompleteMe/ALE ... 其他编辑器的插件
可更改clangd服务器的位置,但是要保证被vscode识别(放到PATH中)
优点
clangd 支持解析 C,C++,objective-c , (python , java 这两种语言需要安装插件)
clangd支持 代码补全,重构,语法检查功能
.c更新的时候clangd 会更新idx文件
缺点
clangd 缺少对.s的解析
其他
当使用ssh时,本质上有两个cs架构 (1.clangd 2.ssh) ,
vscode on ubuntu
wget -q https:
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
sudo apt install code
clangd client in vscode & clangd server on ubuntu
clangd client in vscode
1.code to open vscode
2.view -> Extensions
search clangd & install
/home/xxx/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.24
clangd server on ubuntu
descriptor in clangd client(not server !!!)
The extension requires the clangd language server.
You will be prompted to download it if it's not found on your PATH.
(Automatic installation is possible on x86-64 Linux, Windows, and Mac).
/home/xxx/.config/Code/User/globalStorage/llvm-vs-code-extensions.vscode-clangd/install/16.0.2/clangd_16.0.2
clangd server 必须在线安装
clangd client 插件没有提供 在 clangd client 侧下载并上传到 server 并安装 的机制
$ ps -ef |grep clangd
suweish+ 125186 125155 47 22:52 ? 00:05:06 /home/suweishuai/.config/Code/User/globalStorage/llvm-vs-code-extensions.vscode-clangd/install/16.0.2/clangd_16.0.2/bin/clangd --compile-commands-dir=/home/suweishuai/work/1_ok6410/linux --background-index --completion-style=detailed --header-insertion=never -log=info
clangd 有发行版的,对于apt,用apt装就可以
或者在github上找他的可执行文件,下载到linux,能运行即可。
一定要将其装入到 标准目录!!!如果没有权限,可以将其装入到 ~/bin
bear on ubuntu
sudo apt instll bear
$ bear --version
bear 3.0.18
build kernel
编译内核,注意是用 bear 生成了 compile_commands.json
bear -- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LOADADDR=0x50008000 uImage
clangd server setup
注意 :这里 不配置也可以!!!,但是一定要保证能找到 clangd 的可执行文件
注意: 这里是 clangd client 扩展的设置,但是其实是设置的 clangd server的运行参数
externsion settings -> Clangd:Arguments ... -> Add Item
--compile-commands-dir=${workspaceFolder} --background-index --completion-style=detailed --header-insertion=never -log=info
open vscode
File -> open Folder
此时 会触发 clangd 读取compile_commands.json 并 在 .cache/clangd/index/ 生成index
解析 .c 会成功,解析.S会失败,
打开底部log ,你可以看到 一些错误信息 , 面对这些错误信息,你可以修复,查看 error fix , 按照此方法去修复
.cache/clangd/index$ ls |grep blk-pm | xargs file
blk-pm.c.FD8D75B2CD7119D1.idx: RIFF (little-endian) data
error fix
clangd 16.0.2 解析 compile_commands.json 还是会遇到一些错误,原因未知
1.不同架构的交叉编译的linux 会遇到不同的错误
2.可能是低版本bear生成的 compile_commands.json 中的 cc 不正确
如何解决这些问题
1. 全文替换cc
2. clangd server 运行参数 log 开到最多
3. 关注 log 输出窗口,哪个选项有误,就 Remove 哪个
4. Remove平台相关的编译选项 : -march=xxx -mabi=xxx
5. 互联网和官网搜索保存信息!!!
6. 解决后error后,删掉 .cache/clangd/index
$ rm .cache/clangd/index
$ rm .cache/clangd/index
check
main.c
setup
init_IRQ
点击这些 符号,会进入 arm32 的 函数定义 , 因为我编译的是arm32 的架构
windows vscode + ubuntu code
- 怎么在 windows vscode 阅读 ubuntu 的代码
架构:
remote-ssh插件 <---> sshd server
clangd插件 <---> clangd server
vscode
windows ubuntu 22.04