问题描述:
在使用 vscode 编写 eBPF 程序时,如果不做一些头文件定位的操作,默认情况下头文件总是带有“红色下划线”,并且大部分的变量不会有提示与补全。
在编写代码文件较小时(或者功能需求小时)并不会带来不方便。
但在长时间编写以及多个程序文件都在使用时,无法补全和提示也影响着编程。
解决方案:
应用场景:
VSCode 编辑器、远程连接服务器开发模式、使用 clangd 插件
方案/方法:
> 这里默认已经可以运行 eBPF 程序了。
检查 clang 是否安装
sudo apt-get install clang
使用 clang --version 来验证是否安装成功。
编写 Makefile 文件
可以随便写一个有效的 Makefile 文件。
# Makefile
CC=clang
CFLAGS=-I/usr/src/linux-headers-$(shell uname -r)/include -I/usr/src/linux-headers-$(shell uname -r)/include/uapi
all: main.o
main.o: src/main.c
$(CC) $(CFLAGS) -o main.o -c src/main.c
clean:
rm -f main.o
安装 bear
bear
工具用于生成 compile_commands.json
文件。可以通过以下命令进行安装:
安装 bear 工具:
sudo apt-get install bear
生成 compile_commands.json
文件
在项目的根目录下运行 bear
来生成编译数据库文件。假设你使用的是 make
来构建项目:
bear -- make
compile_commands.json 文件
生成的 compile_commands 文件如下所示:
[
{
"directory": "/home/user/ning_ebpf",
"command": "clang -I/usr/src/linux-headers-$(uname -r)/include -I/usr/src/linux-headers-$(uname -r)/include/uapi -o main.o -c src/main.c",
"file": "src/main.c"
}
]
配置 .clangd 文件
在项目根目录下创建或编辑 .clangd
文件,添加以下内容:
CompileFlags:
Add:
- -isystem
- /usr/src/linux-headers-$(shell uname -r)/include
- -isystem
- /usr/src/linux-headers-$(shell uname -r)/include/uapi
配置 VS Code 使用上述生成的 compile_commands.json
确保 compile_commands.json
文件位于项目根目录: compile_commands.json
文件应该位于项目的根目录。VS Code 和 Clangd 会自动查找该文件。
在 settings.json
中添加以下配置:
{
"clangd.path": "clangd",
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}"
]
}
最终配置好后的项目目录如下:
(需要注意的是,这里没有使用项目的编程框架。)
生效与验证
-
重启 VS Code: 重启 VS Code 以确保配置生效。
-
查看 Clangd 输出: 在 VS Code 的输出窗口中选择 clangd,查看是否有错误信息。