更受欢迎的开源机器人操作系统ROS已经九岁了。ROS给机器人系统的进程间通讯提供了一个统一的,跨平台的框架,这给经常连接几十个各种各样设备的机器人应用带来了非常大的便利。我也很喜欢使用ROS,以前打Robocup的时候,整个人形机器人的上层控制系统就是全部基于ROS Groovy写的。那时候开发和Debug主要靠Qt,反正队里有大神搞定编译的问题。
但如果不能用Qt之类的IDE呢?其实和其他Linux编程一样,用命令行有很方便而且很轻便的工具,只是上手未必容易。今天这篇文章我们把命令行下Debug ROS程序的流程整个梳理一遍,看完你会发现,其实并不复杂!
我们使用的主要工具是GDB。这是Linux诸多c/c++ debug工具中最流行的一种。只要你装了gcc(这是大多数Linux系统的默认c/c++编译器),GDB一般都捆绑安装过了。本文只讨论使用c++的 ROS程序。Python有PDB,我还不了解。
如果有更好的方法欢迎留言讨论!
步骤一 Build with debug label
编译器有些优化会让debug无法进行。为了避免这种情况,程序编译时要加上debug选项。
如果你用Catkin,用catkin_make 时加上一个参数:
catkin_make -DCMAKE_BUILD_TYPE=Debug
如果你想给Release版本Debug,就这样
catkin_make -DCMAKE_BUILD_TYPE=RelWithDebInfo
如果你用Rosbuild,在你的CMakeLists.txt靠近顶部的位置加上这样一句即可:
set(ROS_B