GDB调试 ORBSLAM3

本文详细介绍了如何将ORB_SLAM2和3的编译模式从release切换到Debug,以便进行调试。在非ROS和ROS环境中分别提供了CMake配置方法,并指导了如何使用gdb进行调试,包括设置断点、查看和修改内存、控制程序运行等基本操作。此外,还列举了一些常用的gdb调试命令。
摘要由CSDN通过智能技术生成

1. 使用流程:

  • debug编译
    orbslam2和3中默认的辨认模式是release模式,需要将其更改为Debug模式才能进行调试 cmake .. -DCMAKE_BUILD_TYPE=Debug
  • 通过gdb启动

2. debug编译

2.1在非ros环境cmakelist添加如下
(1)在编译时的build文件输入:

#默认debug模式包含 -g,包含调试信息
cmake  -DCMAKE_BUILD_TYPE=Debug ..

(2)也可以在cmakelist.txt中添加如下信息直接编译

SET(CMAKE_BUILD_TYPE "Debug")
 SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")#用于进行gdb调试
 SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

2.2ros代码中
(1)如果用命令行catkin_make,在输入catkin_make时加上一个参数:

//运行完这条命令后显示Build type: RelWithDebInfo
//如果运行完后不是Build type: RelWithDebInfo,则删除build文件夹重新输入这条命令
 cmake  -DCMAKE_BUILD_TYPE=Debug ..

(2)cmakelist添加如下,然后cmake …

SET(CMAKE_BUILD_TYPE "Debug")# 定义编译类型
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")#用于进行gdb调试,定义Debug编译参数 -g 表示包含调试信息
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")# 定义Release编译参数

3.gdb调试

3.1gdb调试

(1)进入gdb进行调试

~/ORB_SLAM3_v1_detailed/Examples_old/ROS/ORB_SLAM3$ gdb Stereo

(2)传入参数运行

(gdb) run Vocabulary/ORBvoc.txt   Examples_old/Stereo/KITTI00-02.yaml  /home/knight/data/kitti/2011_10_03_drive_0027_sync false

3.2常用调试命令

3.2.1基本

r :从头开始运行程序直到断点。在一次debug中你可以通过用 r 来多次重新运行程序,而不必重新rosrun 或 roslaunch.
q:退出debug。

3.2.2查看代码/导航

l:查看代码/导航
l 50:列出45-55的10行。
l functionName :列出当前所在文件从某函数开始的10行。
bt:“Backtraces”,列出调用堆栈。
up/down:在堆栈中向上/向下移动一级。可以简写为u和d

3.2.3查看/修改内存

p x:相当于“print x”。显示当前变量 x 的值。
x address:查看指针所指位置的值。
set x=12:修改变量x的值:

set x = 12
set x = y

call function():调用某函数。这个函数可以是你程序里定义的函数,甚至是标准库函数,我的理解是只要在当前位置可访问到的函数都可以调用。这是一个极其有用的功能,生生把c++用成Matlab 。
display x:和print的区别是,x不是只显示一次就消失,而是一直显示,每次继续运行程序都会刷新。相当于VS的“watch”功能。
undisplay x:停止对变量x的display。

3.2.4 断点

b:b即break。在当前行设置断点。

b 45
b functionName

在某行/某函数开始处设置断点。常用:b main 在程序开始设置断点。
watch x == 3:设置条件断点。这个比VS的条件断点更方便,因为它不需要设置在哪一行!时刻监控!
info break:查看当前存在的所有断点。每个断点都有自己的编号。
delete N:删除编号为N的那个断点。

3.2.5 调试运行

n:“next”。运行一行代码。 相当于VS的step over。
s:“step”。运行一个指令。相当于VS的step in。
n和s都可以一次运行多行,比如n 5
c:“continue”。继续运行直到下一个断点。
f:“finish”,运行完当前程序。相当于VS的 step out。

GDB调试入门指南:https://zhuanlan.zhihu.com/p/74897601
ros 加-g编译或debug编译:https://blog.csdn.net/qq_30519005/article/details/117249920?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-117249920-blog-111167008.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-117249920-blog-111167008.pc_relevant_antiscanv2&utm_relevant_index=6

视频:
Ubuntu 16.04系统下 VS Code 调试C++教程:
https://www.bilibili.com/video/BV1Dp4y1v7wA?spm_id_from=333.337.search-card.all.click
C语言gdb调试之精髓(常用命令、多进程、多线程、程序日志):
https://www.bilibili.com/video/BV1ei4y1V758?spm_id_from=333.337.search-card.all.click

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

My.科研小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值