gdb调试ros2程序
2026/5/22 3:59:58 网站建设 项目流程

GDB 核心调试命令速查(适配 ROS2 节点lio_node调试场景)

以下按调试流程分类整理高频 GDB 命令,兼顾基础操作与 ROS2 节点调试的实用需求,命令后附简洁说明和使用示例,易记易用:

一、启动与退出(基础入口/收尾)

命令作用示例
run/r启动调试程序(传递参数时直接跟在后面)run --ros-args -p config_path:=/xxx/lio.yaml(启动节点并传参)
quit/q退出 GDB,终止调试程序输入q后按y确认即可
start启动程序并停在主函数main第一行(等效b main + run直接输入start,无需提前打断点

二、断点设置与管理(核心调试操作)

命令作用示例
break/b函数名对指定函数打断点b main(主函数断点)、b lidar_processor(激光雷达处理函数断点)
break/b行号对当前文件指定行打断点b 100(当前文件第100行)
break/b文件名:行号对指定文件的指定行打断点(跨文件调试)b lio_node.cpp:50(lio_node.cpp 第50行)
info breakpoints/info b查看所有已设置的断点(含断点编号、位置、状态)输入后列出所有断点,用于确认/管理
delete/d断点编号删除指定断点(编号从info b中获取)d 1(删除编号为1的断点)
delete/d清空所有断点直接输入即可,无需参数
enable断点编号启用已禁用的断点enable 2(启用编号2的断点)
disable断点编号禁用断点(保留断点,暂不生效)disable 2(禁用编号2的断点)

三、程序执行控制(断点后单步/继续运行)

命令作用关键说明示例
next/n单步执行(跳过函数调用,不进入内部)适合快速走流程,不深入子函数断点后输入n,执行下一行
step/s单步执行(进入函数内部,逐行调试)适合调试函数内的细节逻辑遇到lidar_processor()时输入s,进入函数
continue/c继续运行程序,直到下一个断点或程序结束断点触发后,恢复运行至后续断点输入c,跳过当前断点
finish执行完当前所在函数,返回到调用该函数的上一行适合函数内调试完成后,快速返回上层imu_processor内输入finish,执行完函数并返回
until/u行号运行程序直到指定行(无需提前打该行列断点)适合快速跳至目标行,跳过中间代码u 200(运行到当前文件第200行暂停)

四、变量与数据查看(调试核心需求)

命令作用示例
print/p变量名查看单个变量/表达式的值p cloud->size()(查看点云数量)、p imu_msg->angular_velocity(查看IMU角速度)
print/p数组/容器查看数组、STL容器(vector/map等)内容p lidar_calib[0](查看数组第1个元素)、p frame_list(查看vector容器所有元素)
print/p变量名=值临时修改变量值(调试时测试不同参数效果)p max_cached_frames=200(将缓存帧数量临时改为200)
watch变量名对变量设置监视点(变量值被修改时自动暂停程序)watch debug_mode(当调试模式开关被修改时,程序暂停)
info locals查看当前函数内的所有局部变量(无需逐个输入变量名)在任意函数内输入,一键列出所有局部变量及值
info args查看当前函数的所有参数(含参数名、传入值)cloud_callback内输入,查看回调函数的参数(如点云消息指针)

五、调用栈与函数上下文(排查崩溃/异常流程)

命令作用关键说明示例
backtrace/bt查看函数调用栈(从当前函数到主函数的调用链)崩溃时必用,快速定位异常发生的调用路径程序崩溃后输入bt,查看哪层函数调用出问题
backtrace/bt n查看调用栈前n行(n为数字,适合调用栈过长时)bt 5(仅查看前5层调用栈)
frame/f栈帧编号切换到调用栈的指定栈帧(查看对应函数的变量/参数)bt中获取栈帧编号,f 0(当前栈帧,最内层函数)、f 1(上一层调用函数)
info frame查看当前栈帧的详细信息(函数地址、参数地址、局部变量地址)深入调试时使用,定位内存相关问题切换栈帧后输入info frame

六、源码与行号查看(关联代码与调试)

命令作用示例
list/l查看当前行附近的源码(默认显示前后5行,共10行)断点后输入l,查看断点所在位置的代码
list/l行号查看指定行附近的源码l 80(查看第80行附近的代码)
list/l函数名查看指定函数的完整源码l cloud_callback(查看点云回调函数的所有代码)
list/l文件名:行号查看指定文件的指定行源码(跨文件)l map_builder.cpp:30(查看map_builder.cpp第30行代码)

七、实用进阶命令(ROS2 节点调试高频)

命令作用适用场景
set args参数提前设置run时的程序参数(后续直接run即可,无需重复写参数)固定传参时使用,set args --ros-args -p config_path:=/xxx/lio.yaml,后续直接run
show args查看已通过set args设置的程序参数确认参数是否设置正确
signal SIGINT向调试程序发送SIGINT信号(等效终端Ctrl+C调试ROS2节点时,模拟手动中断,测试节点退出逻辑
ignore断点编号 次数忽略指定断点前N次触发(第N+1次触发时暂停)适合循环内的断点,ignore 3 5(忽略编号3的断点前5次触发,第6次暂停)

八、ROS2lio_node调试专属命令组合(直接复用)

1. 快速启动+主函数断点
ros2 run--prefix"gdb --args"fastlio2 lio_node--ros-args-p config_path:=/home/xxx/agv_robot/ros2_packages/install/fastlio2/share/fastlio2/config/lio.yaml
(gdb) start --ros-args -p config_path:=/home/zhangying/agv_robot/ros2_packages/install/fastlio2/share/fastlio2/config/lio.yaml
2. 批量设置核心断点(fastlio2 关键函数)
(gdb) b main (gdb) b cloud_callback (gdb) b lidar_processor (gdb) b imu_processor (gdb) info b # 确认断点设置成功
3. 崩溃后快速定位(必用)
(gdb) bt # 查看调用栈,定位崩溃的函数/行号 (gdb) f 0 # 切换到崩溃的栈帧 (gdb) info locals # 查看崩溃时的局部变量,分析异常原因
4. 临时修改参数测试(无需重新编译)
(gdb) run --ros-args -p config_path:=/xxx/lio.yaml # 启动节点 (gdb) p update_frequency=20.0 # 将更新频率从10.0临时改为20.0 (gdb) c # 继续运行,测试修改后的效果

核心命令速记口诀(易上手)

  • 启动退出:run启动,quit退出,start停主函数;
  • 断点管理:b打断点,info b看断点,d删除断点;
  • 执行控制:n单步跳函数,s单步进函数,c继续到下断;
  • 查看数据:p看变量,bt看调用栈,info locals看所有局部变量;
  • 源码查看:l看源码,加行号/函数名精准定位。

以上命令覆盖 90% 的 ROS2 节点lio_node调试场景,无需死记,按调试流程按需使用即可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询