gdb工具的使用

目录

引言

准备工作

gdb操作


引言

Linux和windows同为操作系统,前者是命令行形式,后者使用图形化界面形式,两者虽然形式不同但操作确实对应的。图形化界面的点击都可以对应命令行指令,自然编写代码时调试也不例外。Windows下的调试方法大家应该都很熟悉了,今天就来介绍一下gdb,作为Linux下的调试工具,它的功能也很强大。

准备工作

写个小程序实际操作一下:

 

 

 

 

 gdb对可执行程序mytest进行调试,发现不能调试。

 这是因为Linux下默认发行版本是release版本的。需要在编译时改成debug版才能调试:

 

 

 这样编译一个debug版本的就可以进行调试了。

为什么debug版就可以调试,release版就不能呢?————因为debug版文件中加了调试信息:

readelf -S查看FILE格式的文件,-S显示节头信息(如果有数据的话)。通过管道grep过滤,找到debug调试信息,这在release版文件中是没有的 。

区分debug版和release版的方法:debug版文件大小 > release版。

gdb操作

1、gdb mytest 进入调试后,l (list) 显示代码,此时不是从第一行开始显示,

想从第一行开始显示,l 0:

 

 想继续往下显示,回车键即可:

2、添加、查看、删除断点:

添加断点:b (break)+行号

查看断点:info b:

 

删除断点:d (delete) + Num(断点编号):

 

3、调试运行相关指令

在Windows下调试,以VS为例,F5是调试运行,如果碰到断点就停下来,没断点就运行到结尾。

Ctrl F5是运行不调试,逐过程是F10,遇到函数不进去执行下一条语句;逐语句是F11,碰到函数进去,跳转到函数实现部分。

Linux下调试运行是 r (run),逐过程是n (next),逐语句是 s (step)

如果要从一个断点跑到下一个断点处,c (continue)

 如果既不想在函数内逐语句调试,也不想跳到下一个断点,只想跑完当前这个函数,用 fin (finish)

 

 

还有一条指令:bt (查看调用堆栈)

4、常显示

在Windows下(以VS为例),比如想调试一个循环并查看循环过程中变量每次的变化值,可以调用窗口显示:

Linux下需要用到p (printf)指令和display指令:

 

 进入循环后,p +变量就可以打印该变量的值,但是下一次循环则不会继续显示。

所以用display可以做到常显示:

注意display变量前面的编号,想去掉display的变量用undisplay指令时,undisplay + 编号:

 

5、 until

until + 行号,跳转到该行处。

像上面在循环里想出去,可以直接until跳转出去。

6、set var ,修改变量的值

7、info locals :查看当前栈帧局部变量的值

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值