• ROS 代码调试常用方式配置


    调试工具

    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调试

    日志调试

    1、日志等级

     ROS的日志具有DEBUG、INFO、WARN、ERROR、FATAL等5个级别

     对应于ROS_DEBUG、ROS_INFO、ROS_WARN、ROS_ERROR、ROS_FATAL

         等五个宏,依次按严重程度递增

    2、日志位置

     但日志目录地址由ROS_LOG_DIR变量定义,默认ROS_LOG_DIR为~/.ros/log。

     可以在~/.bashrc文件中设置ROS_LOG_DIR变量定义日志目录

    GDB调试步骤   重点!!

     步骤1  进入调试模式

     步骤2  配置目标文件

     步骤3  开始调试

    步骤1 :进入调试模式

    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执行剩下的命令行

     在VSCode中GDB可视化调试:

    在launch.json中配置program项

    通过菜单“运行”->“启动调试”启动可视化调试

    配置目标文件

    1. {
    2. "version": "0.2.0", "configurations": [
    3. {
    4. "name": "Debug",
    5. "type":"cppdbg",
    6. "request": "launch",
    7. //“hello”为欲调试的可执行程序,开发者需根据实际路径修改
    8. "program": "${workspaceRoot}/devel/lib/example_1/hello"
    9. "cwd": ".",
    10. }

    开始调试

    设置好断点,再启动Master节点,

    然后就可以通过“运行”-->“启动调试”开始调试ROS了。

     

    潜了解一下,不多重点使用VScode:

    Valgrind调试

    Valgrind由模拟CPU的Core调试工具插件如Memcheck插件组成。 

    Memcheck:内存泄露、不正确的内存分配/释放

    Callgrind:函数调用关系分析

    Cachegrind:缓存丢失、命中分析

    Helgrind:多线程场景访问竞争分析

    Massif:堆栈分析 

    Valgrind调试:

    如果希望利用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 显示内存泄露的类型

     

  • 相关阅读:
    Django2.2序列化 ‘str‘ object has no attribute ‘decode‘
    Tomcat深入浅出——最终章(六)
    还不会小程序开发?适用于新手、前端、后端、全栈的小程序开发保姆级教程!
    Spring的常见注解
    为机器学习算法准备数据(Machine Learning 研习之八)
    肠道病毒组识别早产儿坏死性小肠结肠炎发病前的特异性病毒特征
    基于KDtree的电路故障检测算法的MATLAB仿真
    使用K8S进行蓝绿部署的简明实操指南
    iOS .a类型静态库使用终端进行拆解和合并生成
    服务号转为订阅号可以吗
  • 原文地址:https://blog.csdn.net/weixin_44025389/article/details/126486759