• 6.18-gdb,ros and roslaunch with gdb


    TOC

    参考

    《ROS机器人程序开发》
    《嵌入式Linux开发基础知识》
    roslaunch wiki

    前言

    • 这是必须学习的技能,但是不需要精通,应该利用更高层的工具
    • 在ROS项目开发过程中应用,在使用roslaunch过程中应用gdb
    • 在CLion,VSCode使用过程中应用调试功能

    gdb学习

    • 是一个用来调试C/C++程序的强力调试器,常用功能有:监视程序中变量的值;设置断点;单步执行

    • 为了使gdb正常工作,你必须使你的程序在编译时包含调试信息gcc -g调试信息包括你程序里的每一个变量的类型和在可执行文件里的地址映射以及源代码的行号。
    • 你可以使用gdb调试一个可执行文件,也可以用gdb检查一个因程序异常终止而产生的core文件,或者与一个正在运行的程序相连。更多请参考gdb -h
    • 命令支持tab补齐特性

    使用要点

    • gdb打开调试器
    • file FILE装载指定可执行文件
    • break NUM在指定的行上设置断点
    • bt显示所有的调用栈帧,显示函数的调用顺序
    • clear FILENAME:NUM删除特定源文件行上的断点
    • next在不单步执行进入其他函数的情况下,向前执行一行源代码
    • continue继续执行
    • display EXPR每次程序停止后显示表达式的值,表达式由程序定义的变量组成
    • print EXPR显示表达式的值
    • info files显示被调试文件的详细信息
    • info func显示所有函数名称
    • info local显示当函数中的局部变量信息
    • info prog显示被调试程序的执行状态
    • info var显示所有的全局和静态变量名称
    • kill终止正在被调试的程序
    • list显示源代码段
    • make在不退出gdb的情况下运行make工具

    ROS node debug with gdb(使用gdb调试ROS节点)

    • 从调试任意C/C++可执行文件的标准方法开始
    roscore
    gdb bin/example
    r
    • ros节点启动时调用gdb调试器
      需要在launch文件中添加launch-prefix="xterm-egdb--args",该语句意思是:加载节点并等待运行。注意,因为是在xterm中创建gdb绘画,所以还有一个调试窗口。
    • launch-prefix其实是一个前置启动工具,我们同样可以使用launch-prefix="valgrind"来在启动节点之前启动valgrind工具检测内存泄露,并执行性能分析。valgrind.org
    • 更多请见

      How to Roslaunch Nodes in Valgrind or GDB

    roslaunch 学习和调试

    • launch文件:功能包名传递给pkg属性,节点名传递给type属性,由于同一个节点可以运行多个实例,因此需要给每个实例一个节点名以作区分,即name属性,最好将这些属性配置输出到屏幕,这样就会在启动节点的shell窗口中输出相应调试信息,output=screen。

    实例:调试ROS项目

  • 相关阅读:
    访存模型
    Petri网
    Forward secrecy
    TensorFlow训练神经网络cost一直为0
    解决tensorflow在训练的时候权重是nan问题
    tf.argmax
    Keras教程
    z-score
    隐马尔可夫(HMM)、前/后向算法、Viterbi算法
    受限玻尔兹曼机基础教程
  • 原文地址:https://www.cnblogs.com/lizhensheng/p/11117480.html
Copyright © 2020-2023  润新知