【Linux篇】gdb调试器的使用

gdb调试器之常用指令

  • 前言
  • 一 . 程序的两种发布模式
  • 二 . gdb调试器的使用
    • 1> 调用调试器进入调试环境
    • 2 > 退出调试
    • 3 > gdb中常用调试指令

前言

  • gdb作为Linux下一款好用且强队的调试工具, 支持对 C C++ go Java 等多种高级编程语言进行调试.
  • 对于在Linux下进行编程的程序员来说, 会使用gdb来对代码进行调试是不可或缺的素养

一 . 程序的两种发布模式

程序在进行发布时一般有两种版本 :

  • debug版本 :
    • debug版本的可执行程序会添加调试信息, 因此可以被调试
    • 开发软件的程序员进行测试的版本
    • 体即较大
  • release版本 :
    • release版本的可执行程序会删去调试信息, 不可以被调试
    • 是面向用户, 用户所使用的版本
    • 体即较小

我们对于能够对程序进行调试, 便是因为该程序为debug版本

二 . gdb调试器的使用

对于debug版本的程序, 如何使用gdb进行各种调试呢? 请看下文

1> 调用调试器进入调试环境

gdb filename
// 在shell命令行中输入该指令后, 会进入这样的命令行(gdb)         // 这是一个命令行 , (gdb) 相当于命令行提示符示例如下: gdb ../test01_dir/main.c      // 调试位于该相对路径下的 main,c文件

在这里插入图片描述

2 > 退出调试

(gdb) quit    //(gdb)这个命令行中, 输入 quit 敲击回车就可以退出调试环境

3 > gdb中常用调试指令

(gdb) l         //查看被调试代码          // l n         显示指定行之后的代码    // l 函数名     查看指定函数的代码(gdb) r         // 让程序调试进行          // 相当于 VS中的 F5   (gdb) b         // 在指定位置设置断点       // b n            在第n行设置断点   // b sum          在sum函数的入口处设置断点  // b filename:n   在指定文件的指定行设置断点// b filename:sum 在指定文件的指定函数的入口处设置断点(gdb) info b    // 查看设置的所有断点, gdb会按照断点设置的先后对其进行排序显示 // 按顺序显示断点的类型, 状态(开启或关闭), 地址等  (gdb) d         // 删除指定位置的断点     // d n  删除编号为n的断点 (gdb) disable   // 将指定断点的状态设置为关闭 (y - yes 代表开启, n - no代表关闭)        // disable n  将编号为n的断点状态设置为 n (关闭)                                                                                (gdb) enable    //开启指定断点        // enable n,将编号为n的断点状态设置为 y (开启)(gdb) n        // 逐过程进行调试          // 相当于VS中的 F10 (gdb) s        // 逐语句进行调试          // 相当于VS中的 F11   (gdb) p        // 查看变量                // p i 查看变量i的值    // p &i 查看变量i的地址      (gdb) display   // 常显示变量 (- 在这里是一直的意思)       // display i  在调试的过程中一直显示变量i的值    // display &i 在调试的过程中一直显示变量i的地址(gdb) undisplay // 取消变量的常显示    // undisplay n        取消编号为n的变量的常显示     (gdb) c         // 按断点运行               // 调试运行至下一个断点,然后停止// 可以用来按范围查找bug  (gdb) bt        // 查看调用堆栈, 常用于调试函数             // bt sum 查看sum函数的调用堆栈(gdb) finish    // 以函数块的方式进行调试// 从当前所在函数的当前位置开始调试运行, 到当前函数运行结束停止调试            (gdb) untill    // untill n  调试运行至第n行停止 // 属于小范围内调试    (gdb) set var i=0   // 将变量的值设置为指定值, 即使程序中该变量不为这个值// 这是为了查看在特定情况下程序的运行状况(gdb) if(...)       // 设置条件断点注意 :  断点的编号是根据断点的设置顺序来编号的。 (编号在前不一定先运行)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/219459.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5轻量化改进之MobileNetv3

目录 一、原理 二、代码 三、应用到YOLOv5 一、原理 我们提出了基于互补搜索技术和新颖架构设计相结合的下一代mobilenet。MobileNetV3通过硬件网络架构搜索(NAS)和NetAdapt算法的结合来调整到移动电话cpu,然后通过新的架构进步进行改进。本文开始探索自动搜索算法和网络设计…

烧烤店点餐外卖配送管理小程序作用如何

烧烤是人们爱吃的食品之一,尤其到了晚上商业小吃街,烧烤店里往往是坐满了人,甚至还有排队的,从业商家众多,足可见该餐饮细分领域在市场中的欢迎程度。 而在实际经营中,烧烤店经营痛点也不小。 随着互联网…

线性分组码的奇偶校验矩阵均匀性分析

回顾信道编解码知识,我们知道信道编码要求编码具有检纠错能力,作为FEC(forward error correction)前向纠错编码的一类,线性分组码表示校验位与信息位的关系能够线性表示。 在这篇文章中,并不是要讨论信道编…

vue3+ts 兄弟组件之间传值

父级&#xff1a; <template><div><!-- <A on-click"getFlag"></A><B :flag"Flag"></B> --><A></A><B></B></div> </template><script setup lang"ts"> i…

vivado产生报告阅读分析23-时序路径特性报告

时序路径特性报告 下图显示了在“ Timing Mode ” &#xff08; 时序模式 &#xff09; 下运行“ Report Design Analysis ” &#xff08; 设计分析报告 &#xff09; 的输出示例 &#xff0c; 其中显示了设计中 10 条最差建立路径的路径特性。在 Vivado IDE 中选中“ Repo…

飞翔的鸟小游戏

第一步是创建项目 项目名自拟 第二步创建个包名 来规范class 再创建一个包 来存储照片 如下&#xff1a; package game; import java.awt.*; import javax.swing.*; import javax.imageio.ImageIO;public class Bird {Image image;int x,y;int width,height;int size;doub…

C++ day36 贪心算法 无重叠区间 划分字母区间 合并区间

题目1&#xff1a;435 无重叠区间 题目链接&#xff1a;无重叠区间 对题目的理解 移除数组中的元素&#xff0c;使得区间互不重叠&#xff0c;保证移除的元素数量最少&#xff0c;数组中至少包含一个元素 贪心算法 局部最优&#xff0c;使得重叠区间的个数最大&#xff0c…

开卷翻到毒蘑菇?浅谈大模型检索增强(RAG)的鲁棒性

©PaperWeekly 原创 作者 | 陈思硕 单位 | 北京大学 研究方向 | 自然语言处理 很久没有写论文 notes 了&#xff0c;近期因为参与对检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;范式鲁棒性的研究&#xff0c;注意到了近两个月来社区中涌现了…

嵌入式硬件电路·电平

目录 1. 电平的概念 1.1 高电平 1.2 低电平 2. 电平的使用场景 2.1 高电平使能 2.2 低电平使能 2.3 失能 1. 电平的概念 电平是指电信号电压的大小或高低状态。在数字电子学中&#xff0c;电平有两种状态&#xff0c;高电平和低电平&#xff0c;用来表示二进制中…

PropertyTokenizer属性解析器实现,So Easy

PropertyTokenizer是Mybatis中的属性解析器&#xff0c;其主要实现原理如下&#xff1a; public PropertyTokenizer(String fullname) {// 判断是否以“.”分隔int delim fullname.indexOf(.);if (delim > -1) {name fullname.substring(0, delim);children fullname.su…

智能优化算法应用:基于麻雀算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于麻雀算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于麻雀算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.麻雀算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

C语言编译过程再解析

多年以前,分析过编译过程,并写了一篇博客,现在对编译过程有了更广阔的认识,记录在此 编译过程 中的 链接与 编译 编译过程分为1. 预处理2. 编译3. 汇编4. 链接其中有 2个过程比较特殊,1. 编译2. 链接对于C程序来说,链接分为提前链接(静态链接)对应下图第1行运行时链接(动态链…