VSCode已经具有远程开发的能力,可以使用SSH连接到Linux/MacOS进行远程开发,包括编译与调试,只需要安装Remote Development
插件即可,如果想使用CMake管理项目,则需要将VSCode的CMake
以及CMake Tools
插件安装在远程机器上。
Linux上的常规编译调试工具为GCC以及GDB工具链,如果想使用Clang和LLDB工具链,则需要使用选装,本文笔者以Ubuntu 22.04为例进行介绍。
Ubuntu 22.04目前默认的Clang版本为14,可以使用的新版本为15,笔者使用15版本,使用下面的命令进行安装:
sudo apt install llvm-15
sudo apt install clang-15
sudo apt install lldb-15
如果使用14版本,则直接使用不带版本的命令:
sudo apt install llvm
sudo apt install clang
sudo apt install lldb
如果是安装的非默认版本,可能需要自行进行链接,否则会找不到命令:
sudo ln -s /usr/lib/llvm-15/bin/clang /usr/bin/clang
sudo ln -s /usr/lib/llvm-15/bin/clang++ /usr/bin/clang++
sudo ln -s /usr/lib/llvm-15/bin/lldb /usr/bin/lldb
sudo ln -s /usr/lib/llvm-15/bin/lldb-server-15.0.7 /usr/bin/
由于VSCode的调试接口是按GDB的接口开发的,所以需要一个适配器,lldb-mi
就是干这个事的。以前lldb-mi
是属于LLVM
项目的一部分,后面LLVM
将之剔除掉了,成了一个单独的项目https://github.com/lldb-tools/lldb-mi,有一个邮件列表进行了说明。
lldb-mi
独立后,ubuntu并没有进行编译打包,所以需要自行编译安装。
按照说明,使用下面的命令进行编译
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE:STRING=Release
结果会报错:
[CMake] CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
[CMake] Please set them or make sure they are set and tested correctly in the CMake files:
[CMake] lib_lldb
[CMake] linked by target "lldb-mi" in directory XXXXXXXX
这是因为没有安装lldb
的开发包:
sudo apt install liblldb-15-dev
cmake
配置成功后,使用下面的命令编译:
cmake --build .
编译成功后将之复制到/usr/bin/
。
此时使用lldb
或者lldb-mi
会报错:
Traceback (most recent call last):
File "" , line 1, in <module>
ModuleNotFoundError: No module named 'lldb.embedded_interpreter'
这是应该是LLDB的BUG,路径问题,使用lldb -P
来查看查找的路径:
lldb -P
Traceback (most recent call last):
File "" , line 1, in <module>
ModuleNotFoundError: No module named 'lldb.embedded_interpreter'
/usr/lib/local/lib/python3.10/dist-packages
使用下面的命令做一个软链接即可。
sudo mkdir -p /usr/lib/local/lib/python3.10/dist-packages
sudo ln -s /usr/lib/llvm-15/lib/python3.10/dist-packages/lldb /usr/lib/local/lib/python3.10/dist-packages
在VSCode的launch.json
中添加如下配置即可使用lldb
进行调试了:
{
{
"name": "(lldb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/t",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"miDebuggerPath": "/usr/bin/lldb-mi",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "setting set target.x86-disassembly-flavor intel",
"ignoreFailures": true
}
]
},
}
注意:VSCode目前还不能使用LLDB进行反汇编调试,一反汇编调试则会卡死,需要重启VSCode