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

相关推荐
jf加菲猫2 小时前
第10章 数据处理
xml·开发语言·数据库·c++·qt·ui
起个名字总是说已存在2 小时前
解决TRAE等AI编辑器终端中文乱码问题
人工智能·架构·编辑器
wengqidaifeng2 小时前
备战蓝桥杯----C/C++组 (三)算法讲解前言
c语言·c++·蓝桥杯
森G3 小时前
30、QStandardItemModel 和 QTableView---------Model/View模型视图
c++·qt
maxmaxma3 小时前
ROS2机器人少年创客营:Python第二课
c++·python·机器人
我先去打把游戏先3 小时前
Git 一个本地仓库同时推送到两个远程仓库(私人 GitHub + 公司 Git)保姆级教程
git·vscode·单片机·嵌入式硬件·物联网·学习·github
山栀shanzhi3 小时前
FFmpeg 实战:RGB 裸流编码成 MP4,全流程详解(含源码
c++·ffmpeg
Yupureki3 小时前
《Linux系统编程》20.常见程序设计模式
linux·服务器·c语言·c++·单例模式·建造者模式·责任链模式
maxmaxma3 小时前
ROS2 机器人 少年创客营:Day 8
机器人·ros2