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 示意

相关推荐
2401_8357925424 分钟前
Codex 启动报错:套接字访问权限错误 (os error 10013) 解法
vscode
Kurisu_红莉栖41 分钟前
c++复习——const,static字
c++
czxyvX1 小时前
1-Qt概述
c++·qt
齐鲁大虾1 小时前
新人编程语言选择指南
javascript·c++·python·c#
CoderMeijun1 小时前
C++ 多线程进阶:Lambda、条件变量与死锁
c++·多线程·条件变量·lambda·死锁·生产者消费者
unicrom_深圳市由你创科技2 小时前
上位机开发常用的语言 / 框架有哪些?
c++·python·c#
|_⊙3 小时前
C++ 智能指针
开发语言·c++
公众号-老炮说Java3 小时前
IDEA 2026.1 + Claude Code = 降维打击
java·ide·intellij-idea
Jasmine_llq3 小时前
《B4356 [GESP202506 二级] 数三角形》
开发语言·c++·双重循环枚举算法·顺序输入输出算法·去重枚举算法·整除判断算法·计数统计算法
山栀shanzhi3 小时前
在做直播时,I帧的间隔(GOP)一般是多少?
网络·c++·面试·ffmpeg