3.6、linux调试器:gdb

简介: 3.6、linux调试器:gdb

背景

程序员在做项目写代码时,每完成一个功能,需要自己先测试·一下,看看能不能跑之类的,然后交给测试人员,但是测试人员就代表着用户,用户不需要调试,他们只需要最好的体验,所以程序员给测开人员的代码版本应该是release,而不是debug,但是程序员需要调试,所以程序的发布方式就有了两种,debug和release。·

Linux中,gcc和g++出来的二进制程序默认是release版本,我们需要使用gdb,那么就需要在源代码生成二进制程序时,加上-g选项。

使用

先导准备


接下来开始使用gdb进行调试

我们进入调试后是看不见任何代码的,这对于我们来说是不可忍受的。

list 打印代码,我们实际使用时可以简写为l,后面加上空格和0时表示从头开始打印

直接l就可能会像上图,可能与上次进入光标有关

而且gdb自动记录最近的一条指令,我们输入l后,下一次直接回车,就相当于输入了list

代码是有了,我们可以开始调试,对应在

Visual Studio中,是F5

gdb中,我们输入run,简写为r

由于我门并没有打断点,就直接执行完了。

那么如何打断点呢?

break 行号,简写为b 行号

info b查看断点 (info breakpoints),简写为i b

我们可以打断点了,那么如何执行语句往下走呢?

在Visual Studio中,我们有F10和F11,分别是逐语句和逐过程

gdb中,我们使用next和step,简写为n和s

我们先只使用next

接下来使用step

直接r,然后y,就可以不退出重新调试

进入函数后,发现循环很长,如何跳过?

until 行号 ,执行到行号所在行

或者干脆想退出函数

那就这样做

finish,执行到当前函数结束

我们的思路再重头来过介绍其他指令

打断点打在某个函数上

break 函数名,简写为b 函数名

breakpoint already hit 1 time表示断点被命中。

我们能不能从一个断点执行到下一个断点呢?

continue 简写为c

我们发现断点的执行顺序不是按照序号的,而是按照代码的执行顺序。

那么接下来如何删除断点呢?

delete breakpoints删除所有断点,简写为d

delete breakpoints 断点序号 简写为d 序号

如何禁用断点,如何启用断点?

disable breakpoints 断点序号,简写为disable b 序号,不可写成d b 序号(踩过坑了)

我们发现Enb那一栏由y变成了n,yes-->no

enable breakpoints 断点序号,启用断点 ,简写为enable b 序号,不可写成 e b 序号

接下来我们想到Visual Studio可是有监控窗口的,并且可以查看变量的值,gdb呢?

print,我们可以简写为p,意思是打印值,变量或者表达式的值。

但是监视窗口一般是常显示,我们如何进行常显示?

display变量名,跟踪查看变量,并常显示。

undisplay变量名,取消对变量的跟踪。

现在我们还有一个需求,在不退出调试的情况下修改变量的值

这里写错了,修改一下。

set var 变量,设置变量的值

bt,查看调用堆栈

quit,退出gdb调试

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