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

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

更多参考。

相关内容

热门资讯

安卓系统有onenote吗,便... 你有没有发现,安卓系统里的应用真是五花八门,让人眼花缭乱。不过,说到笔记应用,你是不是也在想,安卓系...
安卓10和系统11,两大系统巅... 你知道吗?最近手机圈可是热闹非凡呢!安卓系统又迎来了大更新,安卓10和系统11的发布,让无数手机爱好...
酷开系统比安卓系统好?,引领智... 你有没有想过,为什么有些人说酷开系统比安卓系统好呢?这可不是空穴来风哦,今天咱们就来好好聊聊这个话题...
安卓系统没有实时模糊,无需实时... 你有没有发现,用安卓手机拍照的时候,有时候照片里的背景模糊得有点让人头疼呢?别急,今天就来聊聊这个让...
安卓系统永久开启adb,尽享便... 你有没有想过,你的安卓手机里隐藏着一个小秘密?没错,就是那个神秘的ADB(Android Debug...
windows平板 安卓双系统... 你有没有想过,拥有一台既能轻松处理工作,又能畅玩游戏的平板电脑是多么美妙的事情呢?想象一边在Wind...
安卓系统快捷打电话,安卓系统一... 你是不是也和我一样,有时候在手机上看到某个号码,突然就想直接打电话给对方呢?别急,今天就来给你揭秘安...
安卓10的国产系统,创新与融合... 你知道吗?最近安卓10的国产系统可是火得一塌糊涂呢!各大手机品牌纷纷推出自家的定制系统,不仅功能强大...
安卓系统桌面股市动态,实时掌握... 亲爱的读者,你是否也像我一样,对安卓系统桌面上的股市动态充满了好奇?那就让我们一起揭开这神秘的面纱,...
安卓系统中文叫什么,从中文命名... 你有没有想过,我们每天离不开的手机,那个小小的屏幕里,竟然藏着那么多的秘密?今天,我就要来揭秘一个你...
怎么取消安卓系统提醒,教你如何... 手机里的安卓系统提醒功能有时候真是让人头疼,不是这个APP要更新,就是那个APP推送了新消息,简直让...
安卓 录系统的声音,捕捉生活点... 你知道吗?手机里那些小小的声音,有时候比屏幕上的文字更能触动人心呢!今天,咱们就来聊聊安卓系统里那些...
安卓系统查看所有应用,全面解析... 你有没有想过,你的安卓手机里藏着多少秘密?那些你经常用的、偶尔用的,甚至是忘了用的应用,它们都藏在手...
原生安卓7.0系统评测,性能与... 亲爱的读者们,你是否对手机系统有着浓厚的兴趣?是否好奇过原生安卓7.0系统究竟有何魅力?今天,就让我...
宝马改安卓系统好吗,体验新境界 你有没有想过,把你的宝马车改个安卓系统,是不是就像给手机换了个新皮肤,瞬间感觉不一样了呢?今天,我们...
安卓系统手机单机游戏,安卓手机... 你有没有发现,最近你的安卓系统手机里是不是又多了一款单机游戏?没错,单机游戏在安卓系统手机上可是越来...
现在安卓系统会卡么,探究原因与... 你有没有发现,现在用安卓手机的时候,有时候会突然感觉有点卡呢?是不是你也遇到了这种情况,心里直犯嘀咕...
苹果颜值安卓系统,探索跨界融合... 你有没有发现,现在手机市场上有两种截然不同的风格在较量呢?一边是苹果,那可是时尚界的宠儿,颜值爆表;...
适合htpc的安卓系统,精选适... 你有没有想过,家里的电视盒子或者电脑,要是能装上安卓系统,那得多方便啊!想象你可以在上面玩各种游戏,...
安卓如何检测系统广播,Andr... 你有没有想过,你的安卓手机里那些神奇的“广播”是怎么工作的呢?没错,就是那些悄无声息地在你手机后台运...