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

news2024/10/6 16:31:48

  

  本篇文章会对开发工具: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 b/ b+节点编号——删除断点

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调试💥

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

一、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模式)生成的可执行程序所占空间会更大,如下图:

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

2、2 调试命令

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2、2、7 r——运行

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

三、总结

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

  本篇文章就讲解到这里。感谢观看ovo~ 

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

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

相关文章

mysql数据库的定时备份脚本(docker环境和非docker环境)

一、非docker安装的MySQL MySQL作为一种常用的数据库管理系统,拥有着众多的优秀特性,如高性能、高可靠性、高可扩展性等。然而,在数据备份上,也需要我们进行一定的处理,这样才能保证数据的安全性。因此,在这里我们将介绍如何定时备份MySQL数据库。 我们可以通过MySQL自…

Filebeat+ELK (grok、mutate、mutiline、date)详解

目录 一:FilebeatELK 部署 1.安装 Filebeat 2.设置 filebeat 的主配置文件 3.在 Logstash 组件所在节点上新建一个 Logstash 配置文件 4.访问登录 二:grok 正则捕获插件 1、内置正则表达式调用 2、举例说明 3、自定义表达式…

飞腾开发者平台上线龙蜥专区,为开发者提供硬核技术支持

开源的本质在“人”,开源社区是由一个个做贡献的人构建起来的。近日,飞腾开发者平台联合国内领先的操作系统开源社区——龙蜥社区,推出龙蜥专区,旨在为广大开源爱好者提供社区前沿技术和一线开源文档。 龙蜥专区(专区…

从低效率到高效率,开源大数据技术助力职场办公质的飞跃!

在办公流程化管理越来越流行的今天,如何让职场办公实现高效率飞跃和发展?应用开源大数据技术和低代码技术平台,可以实现这一目的,助力企业从传统的开发模式中剥离出来,实现高效率办公发展。今天,趁着大好契…

天池大赛中药说明书实体识别挑战冠军方案开源(一)方案及模型原理说明

目录 Introduction 导言赛题背景任务描述数据探索分析 核心思路数据预处理Baseline: BERT-CRF优化1:对抗训练优化2:混合精度训练(FP16)优化3:多模型融合优化4:半监督学习其他无明显提升的尝试方案最终线上成…

Linux开发工具【gdb】

Linux开发工具【gdb】 程序的发布方式有两种,debug模式(调试版本)和release模式(发布版本)。Linux下gcc/g出来的二进制程序,默认是release模式。无法保证我们的代码有时候会出现问题,这时就要使…

博客质量分计算——发布 version 5.0

目录 1. 背景2. 质量分 version 5.02.1 version 4 存在问题分析2.2 version 5.0 改进2.3 消融分析2.3.1 正向积极得分消融实验2.3.2 正向累积得分单变量实验2.3.3 非高分文章消融实验 2.4 V4 和 V5.0 版本质量分分布对比 3. 总结4. 参考 1. 背景 博客质量分顾名思义是用于衡量…

最新CMS指纹识别技术

点击星标,即时接收最新推文 本文部分节选于《web安全攻防渗透测试实战指南(第二版)》,即将上架,敬请期待。 指纹识别 1.CMS简介 CMS(Content Management System,内容管理系统&#x…

微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录

数据绑定,事件绑定,事件传参与数据同步 1. 数据绑定1.1. 在data中定义数据1.2. 在wxml中渲染数据 (mustache语法) 2. 事件绑定2.1. 事件2.2. 常用的事件2.3. 事件对象的属性列表2.4. target 和 currentTarget的区别 3. 事件传参与…

YOLOv5/v7 引入渐进特征金字塔网络 AFPN 结构 | 《2023年6月28日最新发表》

包含 yolov5-AFPN.yaml 和yolov7-AFPN.yaml 论文地址:https://arxiv.org/pdf/2306.15988.pdf 代码地址:https://github.com/gyyang23/AFPN 多尺度特征在目标检测任务中对于编码具有尺度变化的对象非常重要。一种常见的多尺度特征提取策略是采用经典的自顶向下和自底向上的特…

53 # 反转二叉树

由于我学习的视频这一节跟上一节重复。没找到该节的学习资源,我自己参考网上实现的,有问题还请指出。 如图,下面实现反转 // 节点 class Node {constructor(element, parent) {this.element element; // 存的数据this.parent parent; // …

Stable Diffusion - ReV Animated v1.2.2 的 2.5D 模型与提示词

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131655644 ReV Animated v1.2.2 模型能够创建类似 2.5D 的图像生成。该模型是 checkpoint 合并,是其他模型的产物,以创建源…

微擎后台getshell,低权限也可以

/web/index.php?csite&aeditor 这个文件可以编辑html,然后前台会解析成php 没测试最新版 比如编辑专题:/web/index.php?csite&aeditor&dopage&multiid0 上架抓包 改html内容为php 复制前台url 访问之 博客原文: 微擎后…

Unity经营类美食小摊小游戏

Unity经营类美食小摊小游戏 挺有意思的小游戏 关卡页面 游戏主页面 有顾客上门 需要给顾客搭配他们想要的美食 会不断地有顾客过来,这个时候就考验手速的时候了,真实模拟经营 服务到位立马有钱 项目地址: https://download.csdn.net/downl…

PHY芯片的使用(三)在U-boot下网络PHY的移植

1、概述 以太网 PHY 驱动移植,主要包括 Linux、 u-boot 及设备树等三个方面标准框架下的移植。本文以裕太8511PHY为例展开说明。一般国产芯片厂商会提供在uboot/linux下PHY的驱动。在uboot/linux的PHY框架是有区别的,这点要注意。 YT8511 PHY 驱动的移…

数学建模学习之发动机最优生产计划模型求解

问题重述 某工厂向用户提供发动机,按合同规定,其交货数量和日期是:第一季末交 40 台第二季末交 60 台,第三季末交 80 台。工厂的最大生产能力为每季 100 台,每季的生产费用是(元),此处 为该季生产发动机的台数。若工…

(33)接收信号强度指示(RSSI)

文章目录 前言 33.1 在你的自动驾驶仪上设置RSSI 33.2 在MissionPlanner的HUD中显示RC接收器的RSSI值 33.3 连接实例 33.4 特殊用例 前言 本文介绍了如何获取自动驾驶仪的接收信号强度指示(RSSI)。 33.1 在你的自动驾驶仪上设置RSSI RSSI 可通过一…

录音转文字怎么操作?这几个好用的录音转文字的方法分享给你

小伙伴们,你们有没有遇到过这样的情况:想要记录一段重要的会议、讲座或者采访的内容,但是在网页上进行音频转文字的效果不好?别担心,随着科技的不断发展,音频转文字的软件可以很好的解决这些问题。这些神奇…

猿人学第二届第一题找修改位置(非答题)

第二届第一题 AES(魔改) Base64(魔改) MD5 第一题不难,想要得到结果直接扣代码就行,但是我想找找到底修改了哪个位置。 MD5( AES (now page) ) AES加密ECB-pksc7 的 key 标准是128位即 16*8(bit) ,这里666yuanrenxue66 是15位不是标准k…

基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的实践应用

查看原文>>>基于”Python”多技术融合在蒸散发与植被总初级生产力估算中的实践应用 熟悉蒸散发ET及其组分(植被蒸腾Ec、土壤蒸发Es、冠层截留Ei)、植被总初级生产力GPP的概念和碳水耦合的基本原理;掌握利用Python与ArcGIS工具进行相…