紅葉~
L
O
A
D
I
N
G
紅葉
GDB_ros2

GDB_ros2

🐞 本文内容
用 backward_ros + GDB 调试 ROS2 程序:带调试信息编译、在 GDB 里启动节点,以及用 GDB Server 远程调试。

📖 本教程参考:ROS2 调试方法

📦 1. 安装依赖

这里使用 backward_ros 软件包。它是 backward-cpp 的 ROS2 封装,可以简单快速地用 GDB 调试 ROS2 程序。

1
sudo apt install ros-humble-backward-ros

然后在功能包里声明依赖。

package.xml 中添加:

1
<depend>backward_ros</depend>

CMakeLists.txt 中添加:

1
find_package(backward_ros REQUIRED)

🔨 2. 带调试信息编译

编译时添加 CMAKE_BUILD_TYPE 选项,对应 CMake 的三种编译类型:

类型 说明
Release 用于发布,不生成调试信息
Debug 用于调试,生成完整调试信息,编译较慢
RelWithDebInfo 在 Release 优化的基础上生成调试信息,通常推荐这个
1
colcon build --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo

💡 写成 '-DCMAKE_BUILD_TYPE=RelWithDebInfo' 加引号也可以,引号不是必须的。

加上 --symlink-install,源码目录中的文件变化会直接反映到安装目录,调试时更高效:

1
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo

想加快编译速度,可以用 --parallel-workers 开多个线程并行编译,例如 5 个:

1
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo --parallel-workers 5

🚀 3. 在 GDB 中启动节点

编译完成后,通过 ros2 run 的 --prefix 参数传入 gdb 指令,就能在 GDB 环境中启动 ROS 节点:

1
ros2 run --prefix 'gdb -ex run --args' package_name executable_name

其中 package_name 是 ROS 包名,executable_name 是节点程序名。

🌐 4. 配置 GDB Server 远程调试

ROS 中的 GDB 调试同样支持 GDB Server 远程调试,只需要修改 --prefix 参数:

1
ros2 run --prefix 'gdbserver localhost:3000' package_name executable_name
本文作者:紅葉
本文链接:https://swe-et.github.io/GDB-ros2/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可