zoukankan      html  css  js  c++  java
  • 使用kdbg或nemiver调试ROS

    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=$1
    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即可启动节点进行调试

  • 相关阅读:
    03-链表
    23-自定义用户模型
    01-使用pipenv管理项目环境
    10-多线程、多进程和线程池编程
    17-Python执行JS代码--PyExecJS、PyV8、Js2Py
    09-Python-Socket编程
    08-迭代器和生成器
    07-元类编程
    06-对象引用、可变性和垃圾回收
    05-深入python的set和dict
  • 原文地址:https://www.cnblogs.com/astreye/p/5229423.html
Copyright © 2011-2022 走看看