Linux操作系统----gdb调试工具(配实操图)

news2024/11/17 11:52:31

绪论​
“不用滞留采花保存,只管往前走去,一路上百花自会盛开。 ——泰戈尔”。本章是Linux工具篇的最后一章。gdb调试工具是我们日常工作中需要掌握的一项重要技能我们需要基本的掌握release和debug的区别以及gdb的调试方法的指令。下一章我们将进入真正的进入到Linux操作系统敬请期待(早关注不迷路)。请添加图片描述话不多说安全带系好,发车啦(建议电脑观看)。 思维导图:


1.debug模式和release模式

在了解debug和release之前,先对公司在要开发某个项目时所要经历的过程有个大概的了解:

  1. 确立项目
  2. 搭配资源(开发人员、测试人员、项目经理(负责项目进程)、产品经理(该产品的主要负责人)…)
  3. 开始开发
  4. 进行测试
  5. 上线(灰度上线(内测阶段)-> 正式上线)
    1. 运营人员(项目的推广)
    2. 运维人员(解决出现的bug)

在上面阶段中,我们作为开发人员,我们在开发编程过程中最终编写好的程序就是以debug模式,而注意的是最终交给测试人员时是以release模式的。
原因在于(也就是debug、release模式是什么):

  1. debug模式下才能进行代码的调试,因其中包含许多调试信息(导致多占用一些空间)。
  2. 所以反之release模式下就没有了调试信息这样就能节约一定的空间(也就不能调试)。
  3. release模式下还对代码会有许多的优化让其大小和运行速度上都到最优的状态(如:删除未使用的代码、内联函数等),所以我们普通用户用的就是release版本,所以测试人员也应该测试该版本。

所以当测试人员测试处出现bug后就会再次交还给开发人员来修复,3 4阶段不断重复,最终测试完成才上线。
注意:我们在使用gcc/g++进行编译时,默认生成的是以release模式的、vim使用时默认是命令模式

2. gdb

gdb也就是Linux下的一个用来调试的工具,其就是通过指令的方式来进行一系列调试工作(打断点、查看变量信息、…)
其中注意的是:因为gcc默认生成的是release的所以,我们需要在常规用gcc生成可执行程序(gcc -o $@ $^)时,多加个附加指令 -g

2.1为什么debug模式的文件大小 > release模式的文件大小

  1. debug模式下会生成的可执行程序会添加调试信息,反之release模式下没有
    证明:下面我们生成两个模式的可执行程序进行观察在这里插入图片描述
    注意生成debug模式的需要对gcc添加附加指令 -g
    在这里插入图片描述
    我们用Makefile生成了两种模式的可执行程序,可以发现debug模式下的文件的大小要大于release模式下的(下图第五列表示文件大小!),其中就是因为有调试信息导致的。在这里插入图片描述

可能上面的不够有说服力,那么我们用更加显著的证据来证明:
因为我们在Linux下形成的可执行程序格式转换成二进制的方法就是通过ELF格式来完成的,它包含许多可执行程序的信息,代码的开始、结束、代码和数据的区分、入口地址、程序的加载…
下面一个新指令readelf -S 可执行程序(就能查看一个可执行程序的二进制构成)在这里插入图片描述
那么我们要查看这个程序中是否含有调试信息,我们就能通过grep过滤器去找,readelf -S 可执行程序 | grep -i debug(-i 忽略大小写 , debug调试信息名)在这里插入图片描述
从上图中就能发现release模式下就没有debug信息,而debug模式下则过滤出来了。

2.2gdb的使用指令

  1. 运行gdb:gdb 可执行程序
  2. 退出gdb:quit在这里插入图片描述
  3. 查看代码:l(list)
    1. 默认情况下他会自动显示重要的部分在这里插入图片描述
    2. 指定开始的位置用:l 开始的行号(但只会显示部分)
    3. 查看某个函数:l 函数名在这里插入图片描述
    4. 再按回车就会继续往下显示,当显示完成后就无法再按(因为gdb会记录历史命令,按回车就是再次执行上面的命令在这里插入图片描述
  4. 执行代码(相当于直接VS下的F5)进行调试:r(run)在这里插入图片描述
    1. 若有断点就命中,反之则直接执行完了
  5. 在某行打断点:b 行号(break point)
    1. 若存在可执行程序中有多个源文件可以用 b 源文件名 : 行号
    2. 还可以直接对函数进行打断点:b 函数名 ,打到函数入口处(第一条指令)
  6. 查看打过的断点:info b
    1. 每个断点都有自己的编号NUM在这里插入图片描述
    2. 显示当前局部域的全部变量:info local在这里插入图片描述
  7. 删除断点:d 断点编号
    1. 注意在gdb运行期间,删除后的断点编号不会被后面新增的断点覆盖(也就是后面的断点的编号是不断增加的,不会覆盖之前的)在这里插入图片描述
  8. 关闭断点、启用断点:disable 断点编码、enable 断点编码
    1. 在info信息中的Enb信息代表着断点是否启用其中:y表示启用(yes)、n表示关闭(no)
  9. 逐语句(相当于VS中的F11,单步往后走碰到函数会进入):s
  10. 逐过程(相当于VS中的F10,若有函数并不会进入内部) :n在这里插入图片描述
  11. 查看变量(监视器):p变量名在这里插入图片描述
  12. 常显示某个变量(用p只能查看当前,display可以一直关注其变化):display 变量名在这里插入图片描述
    1. 若要删除某个常显示的变量用 undisplay 编号(display时前面会给变量添加编号)在这里插入图片描述
  13. 直接跳到某行:until 行号(运行到指定行)在这里插入图片描述
  14. 直接运行完当前所在函数finish(跑到当前函数的结尾)在这里插入图片描述
  15. 直接运行到下一个断点:c在这里插入图片描述
  16. 查看调用的堆栈:bt
  17. 直接在gdb中改变变量的值:set var 变量名 = 改后的值
  18. 当退出gdb后,打过的断点信息就会被移除。

本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量Linux细致内容,早关注不迷路。

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

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

相关文章

探索设计模式的魅力:“感受单例模式的力量与神秘” - 掌握编程的王牌技巧

在软件开发的赛场上,单例模式以其独特的魅力长期占据着重要的地位。作为设计模式中的一员,它在整个软件工程的棋盘上扮演着关键性角色。本文将带你深入探索单例模式的神秘面纱,从历史渊源到现代应用,从基础实现到高级技巧&#xf…

数据结构实验6:图的应用

目录 一、实验目的 1. 邻接矩阵 2. 邻接矩阵表示图的结构定义 3. 图的初始化 4. 边的添加 5. 边的删除 6. Dijkstra算法 三、实验内容 实验内容 代码 截图 分析 一、实验目的 1.掌握图的邻接矩阵的存储定义; 2.掌握图的最短路径…

Idea 开发环境不断切换git代码分支导致冲掉别人代码

问题分析 使用git reflog查看执行命令,以下是发生事故的切换和提交动作 46f72622e1 HEAD{41}: commit: feat: 【Sales - 6.3】小程序端不登录也可以录入客户线索 c5e7d9f6e1 HEAD{42}: fetch origin feature/20240102_Sales6.3_xingang:feature/20240102_Sales6.3…

基于 IDEA 进行 Maven 依赖管理

一、依赖管理概念 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等…

旧衣物回收小程序搭建,旧衣回收利润有多高?

在当下人们的生活水平日益提高,淘汰的旧衣物逐渐增加。面对这些旧衣物,很多人舍不得丢弃,既浪费又污染环境,只能常年堆积在家里。为了解决这一问题,旧衣回收成为了大众的选择。大家能够将淘汰的衣物进行回收&#xff0…

Java-NIO篇章(4)——Selector选择器详解

Selector介绍 选择器(Selector)是什么呢?选择器和通道的关系又是什么?这里详细说明,假设不用选择器,那么一个客户端请求数据传输那就需要建立一个连接,为了避免线程阻塞,那么每个客…

微分方程(1)微分方程的历史

总之就是学习吧~ Introduction Without knowing something about differential equations and methods of solving them, it is difficult to appreciate the history of this important branch of mathematics. Further, the development of differential equations is inti…

如何用GOWIN创建FPGA工程

高云FPGA如何创建工程 第一步:安装Gowin软件,这个在高云的官网是可以下载的 第二步:点开这个软件,点击“New Project…” 点击“Next” 选择自己对应的器件型号: 工程创建成功,如下图: 最后将…

给程序加个进度条吧!1行Python代码,快速搞定~

你在写代码的过程中,有没有遇到过以下问题? 已经写好的程序,想看看程序执行的进度? 在写代码批量处理文件的时候,如何显示现在处理到第几个文件了? 👆如上图所示的进度条是一个最好的解决方法…

如何解决分支机构无法连入总部采购管理系统的难题

案例背景: 某企业业务规模不断壮大,内部采购流程越发复杂,供应商资质情况各异难以管理,为提高内部采购效率和采购品质,优化供应链管理,确保采购环节公正透明可溯,该企业集中化部署了采购管理系…

高级RAG(八): 自动合并检索(Auto-merging Retrieval)

自动合并检索(Auto-merging Retrieval)是LlamaIndex的另外一种高级RAG技术,它有点类似与我们之间介绍的从小到大的检索,不过自动合并检索要比“从小到大的检索”稍微复杂一些,它首先将文档按一定的层次结构进行切割,然后在检索的时…

北斗卫星:助力社区矫正人员追踪与管理的科技突破

北斗卫星:助力社区矫正人员追踪与管理的科技突破 社区矫正人员是一个重要的社会群体,他们的安全和管理对于社会的和谐稳定至关重要。随着技术的飞跃发展,北斗卫星系统作为我国自主研发的卫星导航系统,正逐渐在社区矫正工作中发挥…

UE5 播放rtsp监控视频

1. 插件下载 https://github.com/inveta/InVideo https://github.com/inveta/InVideo/releases https://download.csdn.net/download/qq_17523181/88760489?spm1001.2014.3001.5501 插件目前支持5.1 / 5.0 2. 建立C UE5项目 重要:此插件支持C项目,不然不…

Windows Server搭建DNS服务器

服务器规划 DNS服务器IP为:192.168.2.82 需要自定义域名解析 192.168.2.82 dns.zhangsan.com 192.168.2.181 www.zhangsan.com 192.168.2.182 test1.zhangsan.com 192.168.2.183 test2.zhangsan.com 0. 服务器系统信息 1. 服务器初始化 1.1 查询IP 在命令行窗口中…

【React基础】– JSX语法

文章目录 认识JSX为什么React选择了JSXJSX的使用 React事件绑定this的绑定问题事件参数传递 React条件渲染React列表渲染列表中的key JSX的本质createElement源码Babel官网查看直接编写jsx代码 虚拟DOM的创建过程jsx – 虚拟DOM – 真实DOM声明式编程 阶段案例练习 认识JSX ◼ …

【重学C语言】四、常量、变量和基本数据类型

【重学C语言】四、常量、变量和基本数据类型 1. 常量和变量1.1 常量1.1.1 直接常量1.1.1.1 整数常量1.1.1.2 浮点常量1.1.1.3 字符常量1.1.1.4字符串常量 1.1.2符号常量 1.2 标识符1.3 变量1.3.1 变量的定义1.3.2 左值(Lvalues)和右值(Rvalue…

a-range-picker获取开始和结束时间

效果图 代码块 <a-range-picker change"onChangeRangeDate" format"YYYY-MM-DD"/>onChangeRangeDate(value,dateString){this.startDatedateString[0]this.endDatedateString[1]}

抓包工具Fiddler的下载、安装、配置、基本使用

文章目录 前言一、Fiddler下载二、Fiddler安装三、打开Fiddler四、Fiddler显示菜单栏及菜单栏功能基本介绍五、Fiddler的作用六、Fiddler的工作原理七、Fiddler基本功能使用1.导包2.规则设置Rules&#xff1a; 八、Fiddler设置抓取HTTPS的包九、抓取APP包必须设置十、Fiddler过…

谷达冠楠科技:抖音开网店新手小白可以卖的产品

随着互联网的发展&#xff0c;越来越多的人选择在网上开设自己的店铺。而抖音作为目前最火的短视频平台&#xff0c;也提供了开店的功能。那么&#xff0c;对于新手小白来说&#xff0c;抖音开网店可以卖哪些产品呢? 我们可以考虑的是服装类商品。抖音上有很多时尚博主&#x…

极致画质与流畅播放的完美结合,只在ProVideoPlayer for Mac!

ProVideoPlayer for Mac 是一款功能强大的专业级视频播放软件&#xff0c;旨在提供出色的用户体验和无与伦比的功能。以下是它的一些主要功能介绍&#xff1a; 多格式兼容&#xff1a;ProVideoPlayer for Mac 支持广泛的视频格式&#xff0c;包括常见的MP4、AVI、MOV&#xff0…