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.yaml2. 批量设置核心断点(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调试场景,无需死记,按调试流程按需使用即可。