在 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

相关推荐
眠りたいです2 小时前
Docker:镜像的运行实体-Docker Container
java·运维·c++·docker·容器·eureka
HIT_Weston2 小时前
74、【Ubuntu】【Hugo】搭建私人博客:VSCode 插件&配置
linux·vscode·ubuntu
ComputerInBook2 小时前
C++ 标准提供的 thread (线程)之 join() 函数示例(windows平台)
c++·线程·join函数
快乐的划水a2 小时前
嵌入式时间测量方法总结
c++·stm32·单片机
郝学胜-神的一滴2 小时前
GLSL语法详解:从入门到实战
c++·算法·图形渲染
WebRuntime2 小时前
所有64位WinForm应用都是Chromium浏览器
javascript·c++·c#·.net·web
杰克崔2 小时前
vscode的缓存文件夹及查看进程读写的文件
ide·vscode·编辑器
小此方2 小时前
Re: ゼロから学ぶ C++ 入門(七)类和对象·第四篇:拷贝构造函数&赋值运算符重载
开发语言·c++
罗湖老棍子3 小时前
C++ 自定义排序与优先队列运算符重载
数据结构·c++·算法··优先队列·运算符重载