3.6、linux调试器:gdb

本文介绍了程序员在Linux环境下使用gdb进行代码调试的过程,包括设置debug和release版本、添加和删除断点、执行语句、跳过代码段、查看变量值以及基本的调试操作。

个人主页:Lei宝啊 

愿所有美好如期而遇


背景

程序员在做项目写代码时,每完成一个功能,需要自己先测试·一下,看看能不能跑之类的,然后交给测试人员,但是测试人员就代表着用户,用户不需要调试,他们只需要最好的体验,所以程序员给测开人员的代码版本应该是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调试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lei宝啊

觉得博主写的有用就鼓励一下吧

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

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

打赏作者

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

抵扣说明:

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

余额充值