ROS集成了很多调试工具如
代码调试、可视化调试、单元测试、通信调试、系统检查、系统仿真等。
代码调试:GDB、valgrind、log(rqt_logger_level)等
可视化调试:网络拓扑rqt_graph、消息rqt_console、
日志rqt_logger_level、三维可视化RVIZ、趋势图rqt_plot等
单元测试:C++单元测试框架gtest、Python单元测试框架nosetests
通信调试:rostopic 、rosbag等
系统检查:roswtf、rosnode、rosservice 、rosparam等 系统仿真:URDF、Gazebo等
日志调试 GDB调试 Valgrind调试
ROS的日志具有DEBUG、INFO、WARN、ERROR、FATAL等5个级别
对应于ROS_DEBUG、ROS_INFO、ROS_WARN、ROS_ERROR、ROS_FATAL
等五个宏,依次按严重程度递增
但日志目录地址由ROS_LOG_DIR变量定义,默认ROS_LOG_DIR为~/.ros/log。
可以在~/.bashrc文件中设置ROS_LOG_DIR变量定义日志目录
步骤1 进入调试模式
步骤2 配置目标文件
步骤3 开始调试
GDB是GNU出品的一个C/C++调试工具,通过设置断点可以查看程序的当前变量和环境。
通过命令进入ROS调试模式,命令如下:
$catkin config -DCMAKE_BUILD_TYPE=Debug
GDB命令调试
"client" pkg="example_3" type="client" output="screen" launch-prefix="xterm-egdb--args"/>
xterm命令表示新建一个terminal,-e参数告诉xterm执行剩下的命令行
在launch.json中配置program项
通过菜单“运行”->“启动调试”启动可视化调试
- {
- "version": "0.2.0", "configurations": [
- {
- "name": "Debug",
- "type":"cppdbg",
- "request": "launch",
- //“hello”为欲调试的可执行程序,开发者需根据实际路径修改
- "program": "${workspaceRoot}/devel/lib/example_1/hello"
- "cwd": ".",
- }
设置好断点,再启动Master节点,
然后就可以通过“运行”-->“启动调试”开始调试ROS了。
Valgrind调试
Valgrind由模拟CPU的Core和调试工具插件如Memcheck插件组成。
Memcheck:内存泄露、不正确的内存分配/释放
Callgrind:函数调用关系分析
Cachegrind:缓存丢失、命中分析
Helgrind:多线程场景访问竞争分析
Massif:堆栈分析
如果希望利用valgrind来检测内存泄漏,并进行性能分析,配置launch文件,方法如下:
"hello" pkg="example_1" type="hello" output="screen" launch-prefix="valgrind--leak- check=full --show-leak-kinds=all"/>
–track-origins:yes 是否显示未定义的变量
-leak-check:no|summary|full 当服务器退出时是否收集输出内存泄漏
--show-leak-kinds:all 显示内存泄露的类型