Linux调试器---gdb的使用
顾得泉:个人主页
个人专栏:《Linux操作系统》 《C/C++》
键盘敲烂,年薪百万!
一、gdb的背景
gdb,全称为GNU调试器(GNU Debugger),是一个功能强大的源代码级调试工具,主要应用于Unix系统,以及Linux下的程序开发。它与GCC一样,都是源于GNU计划,同GCC、Emacs等工具同期诞生。在嵌入式开发中,gdb的使用非常广泛,对于程序的调试有着不可替代的作用,因此对每位嵌入式开发工程师而言都有着至关重要的意义。
gdb提供了多种强大的功能,以帮助程序员查看程序在执行过程中的内部状态,如:设置断点、单步执行、查看变量值等。这些功能都极大地方便了程序员对程序的调试工作。
二、gdb的安装
使用该指令安装gdb调试器:(Ubuntu环境)
sudo apt-get install gdb

如果有小伙伴使用上述命令无法安装,尝试这个命令:
yum install -y gdb
三、Debug和Release
默认我们已经创建好了text.c和makefile文件


我们进行make编译:

接着我们对text文件进行gdb调试:

无法调试!为什么呢?
1.程序的发布方式有两种,debug模式和release模式
2.Linux gcc/g++出来的二进制程序,默认是release模式,release模式下无法调试
3.要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
我们接下来对makefile文件进行修改,加上 -g选项:

接下来我们尝试进行调试:

可以进行调试了 。
四、gdb的基础使用
1.进入和退出
进入:gdb 文件名
![]()
退出:CTRL+d或者quit
![]()
2.查看调试的代码
list or l + 行号,显示指定行之后的代码(自动记录最后一条指令)

3.断点
1.打印断点(三种方式)
1.b+行号

2.b+函数名+行号
由于我的疏忽忘记编辑函数,就不进行展示了,大家可以自行练习
3.b+文件名+行号(适用于多文件下)
2.查看断点
info b
3.删除断点
d,注意在删除断点中,显示的是编号,而不是行号。
4.使能(禁用/开启)断点
1.禁用:disable
这里的y,n代表断点是否启用,由上图可以看出3号断点已经被禁用。
2.开启:enable
4.代码执行结束
r,直接把要调试的代码全部执行
5.查看调用堆栈
因为我的text文件比较简单,没有进行调用堆栈,大家感兴趣的可以自行练习。
五、扩展完善
list/ l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行
list /l函数名:列出某个函数的源代码
r或run:运行程序
n或 next:单条执行
s或step:进入函数调用
break(b)行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p变量:打印变量值
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info (i) locals:查看当前栈帧局部变量的值
quit:退出gdb
结语:Linux调试器关于gdb使用的分享到这里就结束了,没有进行展示的操作大家可以自行练习,希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言~~~
相关文章:
Linux调试器---gdb的使用
顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 键盘敲烂,年薪百万! 一、gdb的背景 gdb,全称为GNU调试器(GNU Debugger),是一个功能强大的源代码级调试工具,主要…...
【Dubbo】Dubbo负载均衡实现解析
📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于…...
怎样备份电脑文件比较安全
域智盾软件是一款功能强大的电脑监控软件,它不仅具备实时屏幕监控、行为审计等功能,还能够对电脑文件进行备份和管理。下面将介绍域智盾软件如何备份电脑文件,以确保数据安全。 1、开启文档备份功能 部署后台,然后点击文档安全&a…...
python 计算最大回撤
1. 什么是最大回撤 最大回撤是评估金融产品收益的一个非常重要的风险指标,它指的是在选定历史周期内任一历史时点往后推,产品净值走到最低点时的收益率回撤幅度的最大值。 以上图为例, 最大回撤 ( V a l u e A − V a l u e B ) V a l u e …...
Linux系统中常用的压缩与解压缩方法
目录 一.前言二.如何压缩与解压缩 一.前言 Linux系统中压缩和解压缩的方法很多,这篇文章只简单介绍一下使用tar和gzip进行压缩与解压缩。 二.如何压缩与解压缩 tar和gzip命令内容很多,这篇文章只是简单介绍一下。 1.看一下gzip命令压缩与解压缩方法。…...
目标检测YOLO实战应用案例100讲-基于机器视觉的水稻病虫害监测预警(续)
目录 3.3 试验结果与分析 3.3.1 数据集介绍 3.3.3 评价标准 3.3.4 模型训练参数设置...
【星海随笔】redis 解析
redis 非关系型数据库 支持事务,操作都是原子性 所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。 redis-server:顾名思义,redis服务 redis-cli:redis client,提供一个redis客户端,…...
鸿蒙:实现两个Page页面跳转
效果展示 这篇博文在《鸿蒙:从0到“Hello Harmony”》基础上实现两个Page页面跳转 1.构建第一个页面 第一个页面就是“Hello Harmony”,把文件名和显示内容都改一下,改成“FirstPage”,再添加一个“Next”按钮。 Entry Compone…...
C#有关里氏替换原则的经典问题答疑
目录 理解创建类型与变量类型很关键 先来理解变量类型。 再来理解创建类型。 有了正确的理解再来看疑问 里氏替换原则是面向对象七大原则中最重要的原则。 语法表现:父类容器装子类对象。 namespace 里氏替换原则 {class GameObject { } class Player : GameO…...
【每日一题】689. 三个无重叠子数组的最大和-2023.11.19
题目: 689. 三个无重叠子数组的最大和 给你一个整数数组 nums 和一个整数 k ,找出三个长度为 k 、互不重叠、且全部数字和(3 * k 项)最大的子数组,并返回这三个子数组。 以下标的数组形式返回结果,数组中…...
“开源 vs. 闭源:大模型的未来发展趋势预测“——探讨大模型未来的发展方向
文章目录 每日一句正能量前言什么是大模型的开源与闭源开源与闭源的定义和特点开源的意义开源和闭源的优劣势比较不同的大模型企业,开源、闭源的策略不尽相同。企业在开发垂类模型时选择开源还是闭源大模型开源vs 闭源:两者并非选择题后记 每日一句正能量…...
计算机网络——物理层-信道的极限容量(奈奎斯特公式、香农公式)
目录 介绍 奈氏准则 香农公式 介绍 信号在传输过程中,会受到各种因素的影响。 如图所示,这是一个数字信号。 当它通过实际的信道后,波形会产生失真;当失真不严重时,在输出端还可根据已失真的波形还原出发送的码元…...
【算法挨揍日记】day31——673. 最长递增子序列的个数、646. 最长数对链
673. 最长递增子序列的个数 673. 最长递增子序列的个数 题目解析: 给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 解题思路: 算法思路: 1. 状态表⽰: 先尝试…...
Jmeter做接口测试
1.Jmeter的安装以及环境变量的配置 Jmeter是基于java语法开发的接口测试以及性能测试的工具。 jdk:17 (最新的Jeknins,只能支持到17) jmeter:5.6 官网:http://jmeter.apache.org/download_jmeter.cgi 认识JMeter的目录࿱…...
第14届蓝桥杯青少组python试题解析:23年5月省赛
选择题 T1. 执行以下代码,输出结果是()。 lst "abc" print(lstlst)abcabc abc lstlst abcabc T2. 执行以下代码,输出的结果是()。 age {16,18,17} print(type(sorted(age)))<class set&…...
SpringCloud 微服务全栈体系(十四)
第十一章 分布式搜索引擎 elasticsearch 四、RestAPI ES 官方提供了各种不同语言的客户端,用来操作 ES。这些客户端的本质就是组装 DSL 语句,通过 http 请求发送给 ES。官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/…...
【开题报告】基于微信小程序的个人健康管理系统的设计与实现
1.选题背景与意义 在现代社会,人们对健康的关注日益增加。随着生活方式的变化和工作压力的增加,许多人意识到保持良好的身体健康对于提高生活质量和幸福感的重要性。 然而,许多人在日常生活中缺乏对自身健康状况的了解和管理。他们可能没有…...
Swagger笔记
一、导包 <!--引入swagger--> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> </dependency> <!--前端的UI界面--> <dependency><…...
数据结构 堆
手写堆,而非stl中的堆 如何手写一个堆? //将数组建成堆 <O(n) for (int i n / 2;i;i--) //从n/2开始down down(i); 从n/2元素开始down,最下面一层元素的个数是n/2,其余上面的元素的个数是n/2,从最下面一层到最高层…...
将 ONLYOFFICE 文档编辑器与 Node.js 应用集成
我们来了解下,如何将 ONLYOFFICE 文档编辑器与您的 Web 应用集成。 许多 Web 应用都可以从文档编辑功能中获益。但是要从头开始创建这个功能,需要花费大量时间和精力。幸运的是,您可以使用 ONLYOFFICE——这是一款开源办公套件,可…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
