Coco-LIC基于ubuntu的vscode进行断点调试

news2025/1/10 15:57:46

1、下vscode和插件

参考这个也行

https://zhuanlan.zhihu.com/p/704522656

 2、编译debug版本并修改json

要在 Visual Studio Code (VSCode) 中进行断点调试 ROS 任务,你需要进行以下几个步骤:

### 1. 安装所需插件

- **C/C++ 插件**: 提供对 C++ 代码的调试支持。
- **ROS 插件**: 提供对 ROS 工作空间的集成支持(可选,但对 ROS 开发有帮助)。

### 2. 配置 CMake 和编译

确保你的 ROS 包和工作空间已经使用 `catkin_make` 或 `catkin build` 编译成功,并且包含了调试信息。在 `CMakeLists.txt` 文件中,确保添加了以下行来启用调试信息:

```cmake
set(CMAKE_BUILD_TYPE Debug)
```

然后,重新编译你的工作空间:

```bash
cd ~/catkin_ws
catkin_make
```

### 3. 配置调试环境

创建一个 `launch.json` 文件来配置 VSCode 的调试设置:

1. 打开 VSCode,进入你的工作空间目录。
2. 在左侧活动栏中点击调试图标(一个播放按钮和一个错误标记的图标),然后点击“创建一个 `launch.json` 文件”。
3. 选择“C++ (GDB/LLDB)”作为环境。
4. 编辑生成的 `launch.json` 文件,添加适用于 ROS 的配置。下面是一个示例配置:

```json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "ROS Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/devel/lib/your_package/your_node",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build",
            "miDebuggerPath": "/usr/bin/gdb",
            "internalConsoleOptions": "openOnSessionStart",
            "logging": {
                "moduleLoad": true
            }
        }
    ]
}
```

确保将 `"program"` 字段设置为你的 ROS 节点的实际可执行文件路径(可以在 `devel/lib/your_package/` 目录下找到)。

### 4. 配置任务

创建一个 `tasks.json` 文件来配置构建任务:

1. 在 `.vscode` 目录下创建一个 `tasks.json` 文件(如果尚未存在)。
2. 添加以下内容以构建你的 ROS 包:

```json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "catkin_make",
            "args": [
                "--this"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": ["$gcc"],
            "detail": "Generated task by VSCode."
        }
    ]
}
```

### 5. 设置断点

在 VSCode 的编辑器中打开你的源代码文件,点击行号左侧的空白区域来设置断点。

### 6. 启动调试

1. 确保 ROS 节点没有运行。
2. 在 VSCode 中,点击左侧的调试图标,然后选择刚才创建的 `ROS Debug` 配置。
3. 点击绿色的播放按钮开始调试。调试器将启动你的节点,并在设置的断点处暂停。

### 7. 运行 ROS Launch

如果你需要通过 `roslaunch` 启动整个 ROS 系统并调试其中的节点,可以在 VSCode 外部先启动 `roslaunch`,然后使用 VSCode 调试单个节点。

### 小提示

- 确保 GDB 和其他调试工具已正确安装,并在系统路径中。
- 如果调试过程中出现问题,可以查看 VSCode 的调试控制台和终端输出,获取更多的调试信息。

通过这些步骤,你应该能够在 VSCode 中进行 ROS 任务的断点调试。如果遇到具体问题,可以进一步调整配置或提供更多细节以获得帮助。

比如这是我的launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "ROS Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/kj/catkin_ws/devel/lib/cocolic/odometry_node",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build",
            "miDebuggerPath": "/usr/bin/gdb",
            "internalConsoleOptions": "openOnSessionStart",
            "logging": {
                "moduleLoad": true
            }
        }
    ]
}

这是我的tasks.json


{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "catkin_make",
            "args": [
                "--directory",
                "/home/kj/catkin_ws",
                "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
            ],
            "problemMatcher": [
                "$catkin-gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Build ROS workspace using catkin_make"
        }
    ]
}

3、调试遇见include找不到的问题

[{ "resource": "/home/kj/catkin_ws/src/Coco-LIC/src/odometry_node.cpp", "owner": "C/C++: IntelliSense", "code": "1696", "severity": 8, "message": "无法打开 源 文件 \"odom/odometry_manager.h\"", "source": "C/C++", "startLineNumber": 22, "startColumn": 1, "endLineNumber": 22, "endColumn": 35 }]

解决方案是,增加一条IncludePath

 4、[ERROR] [1722929440.191555478]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying... 断点调试遇到这种问题

错误通常是因为 ROS master 没有运行或是环境变量 ROS_MASTER_URI 没有正确设置。在终端中你通常会手动运行 roscore 来启动 ROS master,但在调试时可能没有这样做。

比如控制台的命令是:roslaunch cocolic odometry.launch config_path:=config/ct_odometry_r3live.yaml

解决方案:

第一:在非vscode中的控制台下输入(起到一个类似监视的作用)

roscore

第二:确保正确设置 ROS_MASTER_URIROS_IP: 确保在调试环境中设置了正确的环境变量。可以在 launch.json 中设置环境变量。

然后就可以进行断点调试了

5、断点调试中,发现需要输入参数

原始命令行:roslaunch cocolic odometry.launch config_path:=config/ct_odometry_r3live.yaml

需要在aunch.json中增加args的信息 

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

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

相关文章

day13-测试自动化之Selenium的元素定位

一、如何进行元素定位 1.1.元素定位作用 让程序操作指定元素,就必须先找到此元素 1.2.html页面组成格式 1.3.元素定位的概念 元素定位就是通过元素的信息或元素层级结构来定位元素的。 二、浏览器开发者工具 2.1.作用 快速定位元素,查看元素信息 2.2.谷…

《Advanced RAG》-06-探索RAG技术 Query Rewriting

摘要 详细阐述了多种查询重写技术,这些技术用于在检索增强生成(RAG)中优化查询和文档之间的语义匹配。 首先,介绍了假设文档嵌入(HyDE)方法,它通过生成假设文档并将其与原始查询结合&#xff0c…

卡码网KamaCoder 104. 建造最大岛屿

题目来源:104. 建造最大岛屿 C题解:先用深度优化算法计算每个孤岛的面积,然后给每个孤岛编号(如果孤岛是U型的,防止面积加重复了),再去遍历每个海水区域,计算最大面积。 #include &…

jenkins+gitlab实现微服务的差异化部署

前景: Jenkins 和 GitLab 结合实现微服务的差异化部署具有多方面的意义和优势,主要包括以下几点: 自动化和持续集成:通过 Jenkins 可以实现从代码提交到部署的全自动化流程。这种自动化确保了每次代码变更都能够快速、可靠地构建…

【Python】数据类型之集合

集合是一个无序、可变、不允许元素重复的容器。 1、定义 v1{11,22,33} 1))无序:集合无法通过索引取值。 2))可变:可以添加和删除集合中的元素。 3))集合不允许元素重复。 例如…

GD32 MCU碰到IIC总线卡死怎么办?

大家在使用MCU IIC通信时,若碰到设备复位或者总线干扰等情况,可能会导致IIC总线卡死,表现上总线上SDA或者SCL其中一根线为低电平,IIC总线一直处于busy状态。此时若代码上一直等待总线空闲,则可能导致软件死机&#xff…

PCL Chaikin曲线逼近型细分算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Chaikin 逼近型细分算法是一种生成平滑曲线的方法,常用于计算机图形学和曲线建模。它基于 Paul Chaikin 于 1974 年提出的算法,通过迭代地插入新的控制点并移动原始控制点来细分曲线,从而逐渐逼近光滑曲线。具体…

Flamingo: a Visual Language Model for Few-Shot Learning

发表时间:NeurIPS 2022 论文链接:https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf 作者单位:DeepMind Motivation:仅使用少量注释示例可以快速适应新任务…

谈基于大语言模型的图数据库路径检索

随着微软已经开源了GraphRAG项目的代码,基于图数据库的RAG 热度迅速升温。关注基于大语言模型与图模型数据库相结合的技术的人多了起来。 本文提出了一种类似人工搜索的“顺藤摸瓜”方法,实现图数据库的智能搜索方法。 本地私有数据存储和查询 本地私有…

大数据面试SQL(一):合并日期重叠的活动

文章目录 合并日期重叠的活动 一、题目 二、分析 三、SQL实战 四、样例数据参考 合并日期重叠的活动 一、题目 已知有表记录了每个品牌的活动开始日期和结束日期,每个品牌可以有多个活动。请编写一个SQL查询合并在同一个品牌举行的所有重叠的活动&#xff0c…

Canvas简历编辑器-图形绘制与状态管理(轻量级DOM)

Canvas简历编辑器-图形绘制与状态管理(轻量级DOM) 在前边我们聊了数据结构的设计和剪贴板的数据操作,那么这些操作都还是比较倾向于数据相关的操作,那么我们现在就来聊聊基本的图形绘制以及图形状态管理。 在线编辑: https://windrunnermax.github.io/…

树与二叉树、图的基本概念

一、树与二叉树的基本概念和性质 1、树的的性质: 1)树中的结点数 n 等于所有结点的度数之和加 1 【说明】结点的度是指该结点的孩子数量,每个结点与其每个孩子都由唯一的边相连,因此树中所有结点的度数之和等于树中的边数之和。…

模型 MBTI(性格模型)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。探索真我,和谐人际。 1 MBTI性格模型的应用 1.1 跨国公司团队协作改进 ABC公司是一家全球性的科技公司,其研发团队由来自世界各地的工程师和设计师组成。尽管团队成员个个才华…

创意指南丨AR数学沉浸式空间体验

AR学习种类那么多,哪款最吸引你? 星河造梦坊和Unity联手打造的沉浸式空间AR无疑是其中的佼佼者。 这款应用不仅利用AR技术将抽象的数学概念变得生动有趣,还通过互动体验让学习者仿佛置身于一个充满奇幻色彩的数学世界中。 无论是学生还是教…

鸿蒙应用服务开发【自定义通知角标】

自定义通知角标 介绍 本示例主要展示了设定应用的桌面图标角标的功能,使用ohos.notificationManager接口,进行桌面角标的设置,通知的发送,获取等。 效果预览 使用说明 在主界面,可以看到当前应用的所有消息通知&am…

ts-node 报错 ERR_UNKNOWN_FILE_EXTENSION

问题 有个monorepo项目,在最外层一次性打包 3 个项目的脚本已经成功实现,如下: "build:test": "cross-env NODE_ENVtest vite build --mode test && esno ./build/script/postBuild.ts", "build:prod"…

一款基于RBAC模型的开源快速开发平台,支持权限粒度达到列级别,前后端分离,可免费用于商业

前言 在企业级应用开发中,权限管理和系统配置是两个核心问题。传统的开发模式往往面临权限控制不够灵活、系统配置难以管理等挑战。为了解-决这些问题,需要一款能够提供细致权限控制和灵活系统配置的软件。 现有的一些软件虽然提供了基本的权限管理功能…

索尼相机SD卡找不到视频怎么办?提供全面解决方案

在使用索尼相机拍摄美好瞬间时,SD卡作为存储介质,承载着珍贵的视频和照片。然而,有时我们可能会遇到SD卡中视频文件无法找到的问题,这无疑让人倍感焦虑。本文旨在为大家提供一套全面的解决方案,希望帮助大家快速找回丢…

Istio 金丝雀发布

转载:备考ICA-Istio 金丝雀实验4 环境清理 kubectl delete gw/helloworld-gateway vs/helloworld dr/helloworld-destination #测试 kubectl get svc,pods for i in {1..10};do curl $(kubectl get svc helloworld|grep helloworld|awk {print $3":"$5}|a…

谷粒商城实战笔记-138-商城业务-首页-渲染二级三级分类数据

本节的主要内容是在前一节的基础上,提供结构查询出所有的二级、三级分类数据。 一,构造响应体数据结构 后端返回给前端的数据结构是在开发详细设计中应该确定的内容。 分析前端需要的数据结构,后端要将所有一级分类包含的二级和三级分类信…