GDB_ros2
🐞 本文内容
用 backward_ros + GDB 调试 ROS2 程序:带调试信息编译、在 GDB 里启动节点,以及用 GDB Server 远程调试。
用 backward_ros + GDB 调试 ROS2 程序:带调试信息编译、在 GDB 里启动节点,以及用 GDB Server 远程调试。
📖 本教程参考:ROS2 调试方法
📦 1. 安装依赖
这里使用 backward_ros 软件包。它是 backward-cpp 的 ROS2 封装,可以简单快速地用 GDB 调试 ROS2 程序。
1 | |
然后在功能包里声明依赖。
package.xml 中添加:
1 | |
CMakeLists.txt 中添加:
1 | |
🔨 2. 带调试信息编译
编译时添加 CMAKE_BUILD_TYPE 选项,对应 CMake 的三种编译类型:
| 类型 | 说明 |
|---|---|
Release |
用于发布,不生成调试信息 |
Debug |
用于调试,生成完整调试信息,编译较慢 |
RelWithDebInfo |
在 Release 优化的基础上生成调试信息,通常推荐这个 |
1 | |
💡 写成
'-DCMAKE_BUILD_TYPE=RelWithDebInfo'加引号也可以,引号不是必须的。
加上 --symlink-install,源码目录中的文件变化会直接反映到安装目录,调试时更高效:
1 | |
想加快编译速度,可以用 --parallel-workers 开多个线程并行编译,例如 5 个:
1 | |
🚀 3. 在 GDB 中启动节点
编译完成后,通过 ros2 run 的 --prefix 参数传入 gdb 指令,就能在 GDB 环境中启动 ROS 节点:
1 | |
其中 package_name 是 ROS 包名,executable_name 是节点程序名。
🌐 4. 配置 GDB Server 远程调试
ROS 中的 GDB 调试同样支持 GDB Server 远程调试,只需要修改 --prefix 参数:
1 | |
