目录
- [一、安装必备 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
- 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 示意

