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

相关推荐
苏宸啊3 小时前
IPC管道
linux·c++
BestOrNothing_20154 小时前
ROS2 话题通信实战:消息对象、Publisher 发布器与 Subscriber 订阅器保姆级教程
c++·ros2·subscriber·publisher·话题通信
艾iYYY5 小时前
string 类的模拟实现
android·服务器·c语言·c++·算法
为何创造硅基生物5 小时前
C++ virtual void StartNetwork() = 0; // 纯虚:子类必须实现,否则不能 new。
c++
知无不研6 小时前
对套接字的深入理解
linux·服务器·网络·c++·socket·网络套接字
hai3152475437 小时前
FlashAttention C语言(C++)实现(展示版)
c语言·开发语言·c++·人工智能·算法
wuminyu8 小时前
Java锁机制之Java对象重量级锁源码剖析
java·linux·c语言·jvm·c++
郝学胜_神的一滴8 小时前
Qt 高级开发 026:QTabWidget御道,从筑基到化境
c++·qt
apocelipes9 小时前
GNU GCC 多版本函数扩展
c语言·c++·linux编程
代码中介商9 小时前
C++完美转发与引用折叠全解析
开发语言·c++