当前位置: 首页 > news >正文

gdb调试功能从零到会(Linux详解)

目录

👀 1.安装gdb

👀2.判断是否安装成功

👀3.改成debug方式发布。

👀 4.gdb功能简介


前言

 gdb是Linux 下功能全面的调试工具。gdb支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在Linux环境软件开发中,gdb 是主要的调试工具,用来调试 C 和 C++ 程序。

👀 1.安装gdb

直接在命令行输入:sudo yum install -y gdb

即可直接安装成功。

👀2.判断是否安装成功

安装成功后,在命令行直接输入 gdb 或者 gdb --version 进入交互模式。

如图所示:

 当我们进入交互模式后发现无论我们输入什么命令都没有作用(无法调试),只会出现这样的情况:

"/home/bsk/test1/one/test.c": not in executable format: File format not recognized
(gdb) l
No symbol table is loaded.  Use the "file" command.

哪为什么会这样呢?原因很简单,因为gdb在linux中默认是以release版(一般软件进行发布,用户体验模式)的方式来进行发布的,不可以被调试!所以我们要把它改成debug方式(包含调试信息)发布。

👀3.改成debug方式发布。

在命令行输入:vim Makefile(自动化构建工具(多文件操作))

进入之后写如下代码,其中的 -g选项就是把其改成debug方式。

  1 mytest:test.c2     gcc $^ -o $@ -g3 4 .PHONY:clean5 clean:6     rm -f mytest7                 

现在再make一下就会生成对应的mytest(debug版)

以上是详细内容,方便从根上理解。

而我们在日常使用时直接在 gcc命令下添加 -g 选项即可,再直接gdb就可。如下图所示:

👀 4.gdb功能简介

接下来就可以进行gdb使用了,简单介绍其几个功能如下:

     l:显示代码(l+数字:可以从你输入的数字开始显示,但会出现和其相关的上下文)

(gdb) l
1	#include <stdio.h>
2	int main()
3	{
4	   printf("long time no see\n");
5	   fflush(stdout);
6	   sleep(2);
7	   return 0;
8	}
(gdb) 

     b+行号:打断点

(gdb) b 5
Breakpoint 1 at 0x40060b: file test.c, line 5.
(gdb) 

      info b :查看断点编号信息(如下所示)

(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000040060b in main at test.c:5breakpoint already hit 1 time
2       breakpoint     keep y   0x0000000000400601 in main at test.c:2
(gdb) 

     d+编号:删除断点(不要输入以前打断点的行号,要输入查看断点信息里面的对应的Num号)

(gdb) d 1
(gdb) info b
Num     Type           Disp Enb Address            What
2       breakpoint     keep y   0x0000000000400601 in main at test.c:2
(gdb) 

      r :运行程序(遇到断点会停下来,没有断点直接运行到最后)

(gdb) r
Starting program: /home/bsk/test1/one/a.out 
long time no seeBreakpoint 1, main () at test.c:5
5	   fflush(stdout);
Missing separate debuginfos, use: debuginfo-install glibc-2.17-317.el7.x86_64
(gdb) 

在第5行停了下来。(最后一行提示缺少一个工具,复制安装就可以,或者不用管)

       n:单步执行语句(对应vs逐过程,不进入函数内部)

(gdb) n
6	   sleep(2);
(gdb) 

       finish :结束函数调用,然后停下来。

       s:进入函数内部(对应vs逐语句)

       until +行数:跳转到指定行

        display +名称:常显示(对应vs中的监视)

        undisplay +编号:取消常显示(监视)

 

相关文章:

gdb调试功能从零到会(Linux详解)

目录 &#x1f440; 1.安装gdb &#x1f440;2.判断是否安装成功 &#x1f440;3.改成debug方式发布。 &#x1f440; 4.gdb功能简介 前言 gdb是Linux 下功能全面的调试工具。gdb支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在Linux环境软件…...

【C语言学习笔记】:数组、指针相关面试题

无特殊说明情况下&#xff0c;下面所有题s目都是linux下的32位C程序。 「1、计算以下sizeof的值。」 char str1[] {a, b, c, d, e}; char str2[] "abcde";char *ptr "abcde";char book[][80]{"计算机应用基础","C语言","C程…...

go语言环境配置 项目启动

一 安装go语言 go语言各个版本之间兼容性比较差。所以可能你需要安装固定的版本 1 安装最新版的go brew install go2 查看go可以安装的版本 brew search go3 安装指定版本的go brew install go1.134 查看安装的go语言的版本 go version5 查看go的安装路径 which go || w…...

Springboot 使用插件 自动生成Mock单元测试 Squaretest

缘起 很多公司对分支单测覆盖率会有一定的要求&#xff0c;比如 单测覆盖率要达到 60% 或者 80%才可以发布。 有时候工期相对紧张&#xff0c;就优先开发功能&#xff0c;测试功能&#xff0c;然后再去补单元测试。 但是编写单元测试又比较浪费时间&#xff0c;有没有能够很大…...

「JVM 执行引擎」栈架构的字节码的解释执行引擎

JVM 执行引擎在执行 Java 代码时有解释执行&#xff08;通过解释器执行&#xff09;和编译执行&#xff08;通过即时编译器产生本地代码执行&#xff09;两种选择&#xff1b; HotSpot 实际的实现中&#xff0c;模版解释器工作时&#xff0c;并不是按照概念模型中进行机械式计…...

SSM项目-商城后台管理系统

SSM项目-商城后台管理系统开发说明开发环境项目界面演示项目功能具体的技术指标开发过程1、搭建SSM框架1.1、建库建表1.2、新建Maven工程1.3、配置pom.xml1.4、目录结构1.5、jdbc.properties1.6、mybatis-config.xml1.7 两个Spring的配置文件applicationContext_dao.xmlapplica…...

什么是装运单IFTMIN?

符合EDIFACT国际报文标准的IFTMIN主要用于传输电子运输订单&#xff0c;这些装运单作为EDI数据交换的一部分&#xff0c;由客户或托运人发送给物流服务提供商。通过EDI传输的运输信息可以被用来计划当前所需的运输能力&#xff0c;并且物流服务提供商也可以据此提前将包装材料准…...

深度负反馈

负反馈放大电路的方块图因为负反馈放大电路有四种组态&#xff0c;而且对于同一种组态&#xff0c;具体电路也各不相同&#xff1b;所以为了研究负反馈放大电路的共同规律&#xff0c;可以利用方块图来描述所有电路一.负反馈放大电路的方块图表示法任何负反馈放大电路都可以用下…...

【每日随笔】手指训练 ( 产品需求探索、技术无关 | 手指训练作用 | 哪些人需要手指训练 | 手指操 | 手指康复训练器材 )

文章目录一、手指训练作用二、哪些人需要手指训练三、手指操四、手指康复训练器材产品需求探索 , 研究下手指训练的市场 , 前景 , 是否可以开发 ; 一、手指训练作用 手指训练作用 : 改善 上肢协调性手眼 协调性训练提高 手指 抓握 能力提高 手指 灵活性提高 上肢运动 准确性 和…...

Apple Safari 16.3 - macOS 专属免费浏览器 (独立安装包免费下载)

Safari 浏览器 16 for macOS Montery, Big Sur 请访问原文链接&#xff1a;https://sysin.org/blog/apple-safari-16/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 之前 Safari 浏览器伴随 macOS 更新一起发布&#xff…...

【java】Spring Boot --Spring Boot 集成 MyBatis

文章目录1. 前言2. 实例场景3. 数据库模块实现4. Spring Boot 后端实现4.1 使用 Spring Initializr 创建项目4.2 引入项目依赖4.3 数据源配置4.4 开发数据对象类4.5 开发数据访问层4.6 添加 MyBatis 映射文件5. 测试6. 小结1. 前言 企业级应用数据持久层框架&#xff0c;最常见…...

python正则表达式

python正则表达式 作者&#xff1a;AOAIYI 创作不易&#xff0c;如果觉得文章不错或能帮到你学习&#xff0c;记得点赞收藏评论一下哦 文章目录python正则表达式一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤总结一、实验目的 学会使用常见的正则表达式 二、…...

【C++】二叉树的非递归遍历

非递归遍历二叉树一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历3.1 方法一3.2 方法二一、二叉树的前序遍历 题目链接 我们可以把任何一棵树看成左路节点&#xff0c;左路节点和右子树。先访问左路节点&#xff0c;再访问左路节点的右子树。在右子树中也重复这…...

Linux——线程同步(条件变量、POSIX信号量)和线程池

一.线程同步&#xff08;一&#xff09;.概念线程同步是一种多线程关系&#xff0c;指的是线程之间按照特定顺序访问临界资源&#xff0c;进而能够避免线程饥饿问题。所谓线程饥饿指的是某个线程长期“霸占”临界资源&#xff0c;导致其他线程无法访问该资源。而通过线程同步机…...

leaflet 上传CSV文件,导出geojson格式文件(064)

第064个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载CSV文件,将图形显示在地图上。点击导出geojson,下载成geojson文件。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共114行)安装插件…...

Java内部类

文章目录一、内部类的概念二、内部类的分析三、内部类的分类1. 成员内部类2. 静态内部类3. 局部内部类4. 匿名内部类匿名内部类与Lambda表达式一、内部类的概念 在 Java 中&#xff0c;可以将一个类定义在另一个类里面或者一个方法里面&#xff0c;这样的类称为内部类。内部类…...

Centos系统里运行java的jar包

目前使用springboot开发是嵌入方式的tomcat&#xff0c;不需要单独使用tomcat&#xff0c;那么经常在服务器上运行jar包&#xff0c;这里记录一下在centos7系统里运行jar的方式。在运行之前需要确定centos7系统是否安装了java环境以及配置环境变量&#xff0c;还有jar需要运行的…...

招标采购流程的电子招标采购,是管理复杂供应链和多层供应商的高效方式。

负载均衡&#xff08;Load Balance&#xff09; 由于目前现有网络的各个核心部分随着业务量的提高&#xff0c;访问量和数据流量的快速增长&#xff0c;其处理能力和计算强度也相应地增大&#xff0c;使得单一的服务器设备根本无法承担。在此情况下&#xff0c;如果扔掉现有设…...

【C语言】C程序结构和基本语法

1、C语言程序结构 我们学习一门编程语言&#xff0c;第一个实例都是"hello world!"&#xff0c;下面看一个最简单的C程序结构。 #include <stdio.h>int main() {/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0; }程序的第一行 #incl…...

YOLOv8 目标检测 | 自定义数据集

本文介绍了使用用于目标检测的自定义数据训练 YOLOv8 模型。我正在使用来自 kaggle 的 yolo 格式的“Face Mask Dataset”&#xff0c;数据集链接如下&#xff1a;https://www.kaggle.com/datasets/maalialharbi/face-mask-dataset?resourcedownloadYOLOv8 是目前最先进的 YOL…...

这家口腔机构,如何用AI把到院成本从1200+打到310元?

广东有一家口腔机构&#xff0c;三级专科&#xff0c;种植体量在区域排前三。 听起来很牛吧&#xff1f;但老板跟我聊天的时候&#xff0c;愁得不行。他说&#xff0c;抖音投放成本飘高&#xff0c;线索到院率低&#xff0c;客服人手不足&#xff0c;加微后无差别群发&#xff…...

【秣厉科技】LabVIEW工具包——OpenCV 实战:Mat 类在工业视觉中的高效数据流转

1. Mat类&#xff1a;工业视觉的数据高速公路 在工业视觉系统中&#xff0c;图像数据就像流水线上的零件&#xff0c;需要快速准确地传递到各个处理环节。OpenCV的Mat类就是这条流水线上的传送带&#xff0c;而LabVIEW则是控制整个生产线的智能大脑。我第一次在半导体检测项目…...

论文写作利器:如何用VSCode和LaTeX打造高效写作环境(含最新配置代码)

论文写作利器&#xff1a;如何用VSCode和LaTeX打造高效写作环境&#xff08;含最新配置代码&#xff09; 对于学术研究者而言&#xff0c;论文写作不仅是思想的表达&#xff0c;更是效率的较量。传统文字处理软件在复杂公式排版、参考文献管理上的局限性&#xff0c;常常让写作…...

别再只盯着准确率了!手把手教你用Python实现NDCG和MAP,搞定搜索推荐系统评估

别再只盯着准确率了&#xff01;手把手教你用Python实现NDCG和MAP&#xff0c;搞定搜索推荐系统评估 当你在优化推荐算法时&#xff0c;是否曾为选择评估指标而纠结&#xff1f;准确率、召回率这些传统指标虽然直观&#xff0c;却无法捕捉排序质量这一关键维度。本文将带你深入…...

从Provisional headers are shown到证书过期:uniapp请求无响应的幕后真相

从Provisional headers are shown到证书过期&#xff1a;uniapp请求无响应的深度排查指南 当你正在调试一个运行良好的uniapp项目时&#xff0c;突然发现所有网络请求在真机上毫无征兆地停止工作——没有错误提示&#xff0c;没有响应数据&#xff0c;只有开发者工具中冷冰冰的…...

小程序签名组件避坑指南:从米字格绘制到图片生成的完整流程

小程序签名组件开发实战&#xff1a;从米字格绘制到图片生成的深度解析 在小程序开发中&#xff0c;签名功能的需求日益增多&#xff0c;无论是电子合同签署、教育类应用的字帖练习&#xff0c;还是个性化签名设计&#xff0c;都需要一个稳定高效的签名组件。本文将深入探讨如何…...

Pixel Dream Workshop 作品集:基于LSTM时序模型生成的动态艺术画展示

Pixel Dream Workshop 作品集&#xff1a;基于LSTM时序模型生成的动态艺术画展示 1. 当AI遇见艺术&#xff1a;LSTM如何创造动态视觉叙事 在数字艺术创作领域&#xff0c;时序模型正带来一场革命性的变化。Pixel Dream Workshop最新推出的动态艺术画系列&#xff0c;展示了长…...

终极指南:如何用 tf-quant-finance 实现 Hull-White 模型的百慕大式互换权定价

终极指南&#xff1a;如何用 tf-quant-finance 实现 Hull-White 模型的百慕大式互换权定价 【免费下载链接】tf-quant-finance High-performance TensorFlow library for quantitative finance. 项目地址: https://gitcode.com/gh_mirrors/tf/tf-quant-finance 在量化金…...

Unity WebGL输入优化:跨平台文本输入解决方案的技术突破

Unity WebGL输入优化&#xff1a;跨平台文本输入解决方案的技术突破 【免费下载链接】WebGLInput IME for Unity WebGL 项目地址: https://gitcode.com/gh_mirrors/we/WebGLInput 在Unity WebGL应用的开发过程中&#xff0c;文本输入功能一直是开发者面临的核心挑战。传…...

HarmonyOS6 半年磨一剑 - RcTextarea 组件核心架构与类型系统设计

文章目录前言一、组件整体架构1.1 文件结构1.2 装饰器体系二、类型系统深度解析2.1 边框模式类型2.2 清空触发类型2.3 格式化与解析函数类型2.4 文本对齐与回车键类型三、核心参数体系3.1 必传参数3.2 尺寸相关参数3.3 功能开关参数四、内部状态与生命周期4.1 内部状态设计4.2 …...