Linux开发工具gdb篇

28 篇文章 2 订阅

在这里插入图片描述

🎻0.前言

🎼debug版本

在我们平时写代码的时候,通常都是使用的debug版本,debug版本是可以进行调试的,它在形成可执行程序的时候,带有调试信息,能够方便我们更好地理解程序运行的情况和找出潜在的问题。

同时也因为带有调试功能,所以版本通常较大。

🎼release版本

release版本是最终发给用户的版本,这个版本会精简和优化代码,提高程序的性能。

因为这所面对的是用户层面,用户只需要使用就行,调试信息对于多数用户来说都是无用的,所以release版本也不包含调试信息。

本篇将讲解Linux环境下的调试,之前有篇文字讲解过Windows环境下的调试:C语言——调试技巧,有兴趣可以点击查看。

🪕1. gcc/g++的默认版本

在Windows的VS2022中,默认的是debug版本image-20230712122942447

而Linux中因为是纯指令,看不到是什么版本,这时候可以用gdb [可执行程序],查看当前程序是什么版本

image-20230712123145628

显式没有调试信息,我们可以可以readelf -S [可执行程序] | grep -i debug查看是否有调试信息

image-20230712123408417

这里也没有看到有调试信息,这就说明,gcc/g++默认编译是以release版本发布的

如果需要已debug方式发布,编译时需要加上-g选项:

image-20230712124041190

🎸2. gdb使用

🎵进入 & 退出

debug方式编译之后,就可以进入调试了。

进入gdb选项:gdb [可执行程序]

退出gdb选项:q

1

🎵查看代码

当进入gdb调试器之后,可以使用l [行号]查看代码

2

gdb会自动记录上一次的指令,我们用了l选项之后,如果还想继续查看,直接回车即可

🎵断点 & 跳断点

打断点可在调试时跳到断点处,进一步所需调试范围。

指令b [行号],就可以在指定的行号打上断点

3

这里也不像在VS中,打一个断点就会有小红点,这里打完断点,我们需要用指令info b来查看当前我们所打的断点

4

从一个断点跳到另一个断点,指令c即可,如果某处有问题,则跳不过来,就说明这个期间有问题,这样就能缩小调试范围

21

我们打的断点会按顺序从1开始编号,如果要删除断点,则删除他们对于编号即可d [编号]

5

同时,如果不想这个断点发货作用,同时也不想将这个断点删掉,就可以使用指令disable [编号]使其失效,要打开就是enable [编号]

image-20230712214544697

🎵逐过程 & 逐语句

r指令开始执行程序,如果有断点,就会运行的接触的第一个断点处停下,然后我们可以选择是逐过程n还是逐语句s往下执行

6

🎵监视

如果要在调试的过程中查看变量的变化或者是递增,使用指令p [目标]display [目标]就能将监视的目标常显示

11

如果这里常显示,前面也是有编号的,如果不想常显示,undisplay [编号]即可取消常显示

12

🎵跳出循环 & 结束函数

在调试时,如果进入了循环,发现问题并不在循环里面,可使用until [行数],跳出当前循环到达我们指定的地方

13

如果进入了函数,并且也发现当前函数没有问题,可使用until [行数]跳出,也可以使用finish跑完该函数

14

🥁3. 常见指令

run(或 r):开始执行程序。

break(或 b):设置断点。可以指定断点的行号或函数名。

continue(或 c):继续执行程序直到下一个断点或程序结束。

next(或 n):执行下一行代码,但是不会进入函数调用。

step(或 s):执行下一行代码,并进入函数调用。

finish:执行当前函数的剩余部分,并返回到函数的调用点。

print(或 p):打印变量的值。可以使用表达式。

backtrace(或 bt):打印函数调用的堆栈跟踪。

info breakpoints(或 info b):列出当前设置的断点。

delete:删除指定的断点。

watch:设置观察点,当变量的值发生变化时暂停程序。

quit(或 q):退出GDB。

以上就是gdb的基本使用方法的,如果条件允许,我还是选择换在Windows环境调试。

那本期的分享就到这里咯,我们下期再见,如果还有下期的话。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

加法器+

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

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

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

打赏作者

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

抵扣说明:

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

余额充值