GDB调试

简介: GDB调试

C++程序员必备知识


什么是GDB??

  • GDB是GNU软件系统社区提供的调试工具,同GCC配套组成一套完整的开发环境,GDB是Linux和许多许多Unix系统中的标准开发环境。
  • GDB主要的四个功能:
  1. 启动程序,可以按照自定义的要求随心所欲的运行程序
  2. 可以让被调试的程序在所指定位置的断点出停住(断点可以是条件表达式)
  3. 当程序被停止时,可以检查此时程序所发生的事
  4. 可以改变程序,将一个BUG产生的影响修正,从而测试其它BUG

准备工作

  • 通常,在为调试而编译时,必须关掉编译器的优化现象(-0n),并打开调试选项 -g,另外,’-wall‘在尽量不影响程序行为的情况下打开,提示所有的warning
  • -g选项的作用是在可执行文件中加入源代码信息,比如可执行程序文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证gdb能够找到源文件(-g的文件会比不加的大,而且我们在GDB中查看的时源文件的代码)

非调试命令

  • 启动GDB
  1. gdb 可执行文件
  • 查看代码(默认显示10行)
  1. l/list
  2. l  行号(函数名) ---->当前文件
  3. l  文件名:行号(函数名)---->跨文件
  • 设置查看代码的行数(针对list)
  1. show list/listsize
  2. set     list/listsize   行数
  • 设置断点
  1. b/break
  2. b  行号(函数名)
  3. b  文件名:行号(函数名)
  4. b   行号  if i == 9                        —设置条件断点
  5. delete/del/l   断点的编号
  6. info/i                                           —查看所有断点
  7. i     b                                           —查看断点信息
  8. dis/display    断点编号                —设置断点无效
  9. ena/enable   断点编号                —设置断点生效

GDB调试

  • 运行GDB程序(开始调试的第一步)
  1. start                                            —程序停在第一行
  2. run                                              —遇到断点才停
  • 继续运行,到下一个断点停
  1. c/continue
  • 向下执行一行代码(遇到函数不会进入函数体)
  1. n/next
  • 变量操作
  1. p/print     变量名                         —打印变量值
  2. ptype      变量名                         —打印变量类型
  • 向下执行一行代码(遇到函数会进入函数体)
  1. s/step
  2. finish(跳出函数体)                      —函数体里没有断点是前提
  • 自动变量操作
  1. display  num                              —自动打印指定变量的值
  2. i/info      display                         —查看自动打印变量的信息
  3. undisplay    编号                        —取消自动打印指定变量
  • 其它操作
  1. set     var     变量=变量值
  2. until(跳出循环体)                        —循环里没断点是前提
相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
6月前
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
368 2
|
6月前
|
NoSQL Linux 开发工具
【深入解析git和gdb:版本控制与调试利器的终极指南】(下)
【深入解析git和gdb:版本控制与调试利器的终极指南】
|
3月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
59 10
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
3月前
|
NoSQL
技术分享:如何使用GDB调试不带调试信息的可执行程序
【8月更文挑战第27天】在软件开发和调试过程中,我们有时会遇到需要调试没有调试信息的可执行程序的情况。这可能是由于程序在编译时没有加入调试信息,或者调试信息被剥离了。然而,即使面对这样的挑战,GDB(GNU Debugger)仍然提供了一些方法和技术来帮助我们进行调试。以下将详细介绍如何使用GDB调试不带调试信息的可执行程序。
89 0
|
5月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
41 1
|
5月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
30 0
|
5月前
|
NoSQL Linux C++
Linux C/C++ gdb调试正在运行的程序
Linux C/C++ gdb调试正在运行的程序
|
5月前
|
NoSQL Linux C++
Linux C/C++ gdb调试core文件
Linux C/C++ gdb调试core文件
|
5月前
|
NoSQL Linux C++
Linux C/C++ gdb调试
Linux C/C++ gdb调试