Linux调试器gdb

这篇具有很好参考价值的文章主要介绍了Linux调试器gdb。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

linux 没有gdb,Linux知识与编程,linux,运维,服务器

本文已收录至《Linux知识与编程》专栏!
作者:ARMCSKGT
演示环境:CentOS 7 

  

linux 没有gdb,Linux知识与编程,linux,运维,服务器


目录

前言

正文

下载gdb

生成可调式文件

进入gdb

gdb常用指令

查看代码 l 

运行程序 r 

断点设置 b 

显示信息 info 

查看断点 info b 

删除断点 d 

禁用断点 disable breakpoints 

启用断点 enable breakpoints 

逐过程调试  n 

逐语句调试 s 

查询变量 p 

查询变量值常显示 display 

取消变量常显示 undisplay 

查询变量类型 ptype 

修改变量值 set var 

逐断点运行 c 

执行到当前函数的return后停下 finish 

跳转到指定代码行 until 

查看调用堆栈 bt 

查询当前栈帧中各变量参数 info locals 

退出gdb指令 quit 

部分指令的简写和全称

最后


前言

前面我们介绍了gcc/g++的使用,我们知道在VS平台下编写代码是可以调试的,调试是我们经常使用的纠错手段,在Linux平台下也有相关的调试工具,那就是gdb,调试是我们必须掌握的技能,没有调试项目的错误就无法快速解决!

linux 没有gdb,Linux知识与编程,linux,运维,服务器


正文

下载gdb


有些纯净Linux系统默认没有gdb,需要手动安装!

指令:

sudo yum -y install gdb 

生成可调式文件


程序的发布方式有两种,debug模式和release模式,Linux工具gcc/g++出来的二进制程序默认是release模式,要使用gdb调试,必须在源代码生成二进制程序的时候加上 -g 选项!


指令:

gcc -g [编译文件]  //g++操作与此相同

 

linux 没有gdb,Linux知识与编程,linux,运维,服务器

linux 没有gdb,Linux知识与编程,linux,运维,服务器

linux 没有gdb,Linux知识与编程,linux,运维,服务器
release模式的二进制程序也可以进入gdb,但是只能运行,不能查询任何参数信息!

进入gdb


指令:

gdb [可执行程序]

linux 没有gdb,Linux知识与编程,linux,运维,服务器
gdb界面

gdb常用指令


在gdb中,输入一个指令后,下次不输入指令回车执行的是上一条指令,所以调试时如果接下来将长时间使用一条指令,则一直回车即可!


查看代码

l           //查看第一行到第十行的代码(第一次执行时)
l [行号]    //查看程序从该行开始的前后五行代码(如果前面没有代码则向后显示十行)
l [函数名]  //显示该函数位置的前后五行代码(共十行)

说明:gdb在执行l指令后,再次回车会展示后十行代码!

linux 没有gdb,Linux知识与编程,linux,运维,服务器
选择行号1然后回车显示后10行代码,再次回车继续显示!
linux 没有gdb,Linux知识与编程,linux,运维,服务器
如果选择中间行,则会展示前后五行(共十行)
linux 没有gdb,Linux知识与编程,linux,运维,服务器
gdb也可以显示代码中某函数的前后代码(默认也是前后五行)

运行程序

r  //启动程序(有断点则运行到第一个断点处停下,没有则直接运行到结束)
linux 没有gdb,Linux知识与编程,linux,运维,服务器
在gdb中r指令相当于VS下的快捷键F5

 说明:一般使用gdb都是先展示代码,然后运行程序,这样可以对照代码检查运行结果,在gdb中对于死循环的程序仍然可以使用CTRL+c退出程序,但不会退出gdb!


断点设置

b [行号]    //在该行打下断点
b [函数名]  //在该函数行打下断点

linux 没有gdb,Linux知识与编程,linux,运维,服务器

 注意:对函数名打断点,断点会落在该函数执行的第一条语句!


显示信息 info 

info [gdb指令]  //部分指令可以通过info查看详细信息
i [gdb指令] //简写为i
linux 没有gdb,Linux知识与编程,linux,运维,服务器
info可以查看相关的指令信息,其中最常用的是breakpoints选项(简写为b)

 说明:直接输入info指令会显示该指令的所有可操作选项!


查看断点 info b 

//查看所有断点信息
info b //简写
info breakpoints
info break

在gdb中info b指令是经常使用的查看断点的指令,当然info也不止于此!

linux 没有gdb,Linux知识与编程,linux,运维,服务器
通过info b查看断点的详细信息!

在断点信息中我们会发现有Num一行编号,这个编号是让我们更好的对断点进行区分,当我们删除1号断点再次添加断点时,新断点为3号,断点顺序并未修改!当我们退出gdb时所有断点信息才会失效!

  

而且这些编号在进行关于断点的其他操作时,也会用到,例如删除断点需要这些编号指定

linux 没有gdb,Linux知识与编程,linux,运维,服务器


删除断点 d 

d [断点编号]  //删除该编号断点
d //删除所有断点
d breakponits //删除所有断点

linux 没有gdb,Linux知识与编程,linux,运维,服务器


禁用断点 disable breakpoints 

disable breakpoints [断点编号]  

说明:有时候在进行大项目测试时,我们会打许多断点,我们不想让程序运行到某就停下断点,但是也不想删除断点,这时可以禁用断点!

linux 没有gdb,Linux知识与编程,linux,运维,服务器
当断点被禁用后,程序运行到该行时就不会停下了!

启用断点 enable breakpoints 

enable breakpoints [断点编号]

说明:当我们想使用被禁用的断点时,使用该指令可以启用断点!

linux 没有gdb,Linux知识与编程,linux,运维,服务器


逐过程调试  n 

n //从断点处开始进行逐过程调试

逐过程调试不会进入函数,直接返回函数执行完的结果!

linux 没有gdb,Linux知识与编程,linux,运维,服务器
调试时执行的函数代码会显示代码行号!

逐语句调试

s  //从断点处开始逐语句调试

逐语句调试会进入函数中,将每一条语句运行展示!

linux 没有gdb,Linux知识与编程,linux,运维,服务器
调试时的每一条语句都会显示其所在代码中的行号!

查询变量

p [变量]  //查看变量值
p(变量)
print [变量]
print(变量)

查看变量的方式可以简写,也可以通过括号将需要查询的变量括起来! 

linux 没有gdb,Linux知识与编程,linux,运维,服务器


查询变量值常显示 display 

display [变量]  //让变量值随查询的运行一直更新显示

添加常显示后,程序每走一步(或一句)都会显示变量的常显示变量的变化! 

linux 没有gdb,Linux知识与编程,linux,运维,服务器
当变量常显示后每执行一条语句就会显示变量 i 的变化情况

说明:常显示中的变量前的编号与取消该变量的显示操作相关!常显示列表中的编号只会随着添加越来越大,并不会一直以1为开始!


取消变量常显示 undisplay 

undisplay [常显示列表编号]  //取消变量在列表中的常显示

说明:取消常显示并不是指定变量,而是指定其在常显示中的编号!因为在C++中,不同类和不同遇可能有相同的变量,此时会混淆!

linux 没有gdb,Linux知识与编程,linux,运维,服务器


查询变量类型 ptype 

ptype [变量]  

因为我们查询变量值时只能获取变量的值,如果需要获取变量的类型则可以使用这个指令!

linux 没有gdb,Linux知识与编程,linux,运维,服务器


修改变量值 set var 

set var [变量] = [设置的值]

在程序运行时可能我们想一次性迭代到某数值,使用set var就能完成!

linux 没有gdb,Linux知识与编程,linux,运维,服务器


逐断点运行

c  //逐断点按顺序跳转执行

当我们想在断点之间运行时,直接使用该指令即可,相当于VS的F5快捷键!

linux 没有gdb,Linux知识与编程,linux,运维,服务器
在执行该gdb指令前需要r指令让程序运行!

执行到当前函数的return后停下 finish 

finish  //让程序执行return语句后停下

指令要求:必须在有返回值的函数中运行且必须让程序先运行起来!

linux 没有gdb,Linux知识与编程,linux,运维,服务器


跳转到指定代码行 until 

until [代码行号]  //让执行位置跳转到指定行

当我们想要去某一条语句查看运行情况时可以使用此指令跳转!

linux 没有gdb,Linux知识与编程,linux,运维,服务器

说明:如果前面有未执行的代码该指令会运行到指定代码行号然后停下,如果是跳转到执行过的代码,则会从该行开始继续执行!


查看调用堆栈 bt 

bt  //查看函数调用,以栈的顺序显示

当我们需要查看函数相互之间的调用时可以使用该指令!该指令需要先运行程序才能查看,因为程序运行时会先为函数建立栈帧,没有运行程序就没有栈帧!

linux 没有gdb,Linux知识与编程,linux,运维,服务器


查询当前栈帧中各变量参数 info locals 

info locals

当我们正在某一函数中调试时,通过该指令可以查看该函数中所有变量的值!

linux 没有gdb,Linux知识与编程,linux,运维,服务器


退出gdb指令 quit 

quit  //或使用 CTRL+d 也可以!
q     //也可以使用简写形式

退出gdb只需要输入q(quit)即可,或者使用快捷键CTRL+d,如果有程序正在调试没有退出,则gdb会先询问!


部分指令的简写和全称

l list
r run

n

next
s step
b break
i b info break
f finish
p print
c continue
d delete breakpoints
u until
bt  breaktrace
q quit

最后

Linux调试器gdb的介绍到这里就结束了,相信gdb的学习可以助力你在Linux相同上更顺利的构建大型工程,从容的面对各种bug,虽然在使用上与VS还有些差异,但是配合Linux上的其他工具一定可以使效率有一定的提升!

本次Linux调试器gdb的基本知识就介绍到这里啦,希望能够尽可能帮助到大家。

如果文章中有瑕疵,还请各位大佬细心点评和留言,我将立即修补错误,谢谢!

linux 没有gdb,Linux知识与编程,linux,运维,服务器

 🌟其他文章阅读推荐🌟

Linux编辑器vim-CSDN博客

Linux 编译器 gcc/g++-CSDN博客

Linux项目自动化构建工具make/Makefile-CSDN博客

🌹欢迎读者多多浏览多多支持!🌹文章来源地址https://www.toymoban.com/news/detail-624333.html

到了这里,关于Linux调试器gdb的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Linux] Linux代码调试器 -- gdb

    1、程序的发布方式有两种,debug模式和release模式 2、Linux gcc/g++出来的二进制程序,默认是release模式 3、要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 我们先来写一段C语言代码: 这里我们正常再编写一个Makefile文件,用于自动化构建,我们要还是正常的编

    2024年02月05日
    浏览(43)
  • 【Linux】Linux调试器-gdb使用

    程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 退出:  调试命令: list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某

    2024年02月21日
    浏览(49)
  • 【Linux】gdb调试器的使用

    文章目录 一、gdb简介 二、调试前的准备 1、生成调试文件 2、启动 gdb  三、gdb 使用方法  1、查看源代码 2、设置 / 查看断点(多种方式设置断点) 方法一 方法二 方法三 3、run  4、删除断点、断点无效 5、逐过程调试(以函数为单位) 6、逐语句调试 7、查看调用链 8、查看变

    2024年02月02日
    浏览(52)
  • 【Linux】——调试器-gdb的使用

    序言: 本期,我将带领大家学习的关于linux下的 调试器gdb 的使用,废话不多说跟着我一起去看看吧!! 目录 前言 (一)背景介绍 1、debug模式和release模式 2、为什么Release不能调试但DeBug可以调试 3、初步见识 1️⃣readelf (二)调试代码 1、命名大全 2、具体演示 0️⃣行号显

    2024年02月07日
    浏览(41)
  • 【Linux】调试器:gdb 的基本使用

    gdb 全称 GNU symbolic debugger,是 Linux 下常用的程序调试器。 调试器的核心工作,主要是为了定位问题。废话不多说。 gdb 的安装 另外: gcc、g++ 默认形成的版本是 release,不是 debug 版本!所以想要在 Linux 下调试程序,需要在 Makefile 文件 中,添加 -g 选项 指定以 dubug 方式编译程

    2024年02月16日
    浏览(44)
  • Linux | 调试器GDB的详细教程【纯命令行调试】

    学习了【vim】知道了如何 编辑 一个代码文本 学习了【gcc】知道了如何 编译 一个代码文本 学习了【make/Makefile】知道了如何 自动化构建 一个代码文本 但是如何对一段代码去进行调试呢,此时就要使用到 Linux下的调试器gdb 了。对于这个调试器来说,不像是VS中那样的图形化界

    2024年02月02日
    浏览(54)
  • 【Linux】Linux下调试器gdb的使用

    👑作者主页:@安 度 因 🏠学习社区:StackFrame 📖专栏链接:Linux 如果无聊的话,就来逛逛 我的博客栈

    2024年02月19日
    浏览(41)
  • Linux开发工具之调试器gdb

    程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项   所以一份代码若要被调试必须是debug模式,但是在linux下我们编译代码的时候默认为release模式,要想让我们的代码

    2024年02月07日
    浏览(46)
  • Linux:gdb调试器的解析+使用(超详细版)

    程序的发布方式有两种,debug模式和release模式 debug模式:可以被调试; release模式:不可以被调试。 为什么需要debuy和release这两个模式呢? 答:程序员在开发的时候需要去调试代码,所以需要debuy模式,而用户一般不懂这些代码的调试不需要debuy模式,只需要快速的下载和安

    2024年02月05日
    浏览(49)
  • [linux开发工具]小程序--进度条、调试器 - gdb

    📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 第一种情况 执行结果如下: 可以看到程序先执行printf再执行sleep 第二种情况 执行结果如下: 在这里

    2024年02月22日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包