Linux——gdb调试器

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

目录

   前言:

二.gdb定义及指令:

如何查看该exe文件是否为Debug版本?两种方法:

三.gdb调试:

        调试指令1:l指令(小写L)

run指令:运行程序,相当于VS中的直接运行不调试——可简化输入r

 break指令:设置断点——指令可简化输入为b ​编辑 

info b指令:查看整个代码所有的断点信息

next指令:单条执行,相当于VS调试工具中的逐过程功能——可简化输入n

step指令:进入函数内部,相当于VS调试工具的逐语句功能——可简化输入s

continue指令:从当前位置的断点处跳到下一个断点处

 finish指令:gdb调试器自动停止调试,并且输出最终的代码执行结果。 

p+变量指令:可以查看当前变量的数值

display +变量指令:可以一直查看该变量的数值

 bt指令:查看当前所处函数栈帧的数据

delete breakpoints: 删除所有断点

delete breakpoints n: 删除序号为n的断点

disable breakpoints: 禁用断点

enable breakpoints: 启用断点


   前言:

         之前我介绍了Linux的编辑器vim,是专门用来编辑各种类型的语言代码。它主要使用的有3种模式,这三种模式涉及到的快捷键,设计方法极大的方便了我们编写代码,但是也只限于编写代码数据。

        然后又介绍了gcc/g++编译器,物如其名,它就是用来编译链接源文件进而生成可执行文件的。

        在Windows操作系统下,我们常用的编辑代码的软件有VS(Visual Studio)编译器,VS是一个基本完整的开发工具集,Visual Studio 旨在成为用于构建应用程序的功能丰富、强大且全面的解决方案,例如在该编译器下有着智能自动完成功能,可以帮助编程人员更快地输入代码;也有内置调试器,里面逐语句逐过程,断电功能帮助开发人员快速调试代码......。也就是说VS是编辑、编译、调试一体化的软件工具。

Linux——gdb调试器

     

二.gdb定义及指令:

       在Linux操作系统中,调试代码又是一个单独的软件,叫gdb调试器。gdb调试器仍是Linux中没有的,需要使用yum指令去下载该软件:

sudo yum install -y gdb

子用户可以使用该指令,若子用户没有sudo权限,只能以root身份去下载

一般来说,GDB主要帮助你完成下面四个方面的功能:

1、按照自定义的方式启动运行需要调试的程序

2、可以使用指定位置和条件表达式的方式来设置断点
3、程序暂停时的值的监视
4、动态改变程序的执行环境 

 下载好后,我们需要回顾一下之前使用gcc/g++编译器,生成的可执行文件指令为:

gcc filename.c -o filename.exe

g++ filename.cpp -o filename.exe 

这两种指令默认的链接方式都是关联动态库,若要使用静态库链接,则需要如下:

gcc filename.c -o filename.exe -static

g++ filename.cpp -o filename.exe -static

 文章来源地址https://www.toymoban.com/news/detail-465562.html

 此外,gcc/g++默认生成的可执行文件类型是:release类型。

什么是release?

        Release 是“发行”的意思,Release 版本就是最终交给用户的程序,编译器会使尽浑身解数对它进行优化,以提高执行效率。Release版本的可执行文件体积会更小一些。

此外,除了Release版本,还有一种Debug版本。

        Debug 是“调试的意思”,Debug版本是程序开发人员用来测试代码的,编译器在生成 Debug 版本的程序时会加入调试辅助信息,并且很少会进行优化。

        根据上面了解的信息,我们若想使用gdb调试器对Debug类型的可执行文件进行调试就需要使用该指令:

gcc -g filename.c -o filename.exe 

                                -g选项是生成可执行文件是否为Debug的关键!

如何查看该exe文件是否为Debug版本?两种方法:

1.看这个文件的大小 (一般同文件的Debug版要比Release版字节大小要大一些):

Linux——gdb调试器

如左图可知:上面的是Debug版本,大小为9888字节;下面的是Release版本,大小为8528字节。

2.通过指令查看: readelf -S 想要查看的文件名 grep debug (可以测试到该文件是否具备测试功能 

Linux——gdb调试器

        上面绿色框中的内容就是Debug版本专属的具有调试功能的文件,这也是Debug版本比Release版本体积大的主要原因!         


三.gdb调试:

试验1:以下为写好的test.c文件代码,将通过该代码文件去调试

Linux——gdb调试器

 

调试指令1:l指令(小写L)

l+数字:显示从代码的某一行开始的内容。

注:默认显示10行内容,再次输入l键按回车便可继续显示后面的内容。

Linux——gdb调试器

 


run指令:运行程序,相当于VS中的直接运行不调试——可简化输入r

Linux——gdb调试器


 break指令:设置断点——指令可简化输入为b  

info b指令:查看整个代码所有的断点信息

Linux——gdb调试器

 


next指令:单条执行,相当于VS调试工具中的逐过程功能——可简化输入n

step指令:进入函数内部,相当于VS调试工具的逐语句功能——可简化输入s

注:使用这两个指令时,只能用于断点处运行时使用。该程序没有设置断点则不能用。

设置好断点后,输入run指令:

gdb会优先进入设置好的第一个断点,它处在第10行,所以进入第10行,这时我们采用n或s指令一步一步的往下执行。

Linux——gdb调试器

因为是循环100次,所以会来回切换语句。


continue指令:从当前位置的断点处跳到下一个断点处

Linux——gdb调试器 

 


 finish指令:gdb调试器自动停止调试,并且输出最终的代码执行结果。 

Linux——gdb调试器


p+变量指令:可以查看当前变量的数值

Linux——gdb调试器 

如上,进入该循环中,执行完该次循环后,使用p+变量指令就能显示当前变量的数值,但只显示一次。进入下一次循环后,还需要再使用p+变量才能再看到变量的数值变化。 

 


display +变量指令:可以一直查看该变量的数值

 Linux——gdb调试器

         如上,每次执行s或n指令进行循环时,gdb都会自动打印每次循环的变量sum和i的值,这个指令比上面的p+变量好很多哟~

display还可以查看变量的地址:

 Linux——gdb调试器

 

undisplay指令:删除之前对display变量的追踪

Linux——gdb调试器

注:undisplay 跟的只能是变量的编号,跟其他没有用,如下:

Linux——gdb调试器 


 

 

 bt指令:查看当前所处函数栈帧的数据

Linux——gdb调试器


 

delete breakpoints: 删除所有断点

delete breakpoints n: 删除序号为n的断点

disable breakpoints: 禁用断点

禁用断点并不会将该断点删掉,而是会让断点失效,断点所在代码所处痕迹仍在。

enable breakpoints: 启用断点

注:上面这些指令,若不加指定断点的编号,默认是包括所有断点的禁用,删除,启用!

 

Linux——gdb调试器 

 删除所有断点:

Linux——gdb调试器

 

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

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

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

相关文章

  • 【Linux】Linux调试器-gdb使用

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

    2024年02月21日
    浏览(50)
  • [Linux] Linux代码调试器 -- gdb

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

    2024年02月05日
    浏览(44)
  • 【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日
    浏览(45)
  • Linux | 调试器GDB的详细教程【纯命令行调试】

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

    2024年02月02日
    浏览(55)
  • 【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

领红包