ubuntu VSCode + clangd + linux 开发环境

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)的请求
		// 生成idx的时候会出现一些问题.参考 error fix
	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的解析 
		// 第三方插件 或补丁 支持 LSP增强插件,LLVM补丁
		// 汇编语言有两种格式 ,intel格式和AT&T格式
		// gnu 汇编器 默认支持 AT&T格式,但是你可以用 -msyntax=intel 来选择intel格式
其他
	当使用ssh时,本质上有两个cs架构 (1.clangd 2.ssh) , // 但是 vscode 还装了一个 vscode-server//TODO	

vscode on ubuntu

wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
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

  • 第一种方法 : clangd插件提示安装
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 并安装 的机制 // 参考 remote-ssh插件

$ 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
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会失败, // 无影响 TODO
打开底部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 不正确 // 3.0.18 没问题
如何解决这些问题
	1. 全文替换cc
	2. clangd server 运行参数 log 开到最多
	3. 关注 log 输出窗口,哪个选项有误,就 Remove 哪个
	4. Remove平台相关的编译选项 : -march=xxx -mabi=xxx
	5. 互联网和官网搜索保存信息!!!
	6. 解决后error后,删掉 .cache/clangd/index/* , 让其重新生成
  • armv7 linux
$ rm .cache/clangd/index/*  -rf
$ cat .clangd // 在顶层添加一个 .clangd 
CompileFlags:
    Remove: [-mapcs, -mno-sched-prolog, -fno-ipa-sra, -fconserve-stack]
  • armv8 linux
$ rm .cache/clangd/index/*  -rf
$ cat .clangd
CompileFlags:
    Remove: [-fconserve-stack,-mstack-protector-guard=sysreg,-mstack-protector-guard-reg=sp_el0,-mabi=lp64]

check

main.c 
	setup
	init_IRQ

点击这些 符号,会进入 arm32 的 函数定义 , 因为我编译的是arm32 的架构

windows vscode + ubuntu code

架构:
	remote-ssh插件  <--->	 sshd server
	clangd插件      <--->	 clangd server
	vscode  		 
	windows          		 ubuntu 22.04    
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值