ubuntu下gdb调试ROS
参考:
使用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
相关文章:
ubuntu下gdb调试ROS
参考: 使用VsCode进行ROS程序调试_ros vscode 调试-CSDN博客 https://blog.csdn.net/weixin_45031801/article/details/134399664?spm1001.2014.3001.5506 一、调试准备 1.1 CMakeLists改动 注释文件中的 set(CMAKE_BUILD_TYPE "Release") #构建类…...
Docke_常用命令详解
这篇文章分享一下笔者常用的Docker命令供各位读者参考。 为什么要用Docker? 简单来说:Docker通过提供轻量级、隔离且可移植的容器化环境,使得应用在不同平台上保持一致性、易于部署和管理,具体如下 环境一致性: Docker容器使得…...
使用vue2.0或vue3.0创建自定义组件
Vue2.0创建自定义组件 在 Vue 2.0 中创建自定义组件是一个相对简单的过程。以下是一个详细的步骤指南,帮助你创建一个自定义组件。 步骤 1: 创建 Vue 组件文件 首先,你需要创建一个新的 Vue 文件(.vue 文件)。假设我们要创建一…...
Elasticsearch-DSL高级查询操作
一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…...
【Linux】重启系统后开不开机(内核模块丢失问题)
问题 重启后开不开机报错如下: FAILED failed to start load kernel moduiles 可以看到提示module dm_mod not found 缺少了dm_mod 在内核module目录中 reboot重启可以看到这个现象: 可以看到重启启动磁盘,加载不到root 原因 dm_mod模块…...
对golang的io型进程进行off-cpu分析
背景: 对于不能占满所有cpu核数的进程,进行on-cpu的分析是没有意义的,因为可能程序大部分时间都处在阻塞状态。 实验例子程序: 以centos8和golang1.23.3为例,测试下面的程序: pprof_netio.go package m…...
Springboot中使用Retrofit
Retrofit官网 https://square.github.io/retrofit/ 配置gradle implementation("com.squareup.okhttp3:okhttp:4.12.0")implementation ("com.squareup.retrofit2:retrofit:2.11.0")implementation ("com.squareup.retrofit2:converter-gson:2.11.0…...
Ubuntu中配置内网固定IP
文章目录 背景一、配置步骤(一)首先确认网卡名称(二)确认网关(三)备份配置文件(四)编辑配置文件(五)应用配置(六)验证配置 二、注意事…...
ExcelVBA编程输出ColorIndex与对应颜色色谱
标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56,打算分4纵列输出,标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA(Visual Basic for Applications)中ÿ…...
MySQL中in和exists的使用场景
在MySQL中,IN 和 EXISTS 是用于子查询的两种常见方法,它们在不同的场景下有不同的表现和适用性。下面我将详细介绍这两种方法的使用场景、优劣,并通过实验来说明问题。 IN 子查询 使用场景: 当子查询返回的结果集较小且不包含 …...
【多线程2】start 和 run 区别,终止线程,等待线程
Thread 类使用 start 方法,启动一个线程,对于同一个 Thread 对象来说,start 只能调用一次!!! 不怕名字起的长,就怕含义不清楚! 想要启动更多线程,就是得创建新的对象&am…...
富途证券C++面试题及参考答案
C++ 中堆和栈的区别 在 C++ 中,堆和栈是两种不同的内存区域,它们有许多区别。 从内存分配方式来看,栈是由编译器自动分配和释放的内存区域。当一个函数被调用时,函数内的局部变量、函数参数等会被压入栈中,这些变量的内存空间在函数执行结束后会自动被释放。例如,在下面的…...
Go使用sqlx操作MySQL完整指南
# Go使用sqlx操作MySQL完整指南## 1. 安装依赖bash go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx2. 数据库基础操作 package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx" )// 定…...
Python 爬取网页文字并保存为 txt 文件教程
引言 在网络数据获取的过程中,我们常常需要从网页中提取有用的文字信息。Python 提供了强大的库来帮助我们实现这一目标。本教程将以https://theory.gmw.cn/2023 - 08/31/content_36801268.htm为例,介绍如何使用requests库和BeautifulSoup库爬取网页文字…...
时间序列预测论文阅读和相关代码库
时间序列预测论文阅读和相关代码库列表 MLP-based的时间序列预测资料DLinearUnetTSFPDMLPLightTS 代码库以及论文库:Time-Series-LibraryUnetTSFLightTS MLP-based的时间序列预测资料 我会定期把我的所有时间序列预测论文有关的资料链接全部同步到这个文章中&#…...
Mamba安装环境和使用,anaconda环境打包
什么是mamba Mamba是一个极速版本的conda,它是conda的C重新实现,使用多线程并行处理来加速包和依赖项的下载。 Mamba旨在提高安装、更新和卸载Python包的速度,同时保持与conda相同的兼容性和命令行接口。 Mamba的核心部分使用C实现ÿ…...
SSH连接成功,但VSCode连接不成功
环境 在实验室PC上连接服务器234 解决方案:在VSCode中重新添加远程主机 删除旧的VSCode Server 在远程主机上,VSCode会安装一个‘vscode-server’服务来支持远程开发,有时旧的‘vscode-server’文件可能会导致问题,删除旧的&am…...
springboot结合AES和国密SM4进行接口加密
api接口加密 1.为什么需要api接口加密呢? 1.防止爬虫 2.防止数据被串改 3.确保数据安全 2.如何实现接口加密呢? 3.我们可以使用哪些加密算法来加密呢? AES 密码学中的高级加密标准(Advanced Encryption Standard,…...
iOS在项目中设置 Dev、Staging 和 Prod 三个不同的环境
在 Objective-C 项目中设置 Dev、Staging 和 Prod 三个不同的环境,并为每个环境使用不同的 Bundle ID,可以通过以下步骤实现: 步骤 1: 创建不同的 Build Configuration 打开项目: 启动 Xcode 并打开你的项目。 选择项目文件&…...
openeuler24.09 系统无需配置 docker 源即可安装 docker 和 docker-composer
准备工作 1、准备一台刚刚创建的 openeuler24.09 lxc 虚拟机 2、使用 dnf 更新到最新,安装常用 工具 dnf update -y dnf install vim net-tools wget3、设置 ssh 由于ssh 与通常网上教程大同小异,在此我们就略过。 从下图我们可以看到 openeuler24.09 已经远程连接上。 …...
5分钟解锁跨平台微信:Docker容器化方案全攻略
5分钟解锁跨平台微信:Docker容器化方案全攻略 【免费下载链接】docker-wechat 在docker里运行wechat,可以通过web或者VNC访问wechat 项目地址: https://gitcode.com/gh_mirrors/docke/docker-wechat 还在为Linux系统无法使用微信而烦恼吗…...
从大疆NAZA换到匿名P2飞控:一个DIY玩家的真实体验与参数调试避坑指南
从大疆NAZA到匿名P2飞控:一位DIY玩家的深度迁移指南 当我的F450机架在狭小卧室里显得笨拙不堪时,我意识到需要一次彻底的"瘦身计划"。这不是简单的机架更换,而是一次从商业飞控到开源系统的完整迁移——将大疆NAZA积累的经验移植到…...
别再写低效循环了:深入理解Qt隐式共享与C++17的std::as_const
别再写低效循环了:深入理解Qt隐式共享与C17的std::as_const 在代码审查中,你是否经常看到这样的写法? const QStringList& list oldList; for (auto& str : list) {// 处理字符串 }这种看似"规范"的写法,实际上…...
大麦智能抢票系统:告别手速极限的终极解决方案
大麦智能抢票系统:告别手速极限的终极解决方案 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票而烦恼吗&…...
告别混乱!用PyQt5模块化设计打造你的工业上位机(附完整源码与两种传值方式详解)
工业级PyQt5模块化开发实战:从架构设计到数据交互的完整指南 在工业自动化与测控领域,上位机软件往往需要集成数据采集、实时监控、设备控制等复杂功能。传统开发方式容易导致代码臃肿、维护困难——按钮事件与业务逻辑纠缠不清,数据流向如迷…...
ComfyUI-FramePackWrapper功能选择指南:如何根据资源控制与使用便捷性选择最优方案
ComfyUI-FramePackWrapper功能选择指南:如何根据资源控制与使用便捷性选择最优方案 【免费下载链接】ComfyUI-FramePackWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-FramePackWrapper ComfyUI-FramePackWrapper作为一款高效的AI视频生成插…...
告别天价桥接芯片!用高云GW5AT-LV15MG132 FPGA搞定MIPI C-PHY摄像头测试盒
国产FPGA革新摄像头测试方案:高云GW5AT-LV15MG132的MIPI C-PHY实战解析 在摄像头模组生产线上,测试环节的成本与效率直接关系到企业竞争力。传统测试方案依赖进口FPGA搭配昂贵桥接芯片,不仅物料清单(BOM)成本居高不下…...
Java 无人图书借阅系统设计与完整源码实现
以下是一个基于Java的无人图书借阅系统的设计与完整源码实现方案,涵盖系统架构、核心模块、数据库设计、关键代码实现及部署建议:一、系统架构设计1. 分层架构表现层:用户端:微信小程序(UniApp开发) H5页面…...
TTI-Chicago等机构突破性研究:AI学会了一笔一划创作矢量草图
这项由芝加哥丰田技术研究院(TTI-Chicago)、芝加哥大学和麻省理工学院联合开展的研究发表于2026年,论文编号为arXiv:2603.19500v1。有兴趣深入了解技术细节的读者可以通过该编号查询完整论文。当我们看到一位画家创作时,他们通常不…...
石油勘探中的地震波“翻译官”:如何读懂时距曲线图里的地下秘密?
石油勘探中的地震波“翻译官”:如何读懂时距曲线图里的地下秘密? 站在戈壁滩的勘探营地,望着屏幕上那些看似杂乱的波形曲线,刚入行的地质工程师小李皱起了眉头。"这些弯弯曲曲的线条,到底在诉说什么样的地下故事&…...
