【Linux从入门到精通】gdb调式技巧大全

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

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb  

  本篇文章会对开发工具:gdb调试器的使用进行讲解。希望本篇文章会对你有所帮助。

目录

一、gdb简单介绍 

二、gdb 调试

2、1 加入调试信息

2、2 调试命令

2、2、1 gdb+可执行程序——进入调式

2、2、2 l+行号/函数名——显示代码

2、2、3 b+行号/函数名——打断点

2、2、4 info+b——查看断点

2、2、5 disable/enable+节点编号——禁用/启用断点

2、2、6 d/ d+节点编号——删除断点

2、2、7 r——运行

2、2、8 n——逐过程、s——逐语句

2、2、9 finish——执行函数返回

2、2、10 until+n——跳转到第n行

2、2、11 c——跳转到下一个断点

2、2、12 p/display+变量名——打印变量值

2、2、13 undisplay+编号——取消变量值显示

2、2、14 bt——查看各级函数调用

2、2、15 set var+变量名=新值——修改变量值

2、2、16 q——退出调试

三、总结


🙋‍♂️ 作者:@Ggggggtm 🙋‍♂️

👀 专栏:Linux从入门到精通  👀

💥 标题:gdb调试💥

 ❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️  

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

一、gdb简单介绍 

  我们平常在Windows下编译器进行编辑、运行、调试代码。例如,使用Visual Studio。Visual Studio 提供了强大的集成开发环境,除了调试工具外,还包括代码编辑器、编译器、版本控制等功能。同时,Visual Studio 提供了图形用户界面(GUI)使得开发人员可以使用可视化的工具和选项进行调试。

  而gdb是一个基于命令行的调试器,主要用于Linux和UNIX系统,支持多种编程语言,如C、C++、Java等。相比 Visual Studio 之下,gdb主要通过命令行界面进行操作,需要开发人员熟悉一些特定的命令和参数。相对来说,gdb调试并没有那么方便。但是在Linux下开发有是必不可少的一个工具。废话不多说,我们直接进入学习。

二、gdb 调试

2、1 加入调试信息

  在Linux下,gcc/g++编译生成的程序是二进制程序,默认是release模式。而release模式下并没有调试信息。我们在编译时,应该加上 -g 选项,这样会编译生成的debug模式。在debug模式下,就加入了调试信息,我们才可使用gdb调试器进行调试。

  其中一个最明显的区别就是,加入调试信息后(debug模式)生成的可执行程序所占空间会更大,如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

   我们也可通过指令:readelf -S 二进制文件 可读取可执行程序的二进制信息。其中我们就可找到有debug_info。如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2 调试命令

2、2、1 gdb+可执行程序——进入调式

  我们可通过:gdb+可执行程序 进入调试模式。例如:gdb myproc_debg。如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、2 l+行号/函数名——显示代码

  我们在调试时,必须需要根据代码进行调试。当我们处于调试状态时,我们可通过:l +行号/函数名 来显示对应区域的代码。具体如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

  我们所需显示的行号、函数名都会位于中间位置出现,且上下共十行gdb也会默认记住我们最近的一条命令,所以后面我们只需要回车就可持续输出显示代码。具体如下:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、3 b+行号/函数名——打断点

  调试的时候,断点必不可少。我们在gdb下,可通过:b+行号/函数名 进行打断点。如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、4 info+b——查看断点

  我们可通过:info b 来查看断点。具体如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

   上图所显示的断点正是我们刚刚所设置的断点。

2、2、5 disable/enable+节点编号——禁用/启用断点

  我们在不用某个断点,且不想删除断点时,可采用:disable+节点编号 对断点禁用。禁用断点后,调试时,就会自动忽略该断点。当然,我们也可通过:enable+节点编号 再次启用该断点。具体如下:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、6 d/ d+节点编号——删除断点

  我们可通过:d+断点编号 对断点进行删除。断点编号是什么呢?我们看如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

  最左边的就是断点的编号。我们现在通过:b 2 对编号2的断点进行删除。结果如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

  当我们只输入 d 时,就是删除所有断点,结果如下:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、7 r——运行

  当我们知道怎么设置断点后,我们就要开始进行运行调试了。我们可通过:r 来开始运行调试。 r是从开始连续而非单步执行程序。当没有断点时,会直接运行完整个程序,结果如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

  当我们设置了断点后,会执行到main函数的第一个断点处。具体如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、8 n——逐过程、s——逐语句

  我们也可通过  n  或  s  进行往下调试。n 是逐过程,s是逐语句,两者是有所区别的。n 是逐过程遇到函数时,并不会进入函数內部,把函数当作一个过程直接运行完函数。s是逐语句遇到函数时,会跳转到函数内部,并且一句一句执行完毕。具体如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、9 finish——执行函数返回

  当我们不小心逐语句进入函数时,我们想快速运行完函数并返回,我们可通过:finish 来完成。具体如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、10 until+n——跳转到第n行

  当我们进入for循环后,假如循环有很多次,我们也并不需要查看循环过程,我们就可通过: until+n 跳转到第n行,跨过循环。具体如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、11 c——跳转到下一个断点

  当我们设置了多个断点,我们可通过:c 快速跳转到下个断点。具体如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、12 p/display+变量名——打印变量值

  我们在调试时, 还需要不断监管变量值的变化。我们可通过:p + 变量名 打印变量值。但是p + 变量名 所打印的变量值只会显示一次。再往下调试,就不会再显示了。而display +变量名 就会在调试的过程中一直显示变量值。我们看如下实例:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、13 undisplay+编号——取消变量值显示

  当我们设置完变量值显示后,我们不需要观察某个变量值了。我们可通过:undisplay+编号 来取消显示变量值。具体如下:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

  上图,左边红框内就是显示变量值的编号。 

2、2、14 bt——查看各级函数调用

  有时候我们也需要查看查看各级函数调用,我们可通过:bt 查看各级函数调用。具体如下图:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、15 set var+变量名=新值——修改变量值

  当我们在调试的时候,大概知道某个变量值会在一定的范围内出错,我们就可通过:set var+变量名=新值 修改变量的值。具体如下:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

2、2、16 q——退出调试

  当我们调试结束时,可以通过:q 推出调试。具体如下:

【Linux从入门到精通】gdb调式技巧大全,Linux从入门到精通,linux,gdb

三、总结

  以上就是gdb下常用的调试命令。上述命令基本上可完成所有调试。我们应该熟练掌握上述命令。不仅仅要记住指令,更是要熟练运用!

  本篇文章就讲解到这里。感谢观看ovo~ 文章来源地址https://www.toymoban.com/news/detail-550277.html

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

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

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

相关文章

  • 【1000个GDB技巧之】如何在远端服务器打开通过vscode动态观测Linux内核实战篇?

    (也可以直接在vscode中配置,忽略) 主要步骤:在~/.ssh/config中添加服务端的host,以便vscode的remote中能够登录 详细配置过程参考兄弟篇文章:ssh config如何配置用host名替代root@1.1.1.1 初次使用remote功能,需要在远端安装一个ssh的代理,需要耗费一定时间。 添加一个调试配置文

    2024年04月16日
    浏览(34)
  • Linux开发工具大全 - 软件包管理器yum | vim编辑器 | gcc/g++编译器 | 自动化构建工具Make/Makefile | gdb调试工具

    目录 Ⅰ.  Linux 软件包管理器 yum 一、yum 背景知识 二、yum 的基本使用 1、查看软件包 2、软件包名称构成 3、安装软件 4、卸载软件 Ⅱ.vim编辑器  一、认识vim 1、vim概念  2、模式及其切换  二、vim使用 1、vim的指令(重要)  命令模式 插入模式 底行模式 2、vim配置 Ⅲ.gcc/g++编

    2024年02月05日
    浏览(49)
  • Linux从入门到精通 --- 1.初始Linux

    1.1 Linux的诞生 1991年由林纳斯 托瓦兹创立并发展至今称为服务器操作系统领域的核心系统。 1.2 Linux系统内核 Linux内核提供了系统的主要功能,甚至是开源免费的,任何人都可查看内核的源代码或是贡献源代码。 1.3 Linux系统发行版 内核无法被用户直接使用,需配合运用程序才

    2024年04月14日
    浏览(40)
  • 【ARM Linux 系统稳定性分析入门及渐进12 -- GDB内存查看命令 “x“(examine)】

    请阅读 【ARM Linux 系统稳定性分析专栏导读】 上篇文章:ARM Linux 系统稳定性分析入门及渐进11 – GDB( print 和 p 的使用| @ 和 ::的使用|ptype|{<type>} <addr> ) examine 是GDB中x命令的全称,用于检查内存中的内容。这个命令非常强大,可以以多种格式显示内存内容。 examine 命令

    2024年02月12日
    浏览(32)
  • Linux常用命令大全(Linux初学者快速入门)

      本文旨在为Linux初学者提供一份Linux常用命令总结。我将介绍一系列常用的命令及其用法,包括文件和目录相关操作、系统管理、进程控制、网络操作等方面。通过学习这些命令,读者将能够更好地管理和操作Linux系统,提高工作效率。   在本文中,我将详细讲解每个命

    2024年02月11日
    浏览(43)
  • 【Linux从入门到精通】Linux常用基础指令(中)

        本篇文章接上篇文章(【Linux从入门到精通】Linux常用基础指令(上))进行详解。本章的指令相对较为重要,使用频率较高,难度相对上篇文章较难,也较为复杂。希望能对你的理解有所帮助。  文章目录 一、mv 指令 1、1 剪切和重命名普通文件  1、2 剪切和重命名目录

    2024年02月02日
    浏览(41)
  • 【Linux从入门到精通】Linux常用基础指令(上)

      本篇文章会对Linux下的常用进行详细解释,并附加实例。通俗易懂,希望会对你有所帮助。根据内容量、内容的难易程度、内容的重要程度,分为上中下篇来讲解。  文章目录 一、什么是Linux的指令呢?  二、Linux下的常用指令 2、1 ls 指令 2、1、1 ls -a 2、1、2 ls -l 2、1、3

    2024年02月01日
    浏览(38)
  • 【Linux从入门到精通】Linux常用基础指令(下)

      本篇文章接上篇文章(【Linux从入门到精通】Linux常用基础指令(上)、【Linux从入门到精通】Linux常用基础指令(中))进行详解。本章的指令相对没有那么常用,难度相对适中。同时也讲述了几个热键。希望能对你的理解有所帮助。  文章目录 一、grep指令 二、zip指令 三

    2024年02月02日
    浏览(42)
  • Linux从入门到精通 --- 2.基本命令入门

    2.1 Linux的目录结构 Linux的目录结构是一个树型结构,没有盘符概念,只有一个根目录/,所有文件都在它下面 2.1.1 路径描述方式 Linux系统中,路径之间的层级关系用:/来表示 Linux系统中,路径之间的层级关系用:来表示 2.2 Linux命令入门 命令行:Linux终端,是一种命令提示符

    2024年04月10日
    浏览(47)
  • ARM Linux 系统稳定性分析入门及渐进 13 -- gdb 反汇编 disassemble 命令详细介绍及举例】

    请阅读 【ARM Linux 系统稳定性分析专栏导读】 在GNU调试器(GDB)中,有许多命令可以帮助我们调试应用程序。 gdb : 这是一个强大的Unix下的程序调试工具。以下是使用gdb的一个简单示例: 在这个例子中,我们启动了 gdb 并将我们的程序 test 作为参数传递。 可执行程序 test 是由

    2024年02月11日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包