ubuntu下gdb调试ROS

embedded/2024/12/22 10:08:09/

参考:

使用VsCode进行ROS程序调试_ros vscode 调试-CSDN博客

https://blog.csdn.net/weixin_45031801/article/details/134399664?spm=1001.2014.3001.5506

一、调试准备

1.1 CMakeLists改动

注释文件中的

set(CMAKE_BUILD_TYPE "Release") #构建类型:发行版本

在这句位置处加入

SET(CMAKE_BUILD_TYPE "Debug")#构件类型:调试版本
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")#关闭优化便于调试、增加生成调试信息

正常编译工作空间

catkin_make

二、在vscode下调试

2.1 设置c_cpp_properties.json

其中${workspaceFolder}指启动vscode所在文件夹,确定包含所有文件的路径即可

{"configurations": [{"name": "ROS","includePath": ["${workspaceFolder}/**","/usr/include/**","/opt/ros/noetic/include/**","${workspaceFolder}/devel/include","/opt/ros/noetic/include"],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "gnu11","cppStandard": "c++14","intelliSenseMode": "linux-clang-x64","compileCommands": "${workspaceFolder}/build/compile_commands.json"}],"version": 4
}

2.2 设置launch.json

{"version": "0.2.0","configurations": [{"name": "ROS GDB", // 配置名称,将会在调试配置下拉列表中显示"type": "cppdbg",  // 调试器类型 该值自动生成"request": "launch",  // 调试方式,还可以选择attach"program": "${workspaceFolder}/devel/lib/……", //要调试的程序(完整路径,支持相对路径)即可执行文件路径"args": [],  // 传递给上面程序的参数,没有参数留空即可"stopAtEntry": false,  // 是否停在程序入口点(停在main函数开始)"cwd": "${workspaceRoot}",  // 调试程序时的工作目录"environment": [], //针对调试的程序,要添加到环境中的环境变量. 例如: [ { "name": "squid", "value": "clam" } ]"externalConsole": false,   //如果设置为true,则为应用程序启动外部控制台。 如果为false,则不会启动控制台,并使用VS Code的内置调试控制台。"MIMode": "gdb",  // VSCode要使用的调试工具"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}

2.3 设置tasks.json

{"tasks": [{"type": "cppbuild",//任务类型,可以取cppbuild、shell、process,三种执行时稍有差异,这里选择默认cppbuild。"label": "build",//任务标签(标记),也即任务名称,任务名称要和launch.json里的"preLaunchTask"值对应一致。"command": "/usr/bin/g++",//编译器及其路径,.c用gcc编译器,cpp用g++编译器"args": ["-fdiagnostics-color=always","-g",//生成和调试有关的信息,launch.json会用到这些信息。"${workspaceFolder}/src/……/*.cpp",//编译当前打开的.c(或.cpp)文件。"-o",//指定编译的输出"${workspaceFolder}/build"],"options": {"cwd": "${workspaceFolder}"//当前工作目录(路径)。},"problemMatcher": ["$gcc"],//使用gcc的问题匹配器。"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}],"version": "2.0.0"
}

2.4 启动vscode调试

vscode左侧边栏选择运行和调试,选择launch.json中配置好的配置名称即可开始debug

三、在gdb终端下调试

1.1 终端gdb优缺点

缺点:

不如vsode可视化方便,全部需要命令操作

优点:

能够附加到已运行的程序上调试,而不需要作额外配置,vscode做不到读取rosparam调试,需要手动给值,而这个不需要手动给,尤其在launch多节点调试时

1.2 调试方法

首先正常启动节点或launch,使其运行,然后找到进程id号列表

ps aux | grep 可执行文件名

若是多节点运行,则会存在多个命名空间及其唯一的id,复制想要调试的id到${id}处,一定要给sudo权限

sudo gdb -p ${id}

出现以下界面证明成功,点击回车即可进入gdb

1.3 gdb基本命令

退出gdb调试

两者都可
q
quit

设置断点,关键字b/break + 程序名 + : + 行号,如

两者都可
b main.cpp:5
break main.cpp:5查看所有断点
info breakpoints删除指定断点,如2
d 2删除所有断点
d breakpoints使2号断点有效/无效
enable/disable b 2

继续执行c,停止执行ctrl+c

从一个断点运行到下一个断点处
c

若执行到断点处,自动停止继续执行

此时可查看变量,print xxx可显示一次,display xxx可在每次打断后都自动跟踪显示,假设变量flag

print flag
display flag取消跟踪flag
undisplay flag

手动设定某变量值 ,如flag

set flag = 1

 线程查看

显示当前线程
thread
显示所有线程,其中带*为当前线程
info threads
切换到第3线程
thread 3

查看栈

bt

 


http://www.ppmy.cn/embedded/147782.html

相关文章

【Spring框架 三】

Spring框架 三 SpringWeb开发框架框架概述核心组件RESTful Web Services异常处理过滤器和拦截器 总结 Spring Spring框架是一个开源的Java应用程序框架,它提供了一种轻量级的解决方案,用于开发企业级Java应用程序。Spring框架的核心原则是依赖注入&…

电商后台革命:RPA 自动化商品信息录入与更新【52rpa.com】

在当今快节奏的电商时代,高效的后台管理是电商企业成功的关键之一。随着科技的不断进步,机器人流程自动化(RPA)技术正逐渐成为电商后台管理的强大助力,尤其是在商品信息录入与更新方面,发挥着巨大的作用。而…

电商新品发布自动化:RPA 确保信息一致性与及时性【rap.top】

一、教学目标 让学员了解电商新品发布过程中的挑战以及 RPA 的概念和优势。掌握 RPA 在电商新品发布中确保信息一致性与及时性的方法和流程。培养学员运用 RPA 解决实际问题的能力。 二、教学重难点 重点 RPA 在电商新品发布中的应用场景。实现信息一致性与及时性的具体策略…

【蓝桥杯】43696.小数第n位

小数第n位 题目描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。如果我们把有限小数的末尾加上无限多个0,那么有限小数和无限小数就都有了统一的形式。 本题的任务是:在上面的约定下,求整数除法…

C05S09-Keepalive服务架设

一、Keepalive 1. Keepalive概述 代理服务器和调度器都是单点模式,Keepalive是一种实现LVS调度器实现高可用集群的架设,以提高节点的冗余和容错。 Keepalive是一种基于VRRP协议实现的调度器高可用方案,为了实现LVS的集群而设计开发&#x…

Spark优化----Spark 数据倾斜

目录 数据倾斜的表现: 定位数据倾斜问题: 解决方案一:聚合原数据 避免 shuffle 过程 缩小 key 粒度(增大数据倾斜可能性,降低每个 task 的数据量) 增大 key 粒度(减小数据倾斜可能性&#xff0c…

亚矩阵云手机

亚矩阵云手机是一个集成了云计算、大数据、人工智能和边缘计算等先进技术的云平台,它通过ARM虚拟化技术在云端运行手机应用,提供了全面、高效且稳定的服务。以下是对亚矩阵云手机的详细解析: 技术基础与架构 1.ARM虚拟化技术:亚矩阵云手机基于ARM服务器和…

npm、yarn、pnpm 设置最新国内镜像源(附官方镜像源和最新阿里源)

npm 查询源 BASH npm get registry 设置源 BASH # 国内 淘宝 镜像源 npm config set registry https://registry.npmmirror.com/ # 官方镜像源 npm config set registry https://registry.npmjs.org/ pnpm pnpm 的镜像源默认 查询源 BASH pnpm get registry 设置源 BASH # 国内…