ROS项目的GDB调试

您所在的位置:网站首页 node断点下载 ROS项目的GDB调试

ROS项目的GDB调试

2023-03-12 05:50| 来源: 网络整理| 查看: 265

首先安装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,队列长度10 ros::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

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

更多参考。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3