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

GDB调试 ORBSLAM3相关推荐

  1. 使用 GDB 调试多进程程序

    使用 GDB 调试多进程程序 来源 https://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html GDB 是 linux 系统上常 ...

  2. GDB调试--以汇编语言为例

    #rpm -qa |grep  gdb 下载: 安装 #tar -zxvf #./configure #make 使用GDB 以汇编语言调试为例 汇编语言实现CPUID指令 CPUID cpuid是I ...

  3. GDB 调试 Mysql 实战(二)GDB 调试打印

    背景 在 https://mengkang.net/1328.html 实验中,我们通过optimizer_trace发现group by会使用intermediate_tmp_table,而且里面的 ...

  4. 用gdb调试mpi程序的一些心得

    Linux下MPI (Message Passage Interface) 的程序不太好调试,在windows下vs2005以上的IDE有集成的简便MPI调试工具,没有用过,有兴趣的可以试验一下.下面 ...

  5. gdb php-fpm,使用 gdb 调试 php-fpm 异常错误

    相关资源下载GDB简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能. 问题 ...

  6. Linux基础 30分钟GDB调试快速突破

    引言 Linus心灵鸡汤 在*nix开发中有道卡叫gdb调试,不管你怎么搞. 它依然在那丝毫不会松动.今天致敬一个 活着的传奇 Linus Torvalds Unix 始于上个世纪60年代,在70年代 ...

  7. SLAM工具|GDB调试从入门到精通

    前言 对于windows平台下,VS下调试简单又方便,那么在linux系统下,该如何进行代码的调试呢? gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能非常强大, ...

  8. gdb调试 print打印不出变量值或者不准确

    编译选项加了 -O,即便是-O0,也不能正常显示,需要加上-gstabs+这个编译选项, -gdwarf-2这个编译选项会与-gstabs+冲突,去掉-gstabs+,只保留-gdwarf-2选项可以 ...

  9. 比较全面的gdb调试命令

    用GDB调试程序  GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序 列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行 软件的优势在于 ...

  10. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...

最新文章

  1. 鸿蒙手机系统开发大会,鸿蒙OS+EMUI10,华为开发者大会的创新与看点
  2. modules runAllManagedModulesForAllRequests=true /(转1)
  3. JavaSE基础知识(5)—面向对象(5.3访问修饰符)
  4. java nio教程_Java NIO教程
  5. android自动回复退订,Android实现短信自动回复,挂电话
  6. Socket、send/recv的循环发送和接收、缓冲区、阻塞
  7. 【Filecoin周报-62】倒计时1天,太空竞赛准备怎么样了?
  8. 比较几种步进电机加减速控制方案
  9. line-height属性与font-size属性的关系
  10. c语言 显示一行中文 程序,关于C语言TurboC中显示汉字的问题程序如下(我已把hak16 爱问知识人...
  11. Go语言学习、结构体
  12. java继承a mya new c,JAVA注解
  13. Java中的高级“过滤器“Stream流
  14. [原创]浅谈我们应招聘应届毕业生做测试吗?
  15. 红外对管--STC8G1K08A
  16. 2020年4月2日解决Xmind8自己插入的图片丢失问题的可执行方案
  17. 周赛一 1004 uu的金坷垃
  18. PHP的化学名是啥,科学网—化学名称简写 - 桂耀荣的博文
  19. Fabric 1.0源代码分析(32) Peer #peer node start命令实现
  20. linux traceroute命令参数及用法详解--linux跟踪路由命令

热门文章

  1. php laypage,ThinkPHP5、内容管理系统、前端框架layui、layPage模块
  2. 马哥Linux第52期-第四周作业
  3. matlab 量化与过采样,[转载]降采样,过采样,欠采样,子采样,下采样
  4. 无线Wi-fi中继设置
  5. Python实战:个人贷款计算器
  6. 计算机网络是几级学科,教育部更新学科目录 “网络空间安全”增设为一级学科...
  7. 抓包教程(安卓抓包)Fiddler,HttpCancy使用~浅谈前几日抓包中遇到的坑
  8. VS2015/VS2017C++报错C++LNK1104 无法打开文件“ucrtd.lib”或无法打开包括文件“corecrt.h“
  9. 分享一款漂亮的Bootstrap模板INSPINIA_adminV2.5
  10. 【017】基于vue.js的网易云web端(实现播放、登录)(Node接口实现)