ROS项目的GDB调试
创始人
2024-06-02 09:56:29
0

首先安装gdb和xterm

sudo apt install xterm

Ubuntu系统一般默认自带gdb,通过 gdb -v 看看有没有输出,有版本输出则已安装,就不用再安装了 

sudo apt install gdb

开启编译选项

使用Debug调试,首先需要在程序编译时 加上debug选项,让cmake以debug模式编译,否则不会有gdb调试信息,无法查看源代码和设置断点等。

如果用命令行catkin_make,在输入catkin_make时加上一个参数:

catkin_make -DCMAKE_BUILD_TYPE=Debug

或者直接修改CMakelist.txt,添加以下代码:

SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

调试方法

一种是调试coredump文件,另一种是在线调试。

大多使用在线调试,而在线调试又分为 roslaunch 调试和 rosrun node调试

launch文件中添加GDB调试指令

修改ROS launch文件,在node标签中添加参数

launch-prefix="xterm -e gdb -ex run --args"

例子:

 

运行如下:

rosrun node 的方式进行调试

rosrun --prefix 'gdb -ex run --args' [package_name] [node_name] 

运行效果:

实战应用:

/*** 该例程将发布/person_info话题,自定义消息类型learning_topic::Person*/
#include 
#include "learning_topic/Person.h"int main(int argc, char **argv){ros::init(argc, argv, "person_publisher789");// ROS节点初始化ros::NodeHandle n;// 创建节点句柄// 创建一个Publisher,发布名为/person_info的topic,消息类型为learning_topic::Person,队列长度10ros::Publisher person_info_pub = n.advertise("/person_info/huati", 10);ros::Rate loop_rate(1);// 设置循环的频率int count = 0;while (ros::ok()){// 初始化learning_topic::Person类型的消息learning_topic::Person person_msg;person_msg.name = "Tom";person_msg.age  = 18;person_msg.sex  = learning_topic::Person::male;person_info_pub.publish(person_msg);// 发布消息ROS_INFO("Publish Person Info: name:%s  age:%d  sex:%d", person_msg.name.c_str(), person_msg.age, person_msg.sex);//这里故意插入会引起段错误,导致程序崩溃的代码,看看gdb会输出什么int *b = 0;*b = 10;loop_rate.sleep();// 按照循环频率延时}return 0;
}

直接使用 rosrun node 节点启动gdb的方式进行调试,发现出错的地方在 26 行,说明在此处可能有错误语法出现。

也可以直接运行可执行文件进行调试:

gdb person_publisher

指出错误的结果都是一样的。

更多参考。

相关内容

热门资讯

我来教大家“瀚海麻将辅助器ap... 我来教大家“瀚海麻将辅助器app官方下载最新版本更新”详细分享开挂一、瀚海麻将AI软件牌型概率发牌机...
我来教大家“决胜游戏辅助器ap... 我来教大家“决胜游戏辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“天天松滋麻将辅助器... 我来教大家“天天松滋麻将辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第...
我来教大家“临海麻将辅助器ap... 我来教大家“临海麻将辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“和乐互娱辅助器ap... 我来教大家“和乐互娱辅助器app官方下载最新版本更新”详细分享开挂一、和乐互娱AI软件牌型概率发牌机...
我来教大家“怀远麻将辅助器ap... 我来教大家“怀远麻将辅助器app官方下载最新版本更新”详细分享开挂一、怀远麻将AI软件牌型概率发牌机...
我来教大家“烽火流年辅助器ap... 亲,烽火流年这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,烽火流年的开挂软件,名...
我来教大家“云龙逮杠麻将辅助器... 您好,云龙逮杠麻将这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏...
我来教大家“松滋麻将辅助器ap... 我来教大家“松滋麻将辅助器app官方下载最新版本更新”详细分享开挂一、松滋麻将AI软件牌型概率发牌机...
我来教大家“乐享麻将辅助器ap... 亲,乐享麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,乐享麻将的开挂软件,名...
我来教大家“约战大同麻将辅助器... 我来教大家“约战大同麻将辅助器app官方下载最新版本更新”详细分享开挂一、约战大同麻将AI软件牌型概...
我来教大家“和和全集辅助器ap... 您好,和和全集这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“牌乐门辅助器app... 我来教大家“牌乐门辅助器app官方下载最新版本更新”详细分享开挂一、牌乐门AI软件牌型概率发牌机制”...
我来教大家“好友跑得快辅助器a... 我来教大家“好友跑得快辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三...
我来教大家“全家福捕鱼辅助器a... 您好,全家福捕鱼这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中...
我来教大家“七千游戏辅助器ap... 亲,七千游戏这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,七千游戏的开挂软件,名...
我来教大家“123娱乐辅助器a... 我来教大家“123娱乐辅助器app官方下载最新版本更新”详细分享开挂一、123娱乐AI软件牌型概率发...
我来教大家“兰考棋牌辅助器ap... 我来教大家“兰考棋牌辅助器app官方下载最新版本更新”详细分享开挂一、兰考棋牌AI软件牌型概率发牌机...
我来教大家“边锋麻将辅助器ap... 亲,边锋麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,边锋麻将的开挂软件,名...
我来教大家“逗娱打炸弹辅助器a... 您好,逗娱打炸弹这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中...