Clangd Troubleshooting
无法识别编译参数宏定义
在使用clangd时,如果在编译参数中定义了宏,即使使用bear生成了compile_commands.json
,里面的编译参数中带上了-DLAB_PGTBL
参数,clangd仍然无法识别定义了该宏。
statckoverflow上有同样问题,回答通过添加compile_flags.txt
文件并在其中添加宏定义,但该文件在compile_commands.json
存在时失效。
查阅clangd文档,此时应该为项目添加项目配置文件.clangd
,在编译指令中添加参数。
1 |
|
编译参数导致clangd解析失败
Linux内核使用clangd解析报错,会提示Unknown argument: '-fno-allow-store-data-races'
、Unknown argument: '-fconserve-stack'
、Unknown argument: '-femit-struct-debug-baseonly'
等错误
同样通过在Linux目录下添加.clangd
文件,忽略这些导致clangd失效的参数:
1 |
|
接下来代码中不显示报错了,但仍然无法实现跳转,在clangd的输出中可以看到如下内容:
1 |
|
提示抽象语法树错误,但实际上并非错误原因,在输出中搜索错误的日志E[
,发现一行error: unknown target ABI 'lp64'
。搜索lp64
是编译时的一个参数-mabi=lp64
,因此将其也忽略掉。
1 |
|
此时,重启vscode窗口,Linux内核代码已经能够正常解析。
Clangd Troubleshooting
https://xanderc.top/2023/06/02/clangd-troubleshooting/