Linux 操作系统gdb、makefile

今天是对前面两天的补充和完善。

1、gdb

1.1 gdb 作用

调试程序

1.2 调试bug的步骤

        测试:发现问题

        固化:让bug重现

        定位:找到bug的位置

        修改:修改bug

        验证

1.3 gdb调试工具的使用

1->想要使用gdb调试工具,在编译的时候gcc后面加一个-g,生成带有调试信息的可执行程序

带有调试信息的可执行程序要比直接编译的要大一些。

2->启动gdb

格式:gdb./可执行程序

1.4 gdb的常用命令

退出:quit         q

清屏:ctrl +L

显示代码:
        list或者l(小写的L)        只会显示10行代码

        list   行号                    显示该行附近的10行代码

运行指令:run

设置断点:---断点:运行到该行,会停止运行

break    行号       简写:(b  行号)

查看断点:info break


设置断点:默认是使能状态        (使能:该断点起作用)

使能:使该断点起作用

enable +断点的编号

失能:使该断点失去作用,不起作用

disable +断点的编号

删除断点:

delete +断点的编号

clear +断点的行号

继续运行:        cont c

打印变量的值:print 变量名

调试程序思想1:

设置断点  +  run   +print   +   c

调试程序思想 2 :单步调试

运行  start

n  next:下一步,按步调试,遇到函数,不会进入函数内部

s  step:下一步,按步调试,遇到函数,会进入函数内部

finish  :结束当前函数,返回到调用点;

整体思想:用n来把控全局,遇到自己想进入的子函数的时候,再使用s进入

遇到主函数传参:gdb-args ./xxxx

2、 makefile

2.1 安装 makefile

        sudo apt-get install make

2.2 makefile 的作用

        工程管理工具:名字为make的文件;

        将你原本给终端写的指令,写入到该文件中

        make 之后自动执行makefile中的指令,make

2.3 makefile的使用

        思想:目标和依赖

        vim makefile    打开/创建并打开一个makefile文件

格式:1

        目标:依赖

        (按Tab键)命令

格式2:没有依赖的目标,称为伪目标

        目标:

        按Tab键) 命令

第二个 makefile

#表示注释

makefile中的变量:

变量名=原来的内容           C=gcc

变量的引用:$(变量名)        $(C)        等价于gcc

特殊变量:

$@:目标

$^:所有的依赖

$<:所有依赖中的第一个依赖

%.o:%.c

        gcc -c $< -o $@

静态库封装:

动态库封装:

拓展: makefile 里面的函数:
wildcard
原型:$(wildcard <pathname>)
功能:查找<pathname>下指定文件
返回:包含路径的所有指定文件
SRCPATH=$(wildcard ./src/*.c)
$(SRCPATH) 等价于 src/main.c src/add.c src/del.c
notdir
原型:$(notdir <names...>)
功能:从文件名序列<names>中取出非目录部分。非目录部分是指最后一个反斜杠 ( “ /”)
之后的部分。
返回:返回文件名序列<names>的非目录部分
SRCNOPATH=$(notdir $(SRCPATH))
$(SRCNOPATH) 等价于 main.c del.c add.c
patsubst
原型:$(patsubst <pattern>,<replacement>,<text>)
功能:查找<text>中的单词( 单词以“空格”、 “Tab”或“回车”“换行”分隔) 是否符合模式
<pattern>, 如果匹配的话, 则以<replacement>替换。 这里, <pattern>可以包括通配符“%”,
表示任意长度的字串, 按照名字匹配。
返回:函数返回被替换过后的字符串
LIBPATH = $(patsubst %.c ./lib/%.o $(SRCNOPATH))
$(LIBPATH) 等价于 ./lib/main.o ./lib/add.o ./lib/del.o
 

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

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

相关文章

【网站项目】自习室预约系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

汽车充电桩充电效率的四大决定因素

随着电动汽车的快速普及&#xff0c;交流充电桩作为电动汽车的充电基础设施&#xff0c;其充电效率受到了广泛的关注。接下来&#xff0c;我们将深入探讨交流充电桩的充电效率&#xff0c;包括充电效率的定义、影响因素以及提升方法。 充电效率的定义 交流充电桩的充电效率指的…

【微信小程序从入门到精通(项目实战)】——微电影小程序

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

2024华中杯C题完整解题思路及代码

C 题 基于光纤传感器的平面曲线重建算法建模 光纤传感技术是伴随着光纤及光通信技术发展起来的一种新型传感器技 术。它是以光波为传感信号、光纤为传输载体来感知外界环境中的信号&#xff0c;其 基本原理是当外界环境参数发生变化时&#xff0c;会引起光纤传感器中光波参量&…

Vue前端框架如何调用天聚数行API?

Vue是一个业内优秀的前端解决方案&#xff0c;采用了最新流行的MVVM框架模式&#xff0c;深受web前端开发者的喜爱&#xff0c;在相关开发者社区也一直都是热门交流话题。那么&#xff0c;如何通过Vue调用天行数据的API接口呢&#xff0c;下面就具体给大家示例。 vue采用的是数…

数字零售力航母-看微软如何重塑媒体

数字零售力航母-看微软如何重塑媒体 - 从2024全美广播协会展会看微软如何整合营销媒体AI技术和AI平台公司 2024年&#xff0c;微软公司联合英伟达总司&#xff0c;赞助全美广播协会展会。本次展会微软通过搭建一个由全面的合作伙伴生态系统支持的可信和安全的平台&#xff0c;…

TCP和UDP协议的区别

1、定义 TCP协议的全称是Transmission Control Protocol&#xff08;传输控制协议&#xff09;&#xff0c;是一种面向连接的点对点的传输层协议。 UDP协议的全称是User Datagram Protocal&#xff08;用户数据报协议&#xff09;&#xff0c;为应用程序提供一种无需建立连接…

手机从0基础到精通拍摄,拍摄手法0基础教学,快速入门

课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/89064797 更多资源下载&#xff1a;关注我。 课程内容&#xff1a; 1 为什么学拍摄剪辑.mp4 2 如何选择手机.mp4 3 补光灯的作用.mp4 !三角支架的作用.mp4 5 麦克风的作用.mp4 6 帧率清晰度参数.m…

Hive进阶

目录 一、MapReduce的计算过程 二、Yarn的资源调度 yarn的资源调度策略 三、Hive的语法树 四、Hive配置优化 五、数据开发 六、数据仓库 七、数据仓库开发流程 八、数仓分层 九、ETL和ELT 一、MapReduce的计算过程 分布式计算框架 需要编写代码执行&#xff0c;执行时…

Edge的使用心得与深度探索:优化浏览体验的技巧与建议

随着互联网的快速发展&#xff0c;浏览器已经成为我们日常生活中不可或缺的工具之一。在众多浏览器中&#xff0c;微软Edge凭借其稳定性、安全性和功能丰富性备受用户青睐。本文将深入探讨Edge浏览器的各种功能与技巧&#xff0c;帮助用户优化其浏览体验。 文章目录 Edge翻译插…

iOS 全平台矢量动画库:体积小巧、功能丰富 | 开源日报 No.227

airbnb/lottie-ios Stars: 24k License: NOASSERTION lottie-ios 是一个用于在 iOS 平台上本地渲染 After Effects 矢量动画的库。 该项目主要功能、关键特性、核心优势包括&#xff1a; 跨平台支持&#xff1a;可在 iOS, macOS, tvOS, visionOS, Android 和 Web 上使用实时渲…

ASP.NET医院手麻信息系统源码 .NET6.0+VUE

目录 麻醉记录单 复苏记录单 麻醉文书 手术麻醉信息 1、 体征监控记录 2、 麻醉用药信息 3、 手术事件登记 4、 手术状态变更 5、 麻醉医师交接 6、 其他辅助操作 手麻信息系统是以服务围术期临床业务工作的开展为核心&#xff0c;通过与床边监护设备以及医院H…

OpenCV从入门到精通实战(五)——dnn加载深度学习模型

从指定路径读取图像文件、利用OpenCV进行图像处理&#xff0c;以及使用Caffe框架进行深度学习预测的过程。 下面是程序的主要步骤和对应的实现代码总结&#xff1a; 1. 导入必要的工具包和模型 程序开始先导入需要的库os、numpy、cv2&#xff0c;同时导入utils_paths模块&…

Objective-C网络数据捕获:使用MWFeedParser库下载Stack Overflow示例

概述 Objective-C开发中&#xff0c;网络数据捕获是一项常见而关键的任务&#xff0c;特别是在处理像RSS源这样的实时网络数据流时。MWFeedParser库作为一个优秀的解析工具&#xff0c;提供了简洁而强大的解决方案。本文将深入介绍如何利用MWFeedParser库&#xff0c;以高效、…

【学习笔记二十】EWM TU运输单元业务概述及后台配置

一、EWM TU运输单元业务流程概述 TU是指车辆和运输单元在货场中,移动车辆或运输单元。 车辆是特定运输方式的专用化工具,车辆可以包含一个或多个运输单元,并代表运输车辆的实际实体。 运输单元是用于运输货物的车辆的最小可装载单位,运输单元可以是车辆的固定部分。 …

高仿小米商城用户端

高仿小米商城用户端(分为商城前端&#xff08;tongyimall-vue)和商城后端(tongyimall-api)两部分)&#xff0c;是Vue SpringBoot的前后端分离项目&#xff0c;用户端包括首页门户、商品分类、首页轮播、商品展示、商品推荐、购物车、地址管理、下订单、扫码支付等功能模块。 …

AndroidStudio 导出aar包,并使用

打包 1、确认当前选项是否勾选&#xff0c;如未勾选请先勾选。 2、勾选完成后重启Android Studio。 3、重启完成后&#xff0c;选中要打包的module 4、打包完成 使用 1.在项目中新建libs,放入aar文件。 2.修改配置 添加如下代码 flatDir {dirs("libs")}3.修改app…

档案集中管理的痛点怎么解决?

档案集中管理可能面临的痛点包括以下几个方面&#xff1a; 1. 档案分类和整理困难&#xff1a;档案集中管理会面临大量档案的分类和整理工作&#xff0c;可能导致混乱和困难。 解决方法&#xff1a; - 建立统一的档案分类规范和流程&#xff0c;确保所有档案都能按照规定的方式…

PMP报考别跟风!搞懂这些问题不踩坑!

1.PMP是什么&#xff1f; 1.PMP(Project ManagementProfessional)的中文全称是项目管理专业人士资格认证。该认证是由美国项目管理协会PMI在全球206个国家发起的针对项目经理的资格认证。 2.PMP认证是目前国际上项目管理领域认可度和含金量最高的证书。通过PMP就证明你的项目…

性能测试--数据库慢 SQL 语句分析

一 慢 SQL 语句的几种常见诱因 1. 无索引或索引失效 ​ 当查询基于一个没有索引的列进行过滤、排序或连接时&#xff0c;数据库可能被迫进行全表扫描&#xff0c;即逐行检查所有数据&#xff0c;导致性能显著下降。 ​ 虽然我们很多时候建立了索引&#xff0c;但在一些特定的…