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的程序:

XML 复制代码
<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中,已经跳到了断点位置,即可以进行调试了:

相关推荐
Zewen PAN12 小时前
新手 Visual Studio 环境配置 详解
c++·ide·visual studio
liuyunshengsir13 小时前
-bash: ssh-copy-id: command not found的两种解决方法
开发语言·ssh·bash
脑花儿13 小时前
ABAP EXCEL模板数据上传 及 注意事项
开发语言·excel
hhhwx66613 小时前
Linux学习记录--利用信号量来调度共享资源(2)
linux·c语言·c++·学习
1白天的黑夜113 小时前
队列+宽搜(BFS)-662.二叉树最大宽度-力扣(LeetCode)
c++·leetcode·宽度优先·队列
天高云淡ylz13 小时前
不同上位开发语言、PLC下位平台、工业协议与操作系统平台下的数据类型通用性与差异性详解
开发语言
yihai-lin14 小时前
Rust/C/C++ 混合构建 - Cmake集成Cargo编译动态库
c语言·c++·rust
10001hours14 小时前
C语言第20讲
c语言·开发语言
kcoo14 小时前
Jupyter Lab 汉化
linux·开发语言·python
m0_5522008214 小时前
《UE5_C++多人TPS完整教程》学习笔记59 ——《P60 投射物武器(Projectile Weapons)》
c++·游戏·ue5