vscode中使用clang+clangd+lldb

在vscode中使用clang+clangd+lldb

安装


1
2
sudo apt install clangd-12 clang-12 clang-format-12
# sudo apt install lldb-12

vscode 插件中需安装 clangd, CMake Tools, CodeLLDB

前面装了 clangd-12,在 vscode 并不能正常调用,还需建立 clangd 到 clangd-12 的软链接,这里不用 ln -s ,而是使用 update-alternatives 来管理

1
2
3
4
5
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-12 0 --slave /usr/bin/clangd clangd /usr/bin/clangd-12 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-12 --slave /usr/bin/clang-format clang-format /usr/bin/clang-format-12 --slave /usr/bin/lldb lldb /usr/bin/lldb-12 --slave /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-12
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-10 1 --slave /usr/bin/clangd clangd /usr/bin/clangd-10 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-10 --slave /usr/bin/clang-format clang-format /usr/bin/clang-format-10 --slave /usr/bin/lldb lldb /usr/bin/lldb-10 --slave /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-10
# 指定slave和master的作用在于,master进行变动时,slave也会进行变动。比如 clang(master)从11.0切换到12.0时,clang++(slave)也会从11.0切换到12.0
# 需要切换版本时
sudo update-alternatives --config clang

自动补全

相比与微软官方的C/C++插件,个人更喜欢用clangd插件,当然C/C++ Advanced Lint等插件也不错。需要注意的是,clangd插件中还带有代码格式化功能,开启此插件会替换掉C/C++插件的代码格式化。

此外启用clangd之后,头文件的管理也不是在.vscode/c_cpp_properties.json中了,需要compile_commands.json文件,CMake配置如下。

1
2
# 生成compile_commands.json
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

调试


CMake Tools 插件中选择使用Clang-12工具链,截止本文撰写日期,CMake Tools 还不能正常启动 lldb 调试,只能用 gdb,所以还是使用 CodeLLDB 插件 + launch.json 的方式调试。

CodeLLDB插件中内嵌了一个LLDB,不需要另外安装,用法也很简单,如下。

1
2
3
4
5
6
7
8
9
10
{
"name": "Launch",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/<my program>",
"args": ["-arg1", "-arg2"],
"initCommands": [
"command script import xxxxx.py"
]
}

进阶调试


要加入其他插件也很方便。比如说CodeLLDB附带的显示图片脚本,以及lldbinit

这里有一点需要注意,目前CodeLLDB内置的python是3.9版本,而Ubuntu 20.4默认是3.8版本(截至2021.12)。在装包的时候需要注意。

1
python3.9 -m pip install --user matplotlib --upgrade --ignore-installed

这里我参考了几个项目,修改了CodeLLDB附带的显示图片脚本,使其支持cv::Mat,如下图

lldb 显示 cv::mat

脚本链接:debugvis.py

使用说明:

  1. ~/.lldbinit中加入command script import {your location}/debugvis.py
  2. 假设要查看的cv::Mat图片为image
  3. 方法1:vscode中创建conditional breakpoint,输入/py debugvis.plot_cvimage($image)
  4. 方法2:debug console中输入imshow image

参考:
https://github.com/vadimcn/vscode-lldb/wiki/Data-visualization
https://github.com/longcw/LLDB-Opencv-Data-Formatter
https://github.com/houqi/CvMatForLLDB

作者

Yida

发布于

2021-08-17

更新于

2022-02-17

许可协议

评论