在 vscode 中断点调试 ROS2 C++ 的办法

在 vscode 中断点调试 ROS2 C++ 的办法

  大部分内容引用自 知乎,不过有一些不同,所以还是单独写一篇博客。

安装ROS插件

  在 VSCode 插件市场找到 Robotics Developer Environment 插件并安装。

编译Debug版本

bash 复制代码
colcon build --cmake-args  -DCMAKE_BUILD_TYPE=Debug --symlink-install

  DCMAKE_BUILD_TYPE 一定不能是 Release,否则无法 debug。

创建/修改配置文件

  完成编译后,使用 f1 打开指令栏,输入:ROS2: Update C++ Properties 然后确认。

  这会帮你在 .vscode 文件夹下生成 c_cpp_properties.json 和 settings.json 文件。这会帮你的 vscode 理解项目依赖的路径。修改 settings.json 文件, 在文件最后一个 } 前添加:

json 复制代码
	"ROS2.distro": "jazzy",
    "ROS2.rosSetupScript": "${workspaceFolder}/install/local_setup.bash"

  这会让 ros 插件 Source 当前的工作空间。

  然后,创建 launch.json 文件 ,并写入以下内容:

json 复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "ROS2: Launch my file",
            "request": "launch",
            "target": "${workspaceFolder}/install/xxx",
            "launch": ["rviz", "gz", "gzserver", "gzclient"],
            "type": "ros"
        }
    ]
}

  target 指向实际的 launch 文件。

  如果只想对一个节点进行 debug,则应该向 launch.json 文件中加入:

json 复制代码
    {
        "name": "ROS2 C++ Debug",
        "request": "launch",
        "type": "cppdbg",
        "MIMode": "gdb",
        "cwd": "${workspaceFolder}",
        "program": "${workspaceFolder}/install/xxx/.../your_node"
    }

  program 指向实际的的可执行文件。

调试

  在 Run and debug 栏,选择相应的配置项目,然后点击 F5 就可以对程序进行断点调试了。

一些问题处理

xxx.so: cannot open shared object file: No such file or directory

  使用 vscode 调试 ROS 程序时出现 error while loading shared libraries: liblibstatistics_collector.so: cannot open shared object file: No such file or directory。重新 ldconfig 一下就好了:

bash 复制代码
sudo ldconfig /opt/ros/<distro>/lib/.

Refrences

https://zhuanlan.zhihu.com/p/697007274

https://blog.csdn.net/hi_python01/article/details/148789028

相关推荐
蹊黎12 分钟前
C++中vector类的部分简单实现
开发语言·c++·visual studio
xier_ran7 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
jimy19 小时前
c++的 Type Traits (一)
开发语言·c++
别动我齐刘海10 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
ZZHow102411 小时前
Ascend C算子开发(高级)笔记
c++·人工智能·笔记·深度学习·华为云
aqiu11111111 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
lojox12 小时前
深入理解 C++ STL:vector 底层实现、迭代器失效与 list 特性
开发语言·c++
微笑星河q12 小时前
C++类和对象(下)初始化列表、类型转换、static、友元、内部类、匿名对象
开发语言·c++
|_⊙13 小时前
C++ 类和对象零散知识点
开发语言·c++
xiangyun6113 小时前
C++ list 模拟实现(二):const迭代器与反向迭代器,模板的黑魔法
开发语言·数据库·c++·算法·stl·list