/* 你的 HTML 代码将放在这里 */
L
O
A
D
I
N
G
紅葉
GDB_ros2

GDB_ros2

用GDB运行ros2程序

1.安装依赖

本教程参考 GDB-ros2

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

1
sudo apt install ros-humble-backward-ros

然后在编译 ROS2 程序时,添加 CMAKE_BUILD_TYPE 编译类型选项参数,可以选择 RelWithDebInfoDebugRelease。对应 CMake 的三种编译选项,其中 Release 模式主要用于发布代码,会忽略调试信息;Debug 模式主要用于调试代码,因为需要生成调试信息,所以时间较长;RelWithDebInfo 则在 Release 模式下生成调试信息,也可以用于调试代码。通常建议使用 RelWithDebInfo 即可。

colcon 编译命令如下:

1
colcon build --cmake-args '-DCMAKE_BUILD_TYPE=RelWithDebInfo'

这里的引号不是必须的,因此也可以写成这样:

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

colcon 支持 --symlink-install 选项,作用是工作空间(source)中的文件发生变化时,安装目录(build)的文件也会随着改变。这样在调试的时候会高效一些,命令如下:

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

在package.xml里面添加

1
<depend>backward_ros</depend>

在CMakeLists.txt里面添加

1
find_package(backward_ros REQUIRED)

如果你想要加快编译速度,可以使用 --parallel-workers 选项开启多个线程并行编译,例如同时启动 5 个线程:

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

编译完成后,就可以通过 ros2 run 命令带上 --prefix 参数传入 gdb 指令,在 GDB 调试环境中启动 ROS 节点程序。命令语法如下:

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

这里的 package_name 是 ROS 包名,executable_name 是节点程序名。

配置 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 协议进行许可