Linux:gdb调试器的解析+使用(超详细版)

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

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

Linux调试器-gdb

背景:

程序的发布方式有两种,debug模式和release模式

debug模式:可以被调试;

release模式:不可以被调试。

为什么需要debuy和release这两个模式呢?

答:程序员在开发的时候需要去调试代码,所以需要debuy模式,而用户一般不懂这些代码的调试不需要debuy模式,只需要快速的下载和安装,所以release把调试信息的部分去掉了,体积也得到了减小,更适合给用户使用(测试环节也是使用release模式)。

Linux gcc/g++出来的二进制程序,1.默认是release模式,2.默认是动态链接。
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项(生成debug模式)。

此时:我们还需要知道调试究竟是在干什么?

        1.找到问题(查找、范围查找、局部逐行查找……)

        2.解决问题(根据上下文代码逻辑)

实践:

首先:如果没有安装gdb:yum install -y gdb

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项(生成debug模式),这里我们为了方便将执行放入到makefile中(自动构建)。

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

此时再写一个用于调试的程序:test.c

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

基于上面得到kezhix程序mytest后还可以查看可执行程序的格式:
readelf -S mytest | grep -i debuy

调试的指令:

命令 解析
ctrl + d 或 quit 调试命令 gdb binFile 退出
list( l )  行号 显示binFile源代码,接着上次的位置往下列,每次列10行。
list( l ) 函数名 列出某个函数的源代码。
run( r ) 运行程序。
next( n ) 单条执行。
step( s ) 进入函数体调用
break(b) 行号 在某一行设置断点
break(b) 函数名 在某个函数开头设置断点
info break( b ) 查看断点信息。
finish 执行到当前函数返回,然后停下来等待命令
print( p )  打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量 打印变量值(显示一次)。
set var 修改变量的值
continue( c ) 从当前位置开始连续而非单步执行程序
delete breakpoints 删除所有断点
delete breakpoints n 删除序号为n的断点
disable breakpoints 禁用断点
enable breakpoints 启用断点
info(或i) breakpoints 参看当前设置了哪些断点
display 变量名 跟踪查看一个变量,每次停下来都显示它的值
undisplay 序号 取消对先前序号设置的那些变量的跟踪
until X行号 运行至X行
breaktrace(或bt) 查看各级函数调用及参数
info( i )  locals 查看当前栈帧局部变量的值
quit 退出gdb

调试指令的使用:

有了上面的基础,我们就可以来调试程序了:

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

list/l  行号:显示binFile源代码,接着上次的位置往下列,每次列10行。回车键实现下翻!

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

r或run:运行程序。相当于VS的F5!

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

break(b) 行号:在某一行设置断点,相当于VS的F9!

info break :查看断点信息。这里Linux引入了断点编号的概念,即:给断点设置编号,开启/关闭断点需要使用对应的断点编号!

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

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

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

disable breakpoints:禁用断点
enable breakpoints:启用断点

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

n 或 next:单条执行。相当于VS的F10!
s或step:进入函数调用。相当于V的F11!

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

display 变量名:跟踪查看一个变量,每次停下来都显示它的值。
undisplay:取消对先前设置的那些变量的跟踪。

需要注意的是这里也使用了,序号的概念,取消跟踪需要输入对应的序号!

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

continue(或c):从当前位置开始连续而非单步执行程序,直接从一个断点到下一个断点。

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

breaktrace(或bt):查看各级函数调用及参数,现在所属调用的堆栈。

如下:在test.c的main()主函数的第22行!

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

finish:执行到当前函数返回,然后停下来等待命令。

需要注意:finish在主函数中使用是无效的,必须在调用的函数中使用才有效!

如下:因为在for循环设置了断点所以有一次的停留,回车后就直接运行到函数结束,并回到主函数的下一个断点!

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

until X行号:跳至X行.

需要注意:until跳转无法越过断点,还是会在断点停留,可以回车跳过断点。

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

set var name=value:修改一个变量的内容(不需要改代码,进行多分支测试!)

Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习

        当我们在gdb(调试)时输入一条指令,是会自动记录最近一条指令的,所以我们想继续上一条指令操作时就可以<回车>来继续执行。

 以上就是个人学习的见解和学习过程的解析,欢迎各位大佬在评论区探讨,交流!

如果本篇对你有帮助的话,三连支持一下吧。

感谢大佬们的三连! 感谢大佬们的三连! 感谢大佬们的三连!

                                              Linux:gdb调试器的解析+使用(超详细版),Linux,linux,运维,服务器,学习,深度学习文章来源地址https://www.toymoban.com/news/detail-754123.html

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

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

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

相关文章

  • 【Linux】Linux下调试器gdb的使用

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

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

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

    2024年02月16日
    浏览(45)
  • 『Linux从入门到精通』第 ⑪ 期 - Linux调试器——gdb使用详解

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 C语言初阶专栏 ,本专栏主要内容为本专栏主要内容为Linux的系统性学习,专为小白打造的文章专栏。 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 C++系列 、 数据结构

    2024年02月02日
    浏览(41)
  • 《Linux从练气到飞升》No.09 Linux调试器-gdb使用

    🕺作者: 主页 我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇 码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!! 当我们在 vscode 等 IDE 上编写代码出错时,通常会

    2024年02月13日
    浏览(41)
  • Linux之基础开发工具gdb调试器的使用(三)

    📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 yum install -y gdb 程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式,release模式下无法调试 要使用gd

    2024年02月05日
    浏览(50)
  • 【Linux】编译器-gcc/g++与调试器-gdb的使用

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.gcc/g++语法 2.gcc的使用及编译器是如何\\\"翻译\\\"代码的? (1)预处理 (2)编译 (3)汇编

    2024年02月04日
    浏览(57)
  • 【Linux】自动化构建工具--make/Makefile&&调试器--gdb的使用

    一个工程的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。 makefile带来的好处就是– “自动化编译” ,一旦写好,就只

    2024年02月08日
    浏览(48)
  • 【Linux】编译器gcc和g++与调试器gdb的使用

    我们知道,一个程序被运行起来之后需要经历四个阶段然后才变成一个可执行的程序,他们分别为:预处理,编译,汇编和链接。下面我们将介绍这四个阶段的操作,测试代码如下: 1.1 预处理 预处理也叫预编译,程序在预处理阶段会完成如下操作: 展开头文件,将头文件中

    2024年02月07日
    浏览(43)
  • Linux——gdb调试器

    目录    前言: 二.gdb定义及指令: 如何查看该exe文件是否为Debug版本?两种方法: 三.gdb调试:         调试指令1:l指令(小写L) run指令:运行程序,相当于VS中的直接运行不调试——可简化输入r  break指令:设置断点——指令可简化输入为b ​编辑  info b指令:查看整个代码

    2024年02月07日
    浏览(37)
  • Linux--调试器:gdb

    gcc与g++默认动态链接形成的可执行程序(比如a.out)是 release 版本,不可调试!!! 如何搞成debug可调试版本? 查看可执行程序存储了哪些内存空间:   调试语法:

    2024年02月13日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包