vscode clangd插件使用
本文最后更新于:2025年11月19日 下午
以前用的微软的c/c++插件来进行代码分析,跳转。分析代码很慢,磁盘占用多。没分析完时很难跳转。
前置工作
clangd分析代码一样需要编译数据库文件(compile_commands.json),需要先准备好这个文件。可以使用bear来捕获生成。
安装
(1)vscode安装clangd插件
(2)ubuntu上安装clangd。
1 | |
ubuntu上也可以不安装clangd,vscode里面会提示你安装,会装在vscode目录。vscode里面安装的clangd版本会更高一些。建议使用这种。
配置clangd
compile_commands.json路径
装上之后可能第一个需要配置的就是compile_commands.json 位置,默认会在工程路径下查找。如果需要单独指定,那么配置clangd的命令行参数。--compile-commands-dir=your_dir
分析代码的核心数
配置命令行参数-j=10
1 | |
关闭自动插入头文件
针对复杂的工程,clangd可能会插入错误的头文件。所以关闭它。
1 | |
format
禁用c/c++插件后,格式化不能用了,需要选择clang。默认的clang格式化风格跟自己的不符。需要配置。--fallback-style=Microsoft
也可以使用自定义格式,如下方法,在工作区生成.clang-format。
1 | |
这样就可以了,也可以根据需要深入修改这个文件。
clang-tidy
没看出来作用。简单的malloc,fopen描述符泄露都看不出来。
和微软的c/c++插件共存
网上有人说二者冲突,要禁用c/c++插件,实则没有。只是两个都启用时,都会分析代码,无疑是多余的。
只需要关闭c/c++插件的代码分析和补全就好了。
1 | |
这样也可以使用c/c++插件的debug功能了。
资源占用
工作区编译的文件有13000多个,分析完之后,clangd内存占用2G,磁盘缓存占用290M。下次打开工作区,能很快分析完。
遇到的问题
内核文件解析报错
关键错误信息为:
1 | |
查了下,clangd好像处理不了编译标志-mabi=lp64,这个issue还没解决的。
只能自己删除compile_commands.json里面的这个标志。
1 | |
推荐使用下面的编译标志报错方法解决。
一些编译标志报错
文件可以正常解析,但是clangd的状态会显示文件报错,说未知的标志。
1 | |
可以通过配置clangd的配置文件来移除这些标志。这些标志位基本都是指导gcc如果编译代码的,对语义分析影响不大。
针对用户的配置文件为:~/.config/clangd/config.yaml
针对工作区的配置文件为:工作区目录/.clangd
添加如下配置让clangd解析时移除这些标志即可,如:
1 | |
[文档][https://clangd.llvm.org/config#files]
我的~/.config/clangd/config.yaml配置为
1 | |
realtek方案遇到的问题
遇到这个错unknown target CPU 'mips32r2'
编译选项里面有-march=mips32r2, 编译标志里面移除它就好了。最终解决方法时,在工作区目录创建.clangd文件
1 | |
找不到头文件
有时还会遇到文件无法解析,说找不到头文件。原因为存在多个compile_commands.json。虽然外层的有这个文件的编译命令,但是最里层的compile_commands.json为空,导致无法解析这个文件。删除里层的就好。