大纲
工欲善其事必先利其器。直接使用GDB调试代码毕竟不是很方便,我们将探索如何使用VSCode调试ROS2的代码。
我们以《Robot Operating System——创建最简单项目的步骤》的代码为基础,讲解如何配置和调试。
安装插件/组件
VSCode插件
在VSCode的插件页面,我们在远程开发环境中安装CMake Tools和C/C++。
调试组件
然后在远程环境(Linux)中安装必须的调试组件
sudo apt-get update
sudo apt-get install build-essential gdb
自定义cmake命令
由于ROS2在编译运行前,都要通过下面命令初始化环境
source /opt/ros/jazzy/setup.bash
而CMake Tools没有设置该行为的机会,我们只能自定义一个文件,然后通过它来代理cmake的执行。
sudo vim ~/ros2-cmake.sh
然后填入以下内容
#!/bin/bash
# 检查是否提供了至少一个参数
if [ "$#" -lt 1 ]; then
echo "Usage: $0 <cmake-arguments>"
exit 1
fi
# Source 环境设置脚本
source /opt/ros/jazzy/setup.bash
# 运行传递进来的 cmake 命令
cmake "$@"
保存文件后,我们赋予其执行权限。
sudo chmod +x ~/ros2-cmake.sh
然后将其软链接到/usr/bin目录下
sudo ln -s ~/ros2-cmake.sh /usr/bin/ros2-cmake
后面我就可以使用ros2-cmake来编译我们的ROS2相关的工程了。
配置CMake Tools
新增CMakePresets.json
我们在CMakeLists.txt同级目录下新增CMakePresets.json,其内容如下
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 10,
"patch": 0
},
"configurePresets": [
{
"name": "Debug",
"hidden": false,
"description": "Debug build",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build/",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "YES"
},
"environment": {
"CC": "gcc",
"CXX": "g++"
}
},
{
"name": "Release",
"hidden": false,
"description": "Release build",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build/",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
},
"environment": {
"CC": "gcc",
"CXX": "g++"
}
}
]
}
修改默认的cmake
Ctrl+P打开命令输入创建,输入并选择
> CMake:Open CMake Tools Extension Settings
定位到Workspace下,并找到CMake: Cmake Path
,将其值改成ros2-cmake。这样只有我们测试的工程的cmake被修改,而不会影响到整个实例。
编译Debug版
Ctrl+P唤出命令输入框,输入并选择
> CMake:Select Configure Preset
然后选择Debug
这一步会触发编译
配置测试环境
修改./bashrc文件
sudo vim ~/.bashrc
在其末尾新增一行,输入source /opt/ros/jazzy/setup.bash
这样启动的测试环境也将准备好环境。
启动测试
我们先在main函数中下断点
然后在侧边栏CMake Tools的PROJECT OUTLINE下找到我们要调试的文件,然后右击它,选择Debug
。
然后我们看到代码中断到断点处
总结
- 需要配置CMakePresets.json文件。
- 需要自定义cmake命令,用于编译链接。
- 需要修改当前用户shell打开时的环境,用于调试。