【Linux】自动化构建工具--make/Makefile调试器--gdb的使用

news2024/11/26 21:22:34

目录

  • 一、自动化构建工具--make/Makefile
    • 使用
    • 原理
    • 项目清理
  • 二、调试器--gdb的使用
    • 使用

一、自动化构建工具–make/Makefile

使用

  • 一个工程的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
  • makefile带来的好处就是–“自动化编译”,一旦写好,就只需要一个make命令,整个工程完成自动编译,极大的提高了软件的开发效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make、Visual C++的nmake、Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

代码实例:
test.c中的代码:
在这里插入图片描述

Makefile中的代码:
在这里插入图片描述
在这里插入图片描述

  • test ,它依赖 test.o
  • test.o , 它依赖 test.s
  • test.s , 它依赖 test.i
  • test.i , 它依赖 test.c

原理

  1. make会在当前目录下找到名字叫Makefile的文件
  2. 如果找到,它会找文件中的第一个目标文件,在上面的例子中,它会找到test这个文件,并把这个文件作为最终的目标文件
  3. 如果test文件不存在,或是test所依赖的后面的test.o文件的文件修改时间要比test这个文件新,那么,他就会执行后面所定义的命令来生成test这个文件。
  4. 如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)
  5. 当然,你的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明make的终极任务,也就是执行文件hello了。
  6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
  7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。
  8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么make就不工作了。

项目清理

  • 工程是需要被清理的,像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。
  • 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。

二、调试器–gdb的使用

使用

Linux gcc/g++出来的二进制程序,默认是release模式,要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
在这里插入图片描述

  • gdb 文件名:进入gdb
  • l (list) 行号:显示文件源代码
  • l (list) 函数名:显示某个函数的源代码
  • r (run):运行程序
  • n (next):逐过程执行
  • s (step):逐语句执行,进入函数调用
  • b (break) 行号:在某一行设置断点
  • b (break) 函数名:在某个函数开头设置断点
  • finish:执行到当前函数返回,然后停下来等待命令
  • p (print):打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量的值
  • set var:修改变量的值
  • c (continue):从一个断点处,直接运行至下一个断点处
  • d (delete) breakpoints:删除所以断点
  • d (delete) n:删除序号为n的断点
  • disable breakpoints:禁用所以断点
  • enable breakpoints:启动所以断点
  • disable breakpoint n:禁用序号为n的断点
  • enable breakpoint n:启动序号为n的断点
  • i (info) b (breakpoint):查看当前设置的断点信息
  • display 变量名:常显示,每次停下来都会显示它的值
  • undisplay n:取消序号为n的变量的常显示
  • until x(行号):直接运行至序号为x的那一行
  • bt (breaktrace):查看各级函数调用及参数
  • i (info) locals:查看当前栈帧局部变量的值
  • q (quit):退出gdb

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

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

相关文章

聊个简单的话题:如何分析性能需求?

目录 前言 需求评估分析 性能测试方案 前言 前几天还在北京出差时候,微信群有个同学问了一个问题,为什么800并发压测,服务器还没有报错?当时群里其他同学提了很多观点,比如: 并发不够,加并…

某医院Pad网络故障分析

分析背景 某医院为了加强信息安全管理,防止病人隐私信息泄露,采用部署“零信任”安全架构设计理念的企业移动安全支撑平台方案。 但在部署前期测试时,遇到了严重的性能问题。 在本次测试环境中,通过PAD访问患者转运业务&#x…

【深入浅出 Yarn 架构与实现】6-4 Container 生命周期源码分析

本文将深入探讨 AM 向 RM 申请并获得 Container 资源后,在 NM 节点上如何启动和清理 Container。将详细分析整个过程的源码实现。 一、Container 生命周期介绍 Container 的启动由 ApplicationMaster 通过调用 RPC 函数 ContainerManagementProtocol#startContain…

SWLLOE

前面讲过了workman,现在我们再了解另外一个swoole,首先我们要了解swoole是个啥?swoole其实是一个面向生产环境的 PHP 异步网络通信引擎,PHP Swoole 作为网络通信框架可以使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix…

Edge浏览器使用ChatGPT,新手这里看(免费快捷)

前言: ChatGPT受到越来越多人的关注,ChatGPT好不好用,我觉得仁者见仁、智者见智吧,不过首先得先使用感受一下才好回答。多数人都想体验/使用ChatGPT一波,但目前付费和各种渠道满天飞,让人很苦恼&#xff0c…

越来越多企业出现网络安全问题,是什么原因导致的?

近年来网络安全问题层出不穷,信息泄露、网络钓鱼、黑客攻击等问题频繁发生。 尽管有证据表明在一些全球知名的企业组织中存在价值数十亿美元的网络安全漏洞,但企业仍然没有认真对待网络安全。大公司在寻找各种理由来减少其网络安全预算,从而…

操作系统学习笔记(二)

目录 你如何理解“临界”这个词? 那你如何理解在计算机领域下的“临界”这个词呢? 如何理解计算机领域中的“同步”这个词呢? 你如何理解critical这个单词? 单标志法: 双标志先检查法 双标志后检查法&#xff0…

Spring Cloud Gateway路由到Amazon S3签名失败处理

Spring Cloud Gateway路由到Amazon S3签名失败处理 背景 最近在预研统一存储网关,想到就是使用Spring Cloud Gateway作为网关的入口,再反向代理到S3对象存储服务器。 软件版本 网关:Spring Cloud Gateway 3.1.2 s3对象存储:m…

语音识别 | kaggle鸟叫识别新赛赛题解析

整理自kaggle平台 赛题题目: BirdCLEF 2023 kaggle - 鸟声识别大赛 赛题链接:https://www.kaggle.com/competitions/birdclef-2023 赛题背景 鸟类是生物多样性变化的极好指标,因为它们具有高度流动性并且具有多样化的栖息地要求。因此物种…

Jmeter和Postman那个工具更适合做接口测试?

软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中,有高手,自然也会有小白,但有一点我们无法否认,就是每一个高手都是从小白开始的,所以今天我们就来谈谈一大部分人在做的接口测试,小白变高手…

推特运营的方法

推特是一个广泛使用的社交媒体平台,可以通过以下方法来运营和营销: 建立一个完整的个人或品牌资料:确保你的推特资料页面清晰、有吸引力,并包含关键信息,如个人简介、网站链接和联系方式。 确定目标受众:…

【重制版】10分钟学会WINDOWS、MAC、LINUX如何安装GPT桌面版

文章目录 1 前言2 Windows版下载安装2.1 安装包2.2 winget下载 (注意看,不是wget!) 3 Mac版下载安装3.1 安装包3.2 homebrew安装 4 Linux版下载安装4.1 安装包4.2 终端下载 5 特点5.1 软件特点5.2 菜单功能(个人喜好特…

ChatGPT:【万能话术模板】+99个提示词

一:万能话术提示模板 【方便观看版】 【方便复制版】 现在你是一位[ ]创作者。你的任务是以[ ]为标题写一份[ ]的文章。 文章内容包含[ ] [ ] [ ]3部分。 听众是 [ ],他们喜欢 [ ],看重[ ]。 你的写作风…

python3 爬虫相关学习2:网页相关基础知识笔记

1 网页的构成 一般来说&#xff0c;日常看到的网站的网页的组成内容有如下 html 结构的代码css 结构的代码资源&#xff08;文字&#xff0c;图片&#xff0c;音乐&#xff0c;视频等等&#xff09; html 网页结构描述的语言 比如这种写法的文件 <html> <body> …

机器学习基础知识之分类性能评价指标

文章目录 分类性能基本概念1、准确率1、精确率2、召回率3、F1-score4、ROC曲线5、多分类问题中的相关指标6、混淆矩阵 分类性能基本概念 与预测性能评价指标相类似&#xff0c;分类性能评价指标同样也是将模型计算得出的标签值与实际的真实标签值通过数学统计上的公式进行计算…

十三、超时重试机制

目录 超时配置和重试机制 FeignClient 、Ribbon 、 Hystrix三个之间配置优先级的关系 配置常用属性 Ribbon超时和重试配置: Ribbon重试次数计算公式&#xff1a; FeignClient 超时配置&#xff1a; Hystrix超时配置&#xff1a; Hystrix超时计算公式&#xff1a; 超时配…

Android PickerView简单应用

1. Android-PickerView Android-PickerView这是一款仿iOS的PickerView控件&#xff0c;有时间选择器和选项选择器。 添加依赖项 implementation com.contrarywind:Android-PickerView:4.1.92. 时间选择器 Android-PickerView时间选择器使用Build模式来创建 var timePicker…

如何开展计算机相关的学术研究? - 易智编译EaseEditing

计算机科学是一门包括理论和应用两方面的学科&#xff0c;可以涉及各种领域&#xff0c;如人工智能、计算机视觉、机器学习、大数据、网络安全等等。开展计算机相关的学术研究需要以下步骤&#xff1a; 1.明确研究问题&#xff1a; 首先需要明确研究问题和目标。选择一个研究方…

5月15号软件资讯更新合集.....

Vue2 to Composition API 语法转换器 V2.0 版本更新 在线使用 网站 Gitee: vue2-to-composition-api vue2-to-composition-api 是一款可以将 Options API 转换成 Composition API 的在线应用工具&#xff0c;转换后直接导出 Script setup 内容&#xff0c;帮助 Vue2 项目减少…

VoxWeekly|The Sandbox 生态周报(20230508)

欢迎来到由 The Sandbox 制作的《VoxWeekly》。我们会在每周一发布这份周报&#xff0c;对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容&#xff0c;欢迎与朋友和家人分享。您还可以订阅我们的 Medium 、关注我们的 Twitter&#xff0c;并加入 Disco…