vscode给docker内部的的ros工程代码打断点

news2024/10/7 10:14:15

背景

打断点debug虽然不能直观看到变量在时间轴上的整体变化曲线,但是其针对某一帧问题数据,暂停后一步步单步执行监视每个变量的变化,方便直观的判断每一步逻辑的正确性,即使这个变量结构再复杂也能直接监视,可以准确定位到是哪一行代码出了问题;
我的本机环境:
Ubuntu18.04 + docker + ROS + VSCode + C++(CMake编译)
ROS节点跑在docker容器内

操作步骤1-插件安装

在vscode安装以下插件
c/c++插件;
ROS插件;
docker插件;
Remote Development;

操作步骤2-启动容器

docker run -it –net=host –-name <容器名> -v <你的要打断点单步调试的ROS工程本机路径>:<你的要打断点单步调试的ROS工程容器内路径>  <镜像名>:<tag名> bash

操作步骤3-配置文件

将下面的两个配置文件按照自己的ROS工程更改后放入工作空间.vscode文件夹:launch.json, tasks.json
在这里插入图片描述

//launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "hello_world_node",  //节点名
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/devel/lib/hello_world/my_hello_world_node", //节点可执行文件
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}", //"${fileDirname}",
"environment": [],
"externalConsole": false,
"preLaunchTask": "prerun",
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"miDebuggerPath": "/usr/bin/gdb",
"debugStdLib": true
}
]
}
//tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "prerun",
"type": "shell",
"command": "source devel/setup.bash && export ROS_MASTER_URI=http://172.17.0.1:11311/ "  //这里填入你自己的rosmaster ip
},
{
"label": "catkin build",
"type": "shell",
"command": "catkin_make",
"args": [
"-DCMAKE_BUILD_TYPE=Debug",
"-DCATKIN_BLACKLIST_PACKAGES=''",
"-DCATKIN_WHITELIST_PACKAGES=hello_world_node",//这里填入你自己的包名
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always"
},
"problemMatcher": "$msCompile"
},
]
}

操作步骤4-修改挂载的代码CMakeList

在你要debug的节点的CMakeList.txt加入下面一句

add_definitions("-Wall -g") 

操作步骤5-VSCode远程打开容器内的工作空间

安装了vscode的docker和remote development插件后,点击vscode左侧栏的”远程资源管理器”,Attach到你第一步创建的容器

操作步骤6-打断点及进行调试

打断点前,容器内还要安装gdb环境

apt-get install gdb

就在操作5弹出的容器内路径的vscode上,直接按F5或者点击”运行调试”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐5款压箱底的小工具软件

今天要给大家推荐5款压箱底的宝贝软件了&#xff0c;百度搜索一下就能找到下载链接了。 1.阅读笔记——BookxNote BookxNote 是一款 PDF 和 EPUB 阅读笔记软件&#xff0c;集阅读、笔记、批注、思维导图、划词翻译等于一体&#xff0c;可以边读边记。它的标注功能非常全&…

惊 GitHub首次开源,在国内外都被称为分布式理论+实践的巅峰之作

前言 蓦然回首自己做开发已经十年了&#xff0c;这十年中我获得了很多&#xff0c;技术能力、培训、出国、大公司的经历&#xff0c;还有很多很好的朋友。但再仔细一想&#xff0c;这十年中我至少浪费了五年时间&#xff0c;这五年可以足够让自己成长为一个优秀的程序员&#…

自有服务器(2台)被 kthreaddk木马挖矿解决过程(实操)不重启服务器

第一台服务器&#xff1a; #查看进程和CPU使用情况 top #查找相关联的进程 systemctl status 326858 #查看下所的 端口号和进程&#xff0c;发现有异常端口和进程 netstat -ntpl #杀死关联进程&#xff08;异常进程&#xff09;&#xff0c; kill -9 2900707 #杀死主进程&a…

Redis高可用之主从复制架构(第一部分)

引言 之前的文章 Redis持久化策略AOF、RDB详解及源码分析&#xff0c;我们介绍了Redis中的数据持久化技术&#xff0c;包括 RDB快照 和 AOF日志以及混合持久化 。有了持久化技术&#xff0c;我们就不用担心因Redis所在服务机器宕机&#xff0c;导致数据丢失。但是&#xff0c;…

四阶龙格库塔法求解一次常微分方程组(python实现)

四阶龙格库塔法求解一次常微分方程组一、前言二、RK4求解方程组的要点1. 将方程组转化为RK4求解要求的标准形式2. 注意区分每个方程的独立性三、python实现RK4求解一次常微分方程组1. 使用的方程组2. python代码3. 运行结果一、前言 之前在博客发布了关于使用四阶龙格库塔方法…

字节测试开发最牛教程,全栈Jmeter_性能测试(总结)

Jmeter_性能测试(4)&#xff1a; 性能测试脚本的优化 以PHP论坛为例&#xff1a;http://47.107.178.45/phpwind/ 根据上一篇的性能测试(3&#xff09;的脚本进行优化&#xff1b;见下图&#xff1a; 如上图中&#xff0c;把发帖和回帖的事务添加到随机控制器中&#xff0c;登…

一例cobalt Strike 反射式注入payload的分析

一例cobalt Strike payload 反射式dll注入的分析 QakBot(Qbot)与cobalt Strike恶意流量样本分析 | Demon (ggsec.cn)这篇博客中末尾提到了一个cobastrick的payload&#xff0c;这是一段shellcode&#xff0c;主要功能是的解密出一个dll&#xff0c;采用反射式注入的方式启动这…

EC 中的Keyboard Controller

Keyboard Controller简称KBC,它是EC芯片中一个用于处理Keyboard、Mouse的模块,也可以说,它只是一个通道,因为最后处理数据的还是交给EC 8032处理器去处理。KBC只处理挂在EC PS/2接口上的设备,假如接了个usb键盘或鼠标,那可不关它的事。PS/2设备只有两种,即Keyboard和Mou…

React 的设计理念(React 哲学)

文章目录React 的设计理念 的理解解决 CPU 瓶颈解决 IO 瓶颈React 的设计理念 的理解 从 React 官网中的 React 哲学文档中&#xff0c;可以看出 React 目的是实现快速响应 影响快速响应的因素&#xff1a;计算能力和网络延迟&#xff0c;即 CPU 和 IO 的瓶颈 解决 CPU 瓶颈 …

再见 ETH India 2022 建设者们 让我们一起回顾这个美好的建设周

很难超越的1700名黑客马拉松比赛&#xff0c;但是以太坊社区出现并打破了ETH India 2022 的新记录。来自321个城市的2000名与会者在短短的一个周内构建并部署了多达459个项目到以太坊生态系统中。你可能错过了过去一周发生的一切&#xff0c;但幸运的是&#xff0c;我们收集了所…

智能设备带来全新体验,打造未来智能生活

随着科技的快速发展&#xff0c;我们的生活变得越来越智能化&#xff0c;近年来智能设备已经遍布我们生活的各个领域&#xff0c;推动了生产能力和质量&#xff0c;给人们的生活带来了极大的便利。智能设备的出现和发展是时代进步的必然产物&#xff0c;高效、安全、准确性高&a…

【蓝桥杯选拔赛真题50】Scratch小猫跑步 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解

目录 scratch小猫跑步 一、题目要求 编程实现 二、案例分析 1、角色分析

mybatis写postgis原生sql需要加强转类型 以及 配置geometry类型转换

mybatis类型转换器处理PostGis数据库geometry类型转换_SomeOtherTime的博客-CSDN博客_java mybatis postgis 在navicate写insert into "district" (name,code,position) VALUES(cesh2i3,ac1v3,SRID4326;MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0))) 不会报错。 在mybat…

[附源码]计算机毕业设计高校学生信息采集系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

虹科案例 | 光热测厚技术助力PSA无底漆涂装方案

法国标致雪铁龙集团&#xff08;PSA Peugeot Citron&#xff09;最开始是生产胡椒研磨机&#xff0c;然后将其产品组合扩展到自行车等&#xff0c;现在已经是欧洲第二大汽车制造商。巴黎郊外的普瓦西&#xff08;Poissy&#xff09; 工厂安装了法国首个紧凑型水性喷漆工艺&…

漏洞预警| ThinkPHP多版本存在远程代码执行漏洞

棱镜七彩安全预警 近日网上有关于开源项目 ThinkPHP 存在远程代码执行漏洞&#xff0c;棱镜七彩威胁情报团队第一时间探测到&#xff0c;经分析研判&#xff0c;向全社会发起开源漏洞预警公告&#xff0c;提醒相关安全团队及时响应。 项目介绍 ThinkPHP是一个快速、兼容而且…

制定项目管理计划的10个步骤

一个协调完美、透明、时间表具体且准确的项目管理计划&#xff0c;将大大有助于你的项目按时完成。以下是制定项目计划的10个基本步骤。 第1步&#xff1a;与利益相关者讨论计划和关键部分 项目计划由活动文件组成&#xff0c;这些文件为所有直接或间接参与项目的人提供指导。…

如何开通股票接口中的StockQuoteRecord功能?

股票接口中的StockQuoteRecord&#xff0c;也就是十档行情快照&#xff0c;在传统的行情软件中只能看到委托数量&#xff0c;而无法知道这些数据是如何形成的。 下面看一下股票接口StockQuoteRecord&#xff08;十档行情快照&#xff09;的说明&#xff1a; 字段名 类型 备…

【数集项目之 MCDF】(三) 仲裁器 arbiter

接下来进行仲裁器 arbiter的设计。根据设计文档&#xff0c;我们知道从输入总共有3个通道&#xff0c;而这三个通道很有可能都接收到数据可以进行发送。而arbiter就是综合优先级、是否有包可以发送等因素&#xff0c;选择一个通道来进行发送。形象的可以将arbiter比喻成“一个多…

FineReport可视化数据分析-图表对象属性

1.概述 1.1 单个系列对象属性 属性 类型 说明 this.points Array 当前系列的所有数据点 this.name String 当前系列的名字&#xff0c;跟图例显示的系列名一致 this.type String 当前系列的图表类型&#xff0c;目前包括的类型如下图所示&#xff1a; 1.2 单个数…