ros2工程 debug(vscode)

目录

  • [一、安装必备 VSCode 插件](#一、安装必备 VSCode 插件)
  • [二、Debug 模式编译(重要)](#二、Debug 模式编译(重要))
  • [三、配置 VSCode 调试文件(.vscode/)](#三、配置 VSCode 调试文件(.vscode/))
  • 四、两种调试方式(选一种即可)
    • [方式 1:直接启动节点调试(需要拆分节点启动)](#方式 1:直接启动节点调试(需要拆分节点启动))
    • [方式 2:附加到已运行进程(适合 ros2 launch 启动后调试)](#方式 2:附加到已运行进程(适合 ros2 launch 启动后调试))
      • [进程 Debug 示意](#进程 Debug 示意)

一、安装必备 VSCode 插件

先装这几个,缺一不可:

bash 复制代码
C/C++(Microsoft):C++ 语法、调试、IntelliSense
CMake Tools(Microsoft):CMake 项目管理
ROS(ms-iot):ROS 1/2 集成、launch 支持
CodeLLDB(可选):比原生 gdb 体验更好的调试器

二、Debug 模式编译(重要)

ROS 2 默认是 Release,没有调试符号,断点无效。必须用 Debug 或 RelWithDebInfo 编译。

三种编译模式对比

👇 注意:Debug 编译 → 代码跑得慢 → 时间戳不同步 → 轨迹后期飘移 / 偏移

模式 速度 轨迹精度 能否调试 适合
Release 最快 最好 ❌ 不能 跑实验
RelWithDebInfo 最快 最好 ✅ 能 调试 + 跑实验
Debug 极慢 飘移 / 偏移 ✅ 能 只用来查崩溃

编译命令

bash 复制代码
colcon build --packages-select lio_sam2

colcon build --packages-select lio_sam --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo

colcon build lio_sam --cmake-args -DCMAKE_BUILD_TYPE=Debug

三、配置 VSCode 调试文件(.vscode/)

在工作空间根目录创建 .vscode 文件夹,里面放 1 个文件:launch.json

  1. launch.json(核心调试配置)
    打开 VSCode → 左侧「运行和调试」(Ctrl+Shift+D)→ 「create a launch.json file」→ 选「C++ (GDB/LLDB)」,替换成下面内容:
bash 复制代码
{
    "version": "0.2.0",
    "configurations": [
        // 配置1:直接启动 IMU 预积分节点(最常用,调试你之前报错的模块)
        {
            "name": "Debug lio_sam_imuPreintegration",
            "type": "cppdbg",
            "request": "launch",
            // 可执行文件路径(替换成你的实际路径)
            "program": "/home/gg/xcg/djj_project/slam_ws/install/lio_sam/lib/lio_sam/lio_sam_imuPreintegration",
            "args": [],
            "stopAtEntry": false,
            "cwd": "/home/gg/xcg/djj_project/slam_ws",
            "environment": [
                // ROS 2 必须的环境变量
                {"name": "ROS_DISTRO", "value": "humble"},
                {"name": "RMW_IMPLEMENTATION", "value": "rmw_fastrtps_cpp"}
            ],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],

        },
        // 配置2:附加到已运行的进程(适合 ros2 launch 启动后调试)
        {
            "name": "Attach to Process",
            "type": "cppdbg",
            "request": "attach",
            "program": "/home/gg/xcg/djj_project/slam_ws/install/lio_sam/lib/lio_sam/lio_sam_imuPreintegration",
            "MIMode": "gdb",
            "setupCommands": [
                {"text": "-enable-pretty-printing", "ignoreFailures": true}
            ]
        }
    ]
}

四、两种调试方式(选一种即可)

方式 1:直接启动节点调试(需要拆分节点启动)

打开比如 imuPreintegration.cpp,在 odometryHandler 或 imuHandler 里打个断点(比如初始化、优化、报错行)。
左侧「运行和调试」→ 选 Debug lio_sam_imuPreintegration → 点击「开始调试」(绿色三角)

节点启动后,会在断点处暂停,你可以进行逐步调试

方式 2:附加到已运行进程(适合 ros2 launch 启动后调试)

先在终端启动 LIO-SAM:

bash 复制代码
ros2 launch lio_sam run.launch.py

找到 lio_sam_imuPreintegration 的进程 ID:

bash 复制代码
ps aux | grep lio_sam_imuPreintegration

VSCode 调试选 Attach to Process → 点击开始 → 选择上面的 PID → 附加成功后,断点会生效。

进程 Debug 示意

相关推荐
郝学胜-神的一滴2 小时前
Qt 入门 01-02: 开发环境搭建指南
开发语言·c++·qt·客户端
Languorous.2 小时前
C++数据结构高阶|布隆过滤器(Bloom Filter)深度解析:从原理到手写实现,面试高频考点全覆盖
数据结构·c++·面试
山河木马3 小时前
Emscripten 从 C/C++ 调用 JavaScript
前端·javascript·c++
TANGLONG2223 小时前
【C++】继承详解——基类/派生类、作用域、默认函数、菱形继承(超详细)
java·c语言·c++·经验分享·笔记·ajax
zmsofts3 小时前
IntelliJ IDEA)因为内存不足而崩溃
java·ide·intellij-idea
小侯不躺平.3 小时前
C++ Boost库【2】 --stringalgo字符串算法
linux·c++·算法
code_whiter3 小时前
C++11(stack和queue)
开发语言·c++
用户805533698033 小时前
现代Qt开发教程(新手篇)2.1——QPainter 绘图基础
c++·qt
辰尘_星启4 小时前
【ROS2】 Python 节点的开发流程
开发语言·python·机器人·系统·控制·ros2
计算机安禾4 小时前
【c++面向对象编程】第12篇:继承(二):构造与析构顺序,继承中的构造函数
开发语言·c++