VSCode已经具有远程开发的能力,可以使用SSH连接到Linux/MacOS进行远程开发,包括编译与调试,只需要安装Remote Development插件即可,如果想使用CMake管理项目,则需要将VSCode的CMake以及CMake Tools插件安装在远程机器上。

Linux上的常规编译调试工具为GCC以及GDB工具链,如果想使用Clang和LLDB工具链,则需要使用选装,本文笔者以Ubuntu 22.04为例进行介绍。

一、安装Clang、LLDB

Ubuntu 22.04目前默认的Clang版本为14,可以使用的新版本为15,笔者使用15版本,使用下面的命令进行安装:

1sudo apt install llvm-15
2sudo apt install clang-15
3sudo apt install lldb-15

如果使用14版本,则直接使用不带版本的命令:

1sudo apt install llvm
2sudo apt install clang
3sudo apt install lldb

如果是安装的非默认版本,可能需要自行进行链接,否则会找不到命令:

1sudo ln -s /usr/lib/llvm-15/bin/clang /usr/bin/clang
2sudo ln -s /usr/lib/llvm-15/bin/clang++ /usr/bin/clang++
3sudo ln -s /usr/lib/llvm-15/bin/lldb /usr/bin/lldb
4sudo ln -s /usr/lib/llvm-15/bin/lldb-server-15.0.7 /usr/bin/

二、安装lldb-mi

由于VSCode的调试接口是按GDB的接口开发的,所以需要一个适配器,lldb-mi就是干这个事的。以前lldb-mi是属于LLVM项目的一部分,后面LLVM将之剔除掉了,成了一个单独的项目 https://github.com/lldb-tools/lldb-mi,有一个 邮件列表进行了说明。

lldb-mi独立后,ubuntu并没有进行编译打包,所以需要自行编译安装。

按照说明,使用下面的命令进行编译

1git clone https://github.com/lldb-tools/lldb-mi.git
2cd lldb-mi
3mkdir build
4cd build
5cmake .. -DCMAKE_BUILD_TYPE:STRING=Release

结果会报错:

1[CMake] CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
2[CMake] Please set them or make sure they are set and tested correctly in the CMake files:
3[CMake] lib_lldb
4[CMake]     linked by target "lldb-mi" in directory XXXXXXXX

这是因为没有安装lldb的开发包:

1sudo apt install liblldb-15-dev

cmake配置成功后,使用下面的命令编译:

1cmake --build .

编译成功后将之复制到/usr/bin/

三、测试

此时使用lldb或者lldb-mi会报错:

1Traceback (most recent call last):
2  File "<string>", line 1, in <module>
3ModuleNotFoundError: No module named 'lldb.embedded_interpreter'

这是应该是LLDB的BUG,路径问题,使用lldb -P来查看查找的路径:

1lldb -P
2Traceback (most recent call last):
3  File "<string>", line 1, in <module>
4ModuleNotFoundError: No module named 'lldb.embedded_interpreter'
5/usr/lib/local/lib/python3.10/dist-packages

使用下面的命令做一个软链接即可。

1sudo mkdir -p /usr/lib/local/lib/python3.10/dist-packages
2sudo ln -s /usr/lib/llvm-15/lib/python3.10/dist-packages/lldb /usr/lib/local/lib/python3.10/dist-packages

在VSCode的launch.json中添加如下配置即可使用lldb进行调试了:

 1{
 2	{
 3			"name": "(lldb) 启动",
 4			"type": "cppdbg",
 5			"request": "launch",
 6			"program": "${workspaceFolder}/build/t",
 7			"args": [],
 8			"stopAtEntry": false,
 9			"cwd": "${fileDirname}",
10			"environment": [],
11			"externalConsole": false,
12			"MIMode": "lldb",
13			"miDebuggerPath": "/usr/bin/lldb-mi",
14			"setupCommands": [
15				{
16					"description": "为 gdb 启用整齐打印",
17					"text": "-enable-pretty-printing",
18					"ignoreFailures": true
19				},
20				{
21					"description": "将反汇编风格设置为 Intel",
22					"text": "setting set target.x86-disassembly-flavor intel",
23					"ignoreFailures": true
24				}
25			]
26		},
27}

注意:VSCode目前还不能使用LLDB进行反汇编调试,一反汇编调试则会卡死,需要重启VSCode