【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.mzph.cn/news/186235.shtml

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

相关文章

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

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

PyTorch模型训练过程内存泄漏问题解决

近日,在模型训练过程中,发现过一段时间后进程会被kill,观察发现是由于内存泄漏问题造成的。通过逐行代码注释,发现问题在于数据集中的此行代码: info self.data_list[index]这里,self.data_list是dataset…

传统算法:使用 Pygame 实现K-Means 聚类算法

使用 Pygame 模块演示了 K-Means 聚类算法的基本原理。让我逐步解释它的实现: 初始化和基本设置 Pygame 初始化: 通过 pygame.init() 初始化 Pygame。 定义颜色和屏幕大小: 定义了一些颜色常量(WHITE, BLACK, RED, GREEN, BLUE)和屏幕的宽度和高度。 创建 Pygame 窗口:…

[LeetCode] 380. O(1) 时间插入、删除、获取随机元素

380. O(1) 时间插入、删除和获取随机元素 labuladong 题解 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回…

软件测试编写文档模板【附文档模板】

一、测试岗位必备的文档 在一个常规的软件测试流程中,会涉及到测试计划、测试方案、测试用例、测试报告的编写,这些文档也是软件测试岗位必须掌握的文档类型。 1、测试计划 测试计划是组织管理层面的文件,从组织管理的角度对一次测试活动进…

设计模式-创建型模式之工厂设计模式

文章目录 五、工厂方法六、抽象工厂 五、工厂方法 工厂方法,使用工厂可以像使用人员屏蔽对象创建的细节,使用者无需指定具体的类即可使用功能,达到信息隐蔽的作用,便于后期的维护,修改和扩展。 在看工厂方法前还有一…

华纳云:linux中怎么实现apache安装与配置

在 Linux 系统中,安装和配置 Apache HTTP 服务器通常涉及以下步骤。以下以 Ubuntu 为例,其他 Linux 发行版的步骤也大致相同。 步骤 1:安装 Apache 打开终端并运行以下命令: sudo apt update sudo apt install apache2 步骤 …

Java实现堆

堆是一种基于完全二叉树的数据结构,它分为大根堆和小根堆。在大根堆中,每个节点的值都大于或等于其子节点的值;而在小根堆中,每个节点的值都小于或等于其子节点的值。 在Java中,我们可以使用数组来表示堆。由于完全二…

网工内推 | 云计算运维,云相关认证优先,最高30K,带薪年假

01 安畅网络 招聘岗位:云计算运维工程师 职责描述: 1、负责对公有云平台的计算、存储、网络资源等IAAS/SAAS/PAAS层产品组件日常交付部署运维工作,包括调试、配置、维护、监控、优化等工作; 2、负责对操作系统及应用日常运行维护…

MySQL事务详解

MySQL事务详解 数据库事务概述事务是如何实现的事务的ACID特性事务的状态 事务的使用显式事务隐式事务示例自动提交回滚回滚到保存点 事务的隔离级别数据并发问题MySQL 支持的四种隔离级别注意示例 设置隔离级别 事务的常见分类 数据库事务概述 数据库事务是数据库管理系统&am…

《山水间的家》第二季收官,国台酒业解锁中国式浪漫

执笔 | 洪大大 编辑 | 萧 萧 近日,由国台酒特别支持的大型文旅探访节目《山水间的家》第二季在总台央视综合频道(CCTV-1)正式收官。 第二季节目以家庭为视角切入,先后走进江苏、四川、重庆、江西、湖北、贵州、浙江等地24个特色…

Python subprocess模块的高级玩法

Python的subprocess模块是一个非常强大的工具,用于启动和与外部进程进行交互。它允许执行外部命令、访问系统Shell、管道数据、捕获输出和错误信息,以及更多。 本文详细介绍 subprocess模块的各个方面,包括如何执行外部命令、传递参数、处理…

Redis安装和部署详细流程

文章目录 一、Windows环境下安装 Redis1.1 下载Redis1.2 启动redis服务器1.3 启动redis客户端1.4 配置环境变量 参考资料 一、Windows环境下安装 Redis windows系统环境下,redis安装方式主要有: zip压缩包方式 https://redis.io/download 或者 https:/…

MMdetection3.0 问题

MMdetection3.0 问题 希望各位路过的大佬指教一下: 问题: 1、NWPU-VHR-10有标注的数据一共650张,我将其分为了455张训练集,195张验证集。 2、然后使用MMdetection3.0框架中的Faster-rcnn网络进行训练,设置训练参数b…

CityEngine2023 根据shp数据构建三维模型并导入UE5

目录 0 引言1 基本操作2 实践2.1 导入数据(.shp)2.2 构建三维模型2.3 将模型导入UE5 🙋‍♂️ 作者:海码007📜 专栏:CityEngine专栏💥 标题:CityEngine2023 根据shp数据构建三维模型…

Android问题笔记四十九:ViewPager 嵌套 Fragment 扩大滑动响应区域,避免左右滑动过于灵敏问题

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

finebi 新手入门案例

finebi 新手入门案例 连锁超市销售数据分析 步骤: 准备公共数据新建分析主题处理数据在数据中分析在图形中分析数据大屏 准备公共数据 点击公共数据 点击新建文件夹 修改文件夹名称 上传数据 鼠标悬停在文件夹上,右侧出现 鼠标悬停在文件夹上&#x…

git-5

1.GitHub为什么会火? 2.GitHub都有哪些核心功能? 3.怎么快速淘到感兴趣的开源项目 github上面开源项目非常多,为了我们高效率的找到我们想要的资源 根据时间 不进行登录,是没有办法享受到高级搜索中的代码功能的,登录…

maven 基础

maven常用命令 clean &#xff1a;清理 compile&#xff1a;编译 test&#xff1a;测试 package&#xff1a;打包 install&#xff1a;安装 maven坐标书写规范 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</ar…

改变生活,引领未来

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经深入到我们生活的各个角落&#xff0c;成为我们日常生活中不可或缺的一部分。它像一位魔术师&#xff0c;用其独特的“魔法”帮助我们解决问题、提供建议&#xff0c;甚至预测未来。本文将探讨人工智能如…