【Linux】调试器gdb的使用

🏖️作者:@malloc不出对象
⛺专栏:Linux的学习之路
👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈
在这里插入图片描述


前言

本篇文章我们将要学习的是Linux下的调试器gdb,作为一名优秀的程序员必然要学会调试,接下来我们就来学习吧!!

一、什么是gdb

GDB的全称是GNU Debugger,它是GNU工具集的一部分。GDB可以在命令行界面或图形用户界面下使用,具有强大的功能和灵活的命令行选项。通过GDB,程序员可以设置断点、单步执行程序、打印变量值、查看堆栈信息等等。除了基本的调试功能,GDB还提供了一些高级功能,例如支持远程调试、支持多线程调试、支持动态加载模块调试等等。GDB还可以通过脚本语言进行扩展,从而自定义各种功能。

总之,GDB是一个功能强大的调试器,它可以帮助程序员快速定位和修复程序中的错误,提高程序的质量和可靠性。

二、使用gdb

在使用gdb之前,首先我们先写好我们的源文件以及Makefile文件

在这里插入图片描述

接下来我们使用gdb准备对我们形成的可执行程序mytest进行调试:

在这里插入图片描述

但是使用gdb时我们出现了一些问题,为什么会它提示我们找不到调试信息??

这是因为在 Linux 中,用 gcc/g++ 生成的可执行程序默认是 release 版本的,而 release 版本是没有调试信息的,只有 debug 版本才会有调试信息。那么,要想gcc/g++编译生成debug 版本的可执行程序,而我们只需加上-g选项就能加入我们的调试信息了!!

在这里插入图片描述

下面我们继续来检测一番:

Linux下我们的文本格式是ELF,所以我们可以readelf这个工具来查看可执行程序包含的信息:

在这里插入图片描述

我们可以看到debug版本中确实加入了很多调试信息,而我们使用工具渎取release版本的信息竟然没有任何显示,这其实也在我们的意料之中。

在这里插入图片描述

三、gdb的操作

下面我们来学习gdb的基本操作,要想了解gdb的操作首先我们要对VS中的各项调试操作很熟悉,如果VS中的各项调试操作你已经很熟悉的话那么对于gdb的使用成本就会小很多!!因为我们的调试功能其实都大致差不多。

指令功能说明
l/list 行号显示binFile源代码,接着上次的位置往下列,每次列10行
l/list 函数名列出某个函数的源代码
r/run运行程序(没有设置断点的情况下)
n/next单条执行(VS逐过程 F10)
s/step进入函数体内(VS逐语句 F11)
b/break 行号在某一行设置断点(每设置一个断点就有一个对应的编号,即使删除了此时的断点,但这个断点的编号还是不会被取代),例如:假设我设置了17 18行的断点,此时我对应的断点编号为1 2,我此时删掉断点1,再设置17行的断点,此时的断点编号为2和3并不会取代编号1
b/break 函数名在某个函数开头设置断点
info b/break查看断点信息
finish执行完当前函数的代码回到调用该函数处,然后停下来等待命令
p/print打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量打印变量值(临时显示)
display 变量名跟踪查看一个变量,每次停下来都显示它的值(常显示)
undisplay取消对先前设置的那些变量的跟踪
set var修改变量的值
r/run执行程序到第一个断点处
c/continue从当前断点位置执行代码到下个位置的断点
delete breakpoints删除所有断点
delete breakpoints n删除序号为n的断点(该序号不为在某处设断点的行号,而是断点的编号)
disable breakpoints禁用断点(r开始调试时会忽略该断点)
enable breakpoints启用断点
info/i breakpoints参看当前设置了哪些断点
until X行号跳至X行,执行完中间的代码
bt/breaktrace查看各级函数调用及参数
info/i locals查看当前栈帧局部变量的值
quit退出gdb

以上就是gdb的所有操作了,其实本质上跟在Windows下VS中调试是差不多的,只不过VS中是图形化界面更方便我们去观察,我们对比VS中的调试功能去理解gdb是很容易上手的,这块大家多练习练习就没什么问题了。

注:按下回车键默认会执行上一次的命令,所以在需要执行多次一样的指令时我们可以使用回车快速执行!!


本篇文章gdb的讲解就到这里了,如果有任何问题或者疑问欢迎大家评论区随时交流哦orz~🙈🙈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

malloc不出对象

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

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

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

打赏作者

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

抵扣说明:

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

余额充值