【Linux调试器】:gdb的使用(常见指令)

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux调试器gdb的使用,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

 

目录

引言

1. 背景

2. 开始使用

2.1 查看代码 

2.2 断点 

2.3 调试 

2.4 查看变量 

2.5 跳转 

2.6 调用堆栈 

2.7 其他指令 


引言

每当我们写了一大堆的代码之后,信心满满的去编译运行,但是会发现要不就是出现了BUG,要不就是得到的结果与我们预期的结果不一样,因此需要对代码进行调试,逐语句、逐过程的来分析代码的问题,在之前使用的VScode中可以使用F10/ctrl + F10进行调试,那么在Linux中如何对代码进行调试呢?话不多说,直接开始!

1. 背景

如果一份代码要被调试,这份代码发布模式必须是Debug模式的。

在学习Linux调试工具之前我们先来了解一些Linux程序的一些特性:

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式

        如何证明呢?当我们直接使用gdb来调试一个程序的时候,会生成报错信息:

        

  • 要使用gdb调试,必须更改为debug模式,在源代码生成二进制程序的时候, 加上 -g 选项

  • 在debug发布的时候,一定要给可执行程序内部添加debug信息,否则程序无法调试;那么既然加了一些调试信息,我们就可以认为debug形成的可执行程序是大于release行程的可执行程序的:
  • 我们在Linux中形成的可执行程序的格式都是ELF格式的。
  • 在Linux中使用readelf -S 可执行程序,可以查看该可执行程序的二进制构成,那么就可以使用它搭配上grep来过滤一下可执行程序中的debug信息:

2. 开始使用

开始调试:gdb + 可执行程序

注意:后面跟的是可执行程序,并不是源文件!!!

 退出gdb:q/quit

​​​​​​​​​​​​​​

gdb可以记录上一个命令,直接Enter就是上一个命令  

2.1 查看代码 

查看代码:l/list

可以发现显示出来的代码不完整,如果需要查看全部的代码呢?

查看全部代码:l 0 -> Enter(先输入l 0,然后再一直按Enter,直到把全部的代码显示完毕)

直接运行代码:r/run

2.2 断点 

打断点:b + 行号

给指定源文件中打断点:b  源文件:行号

给函数打断点:b + 函数名(默认打在了函数入口处)

查看断点:info b 

删除断点:d + 断点编号

在打完断点之后,再使用r,就可以直接跳转到断点处:

在一个gdb的调试周期中,断点的编号是一直递增的;

在使用quit退出gdb后,再次进行gdb上一次的所有断点都不存在了。

禁用断点:disable + 断点编号(不删除)

启用断点:enable + 断点编号

2.3 调试 

逐过程(类似于VScode中的F10):n/next

逐语句(类似于VScode中的F11):s/step 

2.4 查看变量 

查看变量值:p + 变量

 

监视变量(常显示):display + 变量

取消监视(取消常显示):undisplay + 常显示条目编号

2.5 跳转 

直接跳转语句至指定位置:until + 行号

运行到当前函数的结尾:finish

从一个断点直接运行到下一个断点:c/continue

2.6 调用堆栈 

查看调用堆栈:bt

2.7 其他指令 

 显示所有的局部变量:info locals

修改变量的值:set var 变量 = xxx

 

 

朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,欲知后事如何,请听下回分解~,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持!   

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

stackY、

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值