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

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的信息

相关推荐
入 梦皆星河1 小时前
在 Ubuntu/Debian 上安装 Go
ubuntu·golang·debian
IT果果日记1 小时前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教2 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
热爱生活的五柒2 小时前
vscode利用ofExtensions插件可以调试单进程Openfoam,但是不能调试mpi多进程案例
ide·vscode·编辑器
小陈phd2 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
梓仁沐白7 小时前
ubuntu+windows双系统切换后蓝牙设备无法连接
windows·ubuntu
为什么每天的风都这么大12 小时前
Vscode/Code-server无网环境安装通义灵码
ide·vscode·阿里云·编辑器·ai编程·code-server
ahadee15 小时前
蓝桥杯每日真题 - 第19天
c语言·vscode·算法·蓝桥杯
写点什么啦18 小时前
[debug]不同的window连接ubuntu的vscode后无法正常加载kernel
linux·vscode·ubuntu·debug
wellnw18 小时前
[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
linux·ubuntu