Kdbg

Kdbg是KDE环境下的一个gdb的前端GUI,使用起来比较友好,速度也很快,安装和使用请参考:

http://www.kdbg.org/

在UBUNTU下可以直接使用APT安装:

sudo apt-get install kdbg

安装运行后会遇到类似“MNG error 11: Function is invalid at this point; chunk MHDR; subcode 0:0”的错误

将/usr/share/kde4/apps/kdbg/icons/hicolor/22x22/actions/pulse.mng删除即可

Nemiver

nemiver是基于GNOME的gdb前端,非常强大,但是速度有点慢

在UBUNTU下直接使用apt安装:

sudo apt-get install nemiver

在ROS中使用调试器(gdb前端)必须使用DEBUG模式编译待运行的包,具体方式是:

catkin_make -DCMAKE_BUILD_TYPE=Debug

使用调试器的方式有两种:

一种是在启动节点(Node)后,使用ATTACH的方式进行调试。这种方式KDBG与nemiver都支持,这里不多做介绍,只需要知道node的执行文件一般在

<CATKIN_WORKSPACE>/devel/lib/<PKG_NAME>下,如:~/code/ros/catkin_ws/devel/lib/robot_localization

另一种方式是在launch文件中指定node启动的命令前缀,即node的launch-prefix属性,请参考如下链接:

Roslaunch Nodes in Valgrind or GDB

node

我们也可以指定launch-prefix为其他工具,比如我刚刚介绍的nemiver和kdbg

例如:

#localization_starter.launch
<launch>
<arg name="debugger" default="" /> <node pkg="robot_localization"
type="ekf_localization_node"
name="ekf_localization"
clear_params="true"
launch-prefix="$(arg debugger)" />
</launch>

运行localization_starter.launch的时候就可以使用这样的方式制定debugger为nemiver:

roslaunch <MY_PKG_NAME>  localization_starter.launch debugger:=nemiver

nemiver可以直接指定为launch-prefix,但是kdbg的使用稍微麻烦一点,因为kdbg的命令行格式与该方式不兼容

使用prefix方式需要工具支持如下形式的命令行格式:

<TOOL_NAME> <EXEC_NAME> <EXEC_ARGS...>,如:nemiver git status

但kdbg的命令行格式为:kdbg -a "<EXEC_ARGS...>" <EXEC_NAME>

因此必须使用脚本进行格式转换,我使用的脚本如下:

#!/bin/bash

KDBG=kdbg

PROGRAM=$
shift
ARGS="$@" if [ "${ARGS}" != "" ] && [ "${PROGRAM}" != "" ]; then
${KDBG} -a "${ARGS}" "${PROGRAM}"
else
if [ "${PROGRAM}" != "" ]; then
${KDBG} -a " " "${PROGRAM}"
else
${KDBG}
fi
fi

将其命名为:kdbg-ros并添加到环境变量PATH中即可在ROS的launch文件中使用,仍以前面的localization_starter.launch为例:

roslaunch <MY_PKG_NAME>  localization_starter.launch debugger:=kdbg-ros

在KDBG启动后设置断点,之后点Run即可启动节点进行调试

使用kdbg或nemiver调试ROS的更多相关文章

  1. visual studio code 调试ROS的插件

    ctrl+p搜索: ext install ros https://marketplace.visualstudio.com/items?itemName=ajshort.ros 进行安装 其他可以调 ...

  2. Clion调试ROS包

    1. 安装 从官网下载最新版本的Clion https://www.jetbrains.com/clion/ 并解压到指定的目录,例如: /home/xkc/software/clion-2017.2 ...

  3. linux内核调试指南

    linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 ...

  4. 快速了解 Robot Operating System(ROS) 机器人操作系统

     http://www.ros.org/ 关于ROS About ROS http://www.ros.org/about-ros/ 机器人操作系统(ROS)是用于编写机器人软件的灵活框架.目的在简化 ...

  5. ROS机器人程序设计(原书第2版)补充资料 (叁) 第三章 可视化和调试工具

    ROS机器人程序设计(原书第2版)补充资料 (叁) 第三章 可视化和调试工具 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. ~$ rosl ...

  6. ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门

    ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...

  7. SLAM+语音机器人DIY系列:(二)ROS入门——9.熟练使用rviz

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  8. ROS使用小知识点

    输入 rosrun rqt_graph rqt_graph 可以打开一个界面观察节点与话题的关系 绿色和蓝色的是节点 红色的是话题 查看ros中额的tf转换信息 rosrun rqt_tf_tree ...

  9. ubuntu16.04使用Qt开发ROS

    本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Qt“新建项 ...

随机推荐

  1. Android知识点

    下面这段activity的配置可以防止onCreate方法在锁屏或者屏幕旋转时被调用,转而调用onConfigurationChanged方法,避免onCreate重复调用 <activity ...

  2. Android uiautomator实例使用

    转载自:http://blog.csdn.net/huiguixian/article/details/22398193 Android测试工具中,Monkey Runner只要简单几个指令即可,但他 ...

  3. [思维题]Bored Qishen

    给出一个整数集,其中包含1-n的所有整数,要求挑选出一个元素最多的子集,使得子集中任意两数的乘积不是完全平方数 (n<=10^6) 求这样一个最大子集的元素个数 #include <cst ...

  4. Java之文件的随机访问和读写RandomAccessFile

    package FileDemo; import java.io.IOException; import java.io.RandomAccessFile; public class RandomAc ...

  5. nyoj 69 数的长度

    数的长度 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出 ...

  6. hdoj 1402 Prepared for New Acmer【快速幂】

    Prepared for New Acmer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  7. java类的访问控制符与其他几个特殊修饰符的总结

    1  访问控制符 1.1 字段或者方法的访问控制符   同一个类中 同一个包中 不同包中的子类 不同包中的非子类 private YES       默认(包可访问) YES YES     prot ...

  8. iOS开发-网络-合理封装请求接口

    概述 如今大多App都会与网络打交道,作为开发者,合理的对网络后台请求接口进行封装十分重要.本文要介绍的就是一种常见的采用回调函数(方法)的网络接口封装,也算的是一种构架吧. 这个构架主要的idea是 ...

  9. MATLAB学习拾遗

    1.坐标轴修饰 axis equal:axis([0,6,0,6]) 不修饰则为默认网格 grid on 2.不太漂亮的pretty命令 3. Laplace变换 syms t s a b f1=ex ...

  10. hdu3589 Jacobi symbol(二次剩余 数论题)

    本题的注意点:n=p1*p2*p3......Pm 解法:直接利用公式a^((p-1)/2)=(a/p)mod p 即可求解. #include<stdio.h> #include< ...