C++调试方法(Vscode)(二) ——本地调试(ROS版)

初学者在调试一段代码的时候,经常出于不明原因,写出bug,导致程序崩溃。但是定位崩溃的地方时,往往采用简单而朴素的方法:即采用cout或者printf进行输出。这种方式既原始,又低效。一个合格的工程师应该是通过打断点的方式进行调试,而非加入各种print。

但是,采用gdb调试,则需要熟悉gdb的各种指令,往往不能快速入手。

好在vscode 提供了比较便捷的调试方法,本文就对vscode进行C++本地调试的方法(ROS版),做一个简单的介绍和实践。

针对这块的内容,我会更新本地调试、ROS版调试,远程docker调试等方法,见专栏地址:

C++调试专栏

本人是一个机器人工程师,所以日常写代码是基于ros的。

而ros基于的编译工具是catkin_make,和cmake语法基本一致,新增了一些catkin相关的内容。

阅读本文,必须先阅读上一篇文章:

C++调试方法(Vscode)(一) ——本地调试-CSDN博客

(一)简便启动版:

我们把main.cpp包装成一个功能包(本文功能包名为test_debug),并用catkin_make编译。(这部分内容是ros的基础,这里略过)

和上一篇类似,在CMakelists.txt中,直接加入add_definitions("-g"),然后修改launch.json文件:

我们通过F5,一样也可以进行调试步骤:

 (二)通过launch启动版:

一般ros文件,都需要用launch来拉起来。

我们先创建一个start.launch文件,用来加载ros的程序:

<launch><node name="test_debug_node" pkg="test_debug" type="test_debug_node" output="screen" />
</launch>

同时,我们对代码也进行修改,用一些ros的api(以证明对ros有效):

那该如何调试由launch文件拉起来的程序呢?

1. 错误尝试:

如果我们把启动的可执行文件,换成launch,行不行?

我们尝试修改json文件:

我们可以发现,如果在program中我们填入了launch文件的地址。

但是直接按F5,程序却不能运行:

2.正确方法:

首先,我们要安装ros的一些插件:

然后在配置json的时候,选择ros相关的launch:

在这里填入launch的地址: 

然后我们再按F5,就可以正常调试啦:

(三)Attach方式:

这种方式的做法是,先启动程序,后挂载调试工具。

我们需要重新生成launch.json

我们可以看到,request变成了attach,然后program部分我们仍然填写程序路径。 

 由于这种方法需要先启动程序,所以我们要把程序中的先写一个cin,以至于程序不会马上结束

 然后我们先运行这个程序:

 (此时程序卡在这里,等待cin输入)

与此同时,我们查询这个进程的pid号:

我们发现进程号是9030;

于是我们仍然在vscode中运行F5:

我们在上面填入9030:

(如果填错,出现的“未找到进程”的弹窗可以按ESC关闭)

输入y:

 即可弹出一些加载内容:

我们注意,为了使程序停下来等待我们启动gdb调试,因此在代码中加入了一个cin步骤(第九行);

我们此时在终端输入一个数字,使得代码跳过这一步,然后就可以观察到vscode中,已经跳到了断点位置,即可以进行调试了:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NeRS: Neural Reflectance Surfaces for Sparse-view 3D Reconstruction in the Wild

阅读记录&#xff1a; 1. 2.优点1&#xff1a;我们的方法仅依赖于近似的相机位姿估计和粗略的类别级形状模板。 3.我们的关键见解是&#xff0c;我们可以强制执行基于表面的 3D 表示&#xff0c;而不是允许广泛用于体积表示的无约束密度。重要的是&#xff0c;这允许依赖于视…

C# 图像镜像

测试页面&#xff1a; 图像镜像是图像旋转变换的一种特殊情况&#xff0c;通常包括垂直方向和水平方向的镜像。水平镜像通常是以原图像的垂直中轴为中心&#xff0c;将图像分为左右两部分进行堆成变换。如下&#xff1a; 垂直镜像通常是以原图像的水平中轴线为中心&#xff0c;…

【NLP自然语言处理】03 - 使用Anaconda创建新的环境/pycharm切换环境

NLP基础阶段&#xff1a;创建新的虚拟环境 第一步&#xff1a;查看有多少个虚拟环境 conda env list 第二步&#xff1a;创建一个新的虚拟环境&#xff0c;起个名字&#xff1a;nlpbase 打开anconda prompt终端&#xff0c;输入命令: conda create -n nlpbase python3.10 第三步…

React Agent 自定义实现

目录 背景 langchin 中的 agent langchin 中 agent 的问题 langchain 的 agent 案例 自定义 React Agent 大模型 工具定义 问题设定 问题改写&#xff0c;挖掘潜在意图 React Prompt 下一步规划 问题总结 代码 背景 之前使用过 langchian 中的 agent 去实现过一些…

高级算法设计与分析 学习笔记12 贪心算法

首先我们来解决一个经典的活动选择问题&#xff1a; s代表开始时间&#xff0c;f代表结束时间 可以看到这是一个动态规划的算法 现在&#xff0c;我们要把这个解决办法转换成一个贪心算法 直觉上讲&#xff0c;每次都选最先结束的可以留下最多的资源 当然开始之前先要把所有时…

[Python学习日记-43] Python 中的迭代器

[Python学习日记-43] Python 中的迭代器 简介 可迭代对象 迭代器 总结 简介 前面我们学习了各种各样的数据类型&#xff0c;在使用它们的时候我们也时不时会听到可迭代对象这一个名词&#xff0c;而本篇我们将讲述的迭代器感觉和我们之前学的可迭代对象挺相关的&#xff0c…

URDF统一机器人建模语言

统一机器人建模语言 URDF&#xff08;Unified Robot Description Format&#xff09;统一机器人描述格式&#xff0c;URDF使用XML格式描述机器人文件。 我们从下面四个方面介绍URDF&#xff1a; URDF的组成介绍 URDF-Link介绍 URDF-Joint介绍 创建一个简单的URDF…

五年以上倾斜摄影osgb模型转3dtiles如何在mars3d加载

方案一&#xff1a; // 兼容1.50 &#xff08;2018-10-01)版本更改了名称&#xff0c;造成部分3dtiles可能会出现加载不上导致渲染停止的错误。 // 错误说明为&#xff1a;RuntimeError: Unsupported glTF Extension: KHR_technique_webgl // 原因&#xff1a;KHR_technique_w…

Java基础常见面试题总结(上)

基础概念与常识 Java 语言有哪些特点? 简单易学&#xff08;语法简单&#xff0c;上手容易&#xff09;&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff08; Java 虚拟机实现平台无关性&#xff09;&…

【9724】基于springboot+vue的篮球竞赛预约平台

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 本次设计任务是要设计一个篮球竞赛预约平台&#xff0c…

软件架构师 PV

PV操作与生产者消费者问题是操作系统中进程管理和同步机制的重要概念。以下是对PV操作以及生产者消费者问题的详细解释&#xff1a; 一、PV操作 PV操作由P操作原语和V操作原语组成&#xff0c;这两个原语是不可中断的过程&#xff0c;它们对信号量进行操作。 P操作&#xff…

泰克MDO3054示波器特性和规格Tektronix MSO3054 500M 四通道

Tektronix MDO3054 示波器&#xff0c;混合域&#xff0c;500 MHz&#xff0c;4 通道&#xff0c;5 GS/s 泰克 MDO3054 混合域示波器是终极 6 合 1 集成示波器&#xff0c;包括可选的集成频谱分析仪、任意函数发生器、逻辑分析仪、协议分析仪和数字电压表/计数器。泰克 MDO305…

(25)QPSK信号在AWGN和Rayleigh衰落信道下的性能仿真

文章目录 前言一、MATLAB仿真代码二、仿真结果 前言 QPSK信号在AWGN和Rayleigh衰落信道下的性能仿真MATLAB代码。 一、MATLAB仿真代码 代码如下&#xff1a; nSamp 8; % 矩形脉冲的采样点数 nSymbol 1000000; % 传输的符号…

霍夫圆型硬币检测Matlab程序

1. 图像读取和预处理 使用MATLAB的uigetfile函数读取图像&#xff0c;可以从文件系统中选择图像文件。读取的图像随后经过灰度化处理&#xff0c;将彩色图像转换为灰度图像&#xff0c;以降低计算复杂度并去除不必要的颜色信息。 2. 中值滤波 在图像预处理过程中&#xff0c;…

uni-app 打包成app时 限制web-view大小

今天对接一个uni-app的app 内置对方h5 web-view的形式 需要对方在web-view顶部加点东西 对方打的app的web-view始终是全屏的状态&#xff0c;对方表示做不到我要的效果 emmmmmm。。。。。。 于是乎 自己搭了个demo 本地h5跑起来审查了下代码&#xff0c;发现web-view是给绝对定…

EasyOCR——超强超便捷的OCR开源算法介绍与文本检测模型CRAFT微调方法

背景 最近在实际操作阿拉伯文小语种OCR功能的时候&#xff0c;尝试了诸多开源算法&#xff0c;但效果均不尽如人意。 说实在的&#xff0c;针对阿拉伯文的OCR开源算法&#xff0c;若仅仅是效果没那么优秀&#xff0c;比如识别率能有个70%80%&#xff0c;我还能微调微调&#…

例行性工作(at,crontab)

&#xff08;一&#xff09;单一执行的例行性工作&#xff1a; ----at &#xff08;1&#xff09;原理&#xff1a;仅处理执行一次就结束了 &#xff08;2&#xff09;命令及其解释&#xff1a; &#xff08;2.1&#xff09;at命令格式&#xff1a;at [参数] [执行时间] &am…

C++ Builder XE12关于KonopkaControls与TMS VCL UI Pack组件的安装

1、先打开open project&#xff0c;选中安装的组件工程&#xff0c;并打开。 2、在option中设置 3、点击编译并进行安装install

【SpringAI】(一)从实际场景入门大模型——适合Java宝宝的大模型应用开发

一、简单场景介绍 假设你需要为一个商城项目接入一个基于SpringAI的智能客服系统&#xff0c;现在我们来基本模拟一下&#xff1a; 当我通过系统提问&#xff0c;大模型会针对我的问题进行回答。 当我们通过程序提问时&#xff0c;SpringAI会将我们的提问封装成Prompts&#x…

一分钟带你认清Java抽象类

abstrat——抽象&#xff0c;抽象类真的有像它的名字一样那么抽象吗&#xff1f;其实不然&#xff0c;它只是一个比较特殊的类别&#xff0c;我们只需要简单地认清它的作用就行&#xff0c;一起来看看吧~ 抽象类的概念 首先我们要明确一个事情&#xff1a;在面向对象的概念中&…