Linux调试器——gdb的基础使用

目录

1.背景

2.指令的使用

2.1gdb的使用和退出

2.2显示源代码

2.3运行程序

2.4调试

1.打断点

2.查断点

3.去断点

4.运行

5.关闭断点

6.启用断点

7.逐过程

8.进入函数

9.显示变量的值


1.背景

众所周知,我们的程序发布有两种,分别是debug模式和release模式,在Linux中我们主要有两种编译器——gcc和g++,一个是编译C语言程序的,一个是编译C++程序的,当我们使用这些编译器进行汇编步骤的时候,会生成一个二进制文件,Linux系统中默认它是release模式的。那如果我们想使用gdb调试器来进行调试的话该怎么做呢?

我们需要在源代码生成二进制程序的时候, 加上 -g 选项。(如图所示)

由上图所示,我们可以看到生成了一个testdebug的二进制文件。

gdb调试器对debug模式的文件才能使用,所以我们才要生成testdebug这个文件。

接下来我就来讲解一些指令要如何去使用。

2.指令的使用

2.1gdb的使用和退出

我们使用gdb直接gdb 文件就行了。

如图所示,这就说明我们的gdb使用成功了。

那么我怎么退出呢?

很简单,直接quit就能退出了。

2.2显示源代码

list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

这是我们简单写的一段代码,接下来我会用它来进行举例说明。

如图所示,我们使用list/l时一次显示10行,我们再按回车就会再打印10行,打印完了就会停下,我们再来看看list/l + 行号:

我们发现list/l + 行号不是从你输入的行号开始往后显示10行,而是以你输入的为中间值,显示上下文,总共为10行。如果没有下文它就不显示下文嘛(没有上文同理),如图所示:

我们也可以加函数名来进行显示:

如上图所示,我们使用list/l + 函数名的方式也是查函数名的上下文总共为10个。

2.3运行程序

r或run:运行程序。

第一行表示的是我们开始运行的项目还有这个项目的位置,第二行exited normally表示的是程序正常运行结束。

2.4调试

1.打断点

我们可以b + 行号/函数名。

第二行的意思就是打了一个序号为1的断点,后面的十六进制就是它的地址,test.c就是文件名,行数在第十行。

2.查断点

info break :查看断点信息。(也可以简写成i b)

由此我们就可以看到它的断点个数、序号,Disp我们先不管,Enb表达的是它的使能,就是说这个断点是开启的状态(y)还是关闭的状态(n),后面的信息就是它的地址,还有在哪个文件.

3.去断点

delete breakpoints n:删除序号为n的断点(d 序号)

4.运行

我们在第十五行的时候打了一个断点,所以运行在第十五行的位置停了下来。

5.关闭断点

disable breakpoints:禁用断点

如图所示,我们保留了序号为二的断电且禁用了它。

6.启用断点

disable breakpoints:禁用断点

如图所示,使能又变回了y。

7.逐过程

n 或 next:单条执行。

我们在run运行后自动到了我们的断点位置,接下来我们输入n/next就可以逐过程调试了,由于Linux的gdb会自动记录上一次的指令,所以我们直接一直回车就可以了。

8.进入函数

s或step:进入函数调用

没遇到函数前我们还是继续n,到函数的时候我们输入s/step,就进入到我们的函数中了。

9.显示变量的值

p/print 变量:打印变量值。

如图所示,我们a,b加起来是2,所以我们的c=a+b就是2,$后面的数字表示查询了几次。

display 变量名:跟踪查看一个变量,每次停下来都显示它的值

undisplay:取消对先前设置的那些变量的跟踪

这里记住输入的不是变量名,而是它前面的序号。

  • 35
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值