WSL2 下 VS Code 编写 C 代码

记录 WSL2 下使用 VS Code 编写 C 代码并通过 Clang 调试时遇到的问题。

前戏

WSL2 的安装就不用说了,官方文档的描述非常详细,网上还有诸多大佬披荆斩棘写了很多好教程,搜索引擎一波就啥都搞定了;

VS Code 的语言插件就更不用说了,指定文件后缀并保存后,自然而然就知道需要装啥插件了,实在不行不还有搜索引擎嘛;

这里只安装了

C/C++

Remote - WSL

既然要用 Clang,当然需要安装了:在 WSL2 的子系统 linux 上安装llvmlldbclang

然后随便写个 demo 用于生成调试配置文件:

1,2

3

WSL 当然要选 C++(GDB/LLDB)了;

4

首先要选的是 Clang,至于选哪个看心情,反正哪个都能用,区别在于/usr/bin/usr/sbin,搜索引擎一波就知道差异和选择了;

5

至此,调试文件就生成了,开始调试,问题也就来了;

问题一:找不到lldb-mi-xxx,xxx 表示版本号

无图无真相:

error

看到问题提示时一头雾水,什么情况,还没开始就结束了?难道lldb中不包含lldb-mi吗?

lldb-mi: MI 调试程序;

几经查找后发现,貌似是 10.0 版本之后就不包含lldb-mi了,如果需要使用则自己编译,那还等什么;

官方存储库 lldb-tools/lldb-mi 根据文档编译即可(在 WSL2 的 linux 上);

懒得看请运行:

1
2
3
4
5
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
make .
make --build .
sudo cp src/lldb-mi /usr/bin

当然,也可以不管不顾直接调试(我就是这么干的 😭),毕竟“不听不听,王八念经”,然后会得到以下错误:

error1

或者:

1
2
3
4
Unable to start debugging. Unable to establish a connection to LLDB. The following message was written to stderr:
lldb: unrecognized option '--interpreter=mi'
...
(此处略去好多字儿)

最后还得滚回去(咳咳)编译lldb-mi

莫慌,还有其他解决方案,安装CodeLLDB插件,一触即达,也就不会遇到下面两个问题了;

问题一点五:编译lldb-micmake命令不存在?

这还不简单,sudo pacman -S cmake(仅适用于 Arch,其他版本请自查);

问题二:编译lldb-mi时出现”CMAKE_MAKE_PROGRAM is not set.”

出现此问题的应该不多,这里使用的是 Arch,其他 WSL2 子系统未知;

如果你也使用的是 Arch,并且是通过 yuk7/ArchWSL 安装的,那么就需要手动安装base-devel基础包,单独安装 cmake 会报此错误;

1
sudo pacman -S base-devel

如果是自己下载手动安装的 Arch(没有使用yuk7/ArchWSL),则不存在此问题;

然后编译并拷贝lldb-mi/usr/bin或其他$PATH路径,然后修改launch.json"miDebuggerPath""/usr/bin/lldb-mi"(默认是”/usr/bin/lldb-mi-xxx”),当然,也可以在拷贝时改名为lldb-mi-xxx,配置文件就不用改了;

目前就遇到这两个问题,既然解决了,测试一下:

ok