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

相关推荐
脱胎换骨-军哥5 分钟前
C++分布式系统设计:从通信引擎到分布式共识
开发语言·c++·分布式
脱胎换骨-军哥1 小时前
C++零成本抽象理论深度拆解:现代C++如何在不牺牲性能的前提下提供高级语法封装
java·开发语言·c++
_wyt0011 小时前
01背包问题详解
c++·背包dp
方便面不加香菜1 小时前
C++ 模板进阶
开发语言·c++
Wild_Pointer.2 小时前
高效工具实战指南:Procexp64进程资源管理器
c++·windows
cjr_xyi2 小时前
AT1202Contest_c binarydigit 题解
c语言·c++·算法
会周易的程序员2 小时前
Libnodave S7 通信库:架构设计与实现解析
linux·c++·物联网·架构·c·s7·工业协议
jinyishu_2 小时前
C++ 多态完全指南:从基础语法到底层原理
开发语言·c++·程序人生·面试
来一碗刘肉面5 小时前
队列的链式实现
数据结构·c++·算法·链表
●VON5 小时前
鸿蒙 PC Markdown 编辑器换行兼容:LF、CRLF 与混合换行归一化
华为·架构·编辑器·harmonyos·鸿蒙