Linux开发工具的使用(三)

news2024/11/23 12:24:41

文章目录

  • Linux开发工具的使用(三)
    • 1. 缓冲区
      • 1.1 理解\r和\n
      • 1.2 缓冲区的初步理解
      • 1.3 倒计时小程序实现
      • 1.4 进度条小程序实现
    • 2. 分布式版本控制系统-git使用
      • 2.1 git历史
      • 2.2 git版本控制理解
      • 2.3 git使用
        • 2.3.1 gitee搭建远程仓库
        • 2.3.2 开始配置
    • 3. Linux调试器-gdb的使用
      • 3.1 背景
      • 3.2 使用指令

Linux开发工具的使用(三)

1. 缓冲区

基于vim/gcc/make/makefile实现,也是想相当于把前面知识点进行复习。

1.1 理解\r和\n

\r是回车(也就是光标跳转到所在行最开始的位置),\n是换行。

\n的现象:打印出hello world并且换行输出命令行[yinhan@VM-12-12-centos study8]$

\r的现象:只是输出命令行[yinhan@VM-12-12-centos study8]$

1.2 缓冲区的初步理解

现象:hello world直接打印出来,然后休眠三秒再打印出命令行[yinhan@VM-12-12-centos study8]$

现象:先是休眠三秒然后打印出hello world[yinhan@VM-12-12-centos study8]$

这样就貌似先指令了sleep后执行了printf,其实并不是程序都是从上到下进行的。那么这种现象是为什么呢?其实先运行的printf,这里的hello world其实并没有刷新,所以造成看到的现象是如此。那么既然没有被刷新,在sleep期间依然要被保存起来,这里就是保存在缓冲区中。为什么加上\n数据就被直接显示出来呢?缓冲区有自己的刷新策略,\n就是刷新缓冲区的作用。

fflush:在打开以更新的文件(即,打开以读和写)中,在执行输入操作之前,流应在输出操作之后刷新

现象:

其实执行printf的时候,最后扫描到\r的时候,光标自动跳转到所在行的最开始的位置,其实hello world数据并没有丢失,只是放在了缓冲区中,然后还要打印命令行提示符,这时就把hello world给覆盖了。

不带\r:

现象:

先执行printf,hello world写入到缓冲区,然后fflush刷新缓冲区,然后休眠三秒打印命令行提示符。

1.3 倒计时小程序实现

1.4 进度条小程序实现

demo:

为什么这里写的Makefile里面的myproc依赖列表没有写proc.h,程序也能运行呢?

程序运行时会在该路径下去找头文件,所以可以不用包含。

2. 分布式版本控制系统-git使用

2.1 git历史

网上很多视频或者历史介绍这里就不再介绍,有兴趣可以去查一查。git的由来

2.2 git版本控制理解

故事:假如说学校里你有个同学叫李四,你们班上要上交实验报告,然后你先等着李四先做,看看情况,李四花了两个小时写完了实验报告,然后用QQ上交给老师检查,老师一看排版、措辞等等都有问题,然后打回,李四再在原实验报告上再改了一次,上交给老师看,老师说你这个排版、语法啥的还是有点问题,问题不是很大,然后打回给李四,李四再在原报告上修改,改完后给老师看,老师看了之后说你这比上一次修改的还要差,老师说你把第二次的拿给我就行了,此时李四都是在原报告上改的,没有第二个版本,最终就上交了。此时,你注意到李四上交情况,然后你对每次老师打回的实验报告都拷贝存放了一份,最终你改了有四个版本的报告,老师让你上交第二次修改的,也就是第二个版本的,你这时直接拿着第二个版本就上交了,然后得到了高分。这里的我就做了版本控制,解决了找回历史版本的问题。程序员就相当于这里的我,然后产品经理就相当于老师,程序员给没个成熟阶段的软件打上标签就是做了版本控制的工作。

2.3 git使用

Linux上安装git:==yum install -y git(root用户)==或者sudo yum install -y git

2.3.1 gitee搭建远程仓库

网上有很多教程,这里不过多介绍。

2.3.2 开始配置

在你当前用户目录(也就是~目录)下或者其他你想要的目录下执行命令:git clone HTTPS网址

什么是本地仓库?.git就是本地仓库,里面的东西不要随便修改

git三板斧:git add/git commit/git push

注意

git commit后面所写的内容一定要有效记录你所做的事情

3. Linux调试器-gdb的使用

3.1 背景

程序的发布方式有两种,debug模式(调试版本)和release模式(发布版本)。==Linux gcc/g++出来的二进制程序,默认是release模式。==要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。公司中测试程序员的就是release模式,来进行测试。

观察到少了-g选项,就没有找到调试标志,所以编译时要添加-g选项,就是以debug模式进行编译程序。

3.2 使用指令

进入调试模式:gdb 可执行程序文件名

l/list 行号:从该行号对应的行依次列出十行源代码

l/list 函数名:列出该函数的源代码

r/run:运行程序

break/b 行号:在改行设置断点

info break:查看断点信息

d/delete n:删除序号为n的断点

d/delete:删除所有断点

disable breakpoint n:禁用序号为n的断点

enable breakpoint n:启用序号为n的断点

s/step:逐语句(进入函数)

n/next:逐过程(不进入函数)

breaktrace/bt:查看各级函数调用及参数

p 变量名:打印变量值

set var 表达式(比如:i = 100):修改变量的值

display 变量名:跟踪查看一个变量,每次停下来都显示它的值(长显示)

undisplay 序号:取消序号对应的变量的跟踪

until 行号:跳转到对应的行号所在行,执行完区间代码

finish:进入一个函数执行完该函数就停下来

continue/c:从一个断点处直接运行至下一个断点处

quit:退出gdb调试器

所有查看内容的指令并不会影响调试的指令

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

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

相关文章

Revit教程:创建“幕墙竖梃族”的方法步骤

幕墙竖梃族分为两个组成部分:“幕墙竖梃”和“公制轮廓-竖梃”,前者是基于后者轮廓的一个实体拉伸,两者的关系类似于实体与草图。轮廓族及门窗族 (公制门-幕墙,公制窗-幕墙而非公制门与公制窗)可以嵌套入CAD详图或Revit详图&#…

93、【树与二叉树】leetcode ——222. 完全二叉树的节点个数:普通二叉树求法+完全二叉树性质求法(C++版本)

题目描述 原题链接:222. 完全二叉树的节点个数 解题思路 1、普通二叉树节点个数求法 (1)迭代:层序遍历BFS 遍历一层获取一层结点 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode …

【九】Netty HTTP+XML协议栈开发

HTTP协议介绍业务场景流程图技术栈设计流程图的分析:Step 1Step2Step3Step4Step5分析结果开发开发流程图代码jar 依赖代码结构如图pojo 包request包response 包client 包server包编码解码基类代码说明测试服务端打印结果客户端打印结果总结介绍 由于HTTP协议的通用性&#xff…

使用js实现一个可以【放烟花】的小游戏

放烟花游戏需求👇核心玩法👇👇界面原型👇👇成品演示👇游戏开发1.游戏素材准备2.代码实现1.创建index.html页面2.首页-开始3.加载烟花音效4.重玩儿放烟花的小游戏。点击页面放烟花。兼容移动端。 游戏需求 …

作为普通网民,这些“实用电脑神器”,值得你知道

国内软件夹缝里求生存,由于某些不良软件,许多人对于国产软件认识多为“流氓、捆绑、多广告”,其实并非如此,下面几款让你刮目相看,扭转观念。 1、图片视频画质增强器 这是一款功能极其强大的图片与视频画质增强器&…

阿里云数据湖3.0解决方案两度登上InfoQ 2022年度榜单

经过一个多月的层层竞选,【阿里云数据湖 3.0 解决方案】从 130 多个方案中脱颖而出,荣获 InfoQ 2022 年度中国技术力量年度榜单《十大云原生创新技术方案》&《云原生十大场景化落地方案》双料大奖,这是头部技术媒体对阿里云存储的再一次认…

低代码是什么?有什么优势?一文看懂LowCode

低代码到底是什么?用最简单的方式告诉我?低代码是近两年来一个很热门的概念,尤其是疫情的影响,市场对低代码的需求不断增加,但到底什么是低代码?它到底有什么好处?这篇就为大家解答这个问题&…

vue2.0 插槽不是响应性的

请注意插槽不是响应性的。如果你需要一个组件可以在被传入的数据发生变化时重渲染,我们建议改变策略,依赖诸如 props 或 data 等响应性实例选项。-- vm.$slots 问题描述 项目中自定了组件 widget,作为容器,其中 header 部分做了预…

SCI投稿:MDPI旗下期刊Mathematics投稿经历

最近写了篇论文,由于国内期刊现状(懂的都懂),打算投国外的期刊,看来看去选择投MDPI旗下的Mathematics。手稿经过一轮大修之后顺利收到了Accepted,过程还是比较顺利的,记录一下投稿过程。 论文撰…

Matlab实现的FEMIC的说明书

FEMIC程序是用来反演小回路频域电磁感应数据的。要启动代码,在Matlab命令窗口中输入start,然后点击“Enter”或“返回”按钮。然后会出现FEMIC的主界面,见图1。 它由几个输入区域组成,这几个区分别实现了:加载数据,反演过程控制和最终显示。 图1 主界面 下面对这些输入…

[oeasy]python0045_四种进制_binary_octal_decimal_hexadecimal

四种进制 回忆上次内容 上次研究了 通过 八进制数值 转义 \ooo把(ooo)8进制对应的ascii字符输出 转义序列 \n、\t 是 转义序列\xhh 也是 转义序列\ooo 还是 转义序列 现在 总共有 几种进制 了呢?🤔 先数一下 树 数树 树 就是这么多棵树 用八进制的…

Redis持久化Redis主从

Redis持久化 RDB持久化 RDB: Redis数据备份文件。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。 主要流程 bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成f…

误删的文件不在回收站如何找回?分享一些恢复数据的教程

电脑清理的文件数据,一般都会经过回收站。如果想要恢复回来,可以直接打开电脑的回收站来寻找。可凡事都有万一,我们删除的文件不在回收站里面。这是什么原因?误删的文件不在回收站如何找回?今天就来分享如何恢复不在回…

git快速学习笔记

1.目标 了解Git基本概念能够概述git工作流程能够使用Git常用命令熟悉Git代码托管服务能够使用idea操作git 2.概述 2.1开发中的实际场景 场景一:备份 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光…

C语言进阶(6)——结构体

文章目录1.结构体的基础知识2.结构体的声明3.特殊的声明4.结构体的自引用6. 结构体的内存对齐7.修改默认对齐数8.结构体传参位段1、位段定义2. 位段的内存分配3.位段的跨平台问题4.位段的运用场景1.结构体的基础知识 结构是一些值的集合,这些值称为成员变量。结构的…

51单片机——LED基础

从小就对电器元件比较感兴趣吧,经常拿坏的电器里面的芯片拆下来玩,甚至那些没坏的电器,比如我家的电视,也会希望它能坏掉,我好去看看里面是什么样子的,为什么能播放节目……,所以我第一眼看到51…

阿里云-解决EDAS创建应用文件过大无法上传部署问题

文章目录1、背景2、问题具体描述3、解决方案3.1、 2种方案3.2 、OSS 简介3.3、 OSS 功能特性4、 OSS 实操4.1、 上传程序文件4.2、 创建应用1、背景 在一次使用阿里云-EDAS发布应用服务过程中出现EDAS 上传应用包过大无法上传现象。 2、问题具体描述 最近在使用阿里云-EDAS发…

1.1.2续 特殊二极管部分选型

目录 1.稳压管 2.发光二极管 4.光电二极管 5.整流二极管 1.稳压管 利用二极管的反向击穿特性制成的,在电路中其两端的电压保持基本不变,起到稳定电压的作用 Vz 稳定电压:反向击穿后稳定工作的电压 Iz 稳定电流:工作电压等于…

Java异常情况了解

作者:爱塔居的博客_CSDN博客-JavaSE,数据结构领域博主 专栏:JavaSE 作者介绍:大三学生,希望一起进步~ 文章目录 目录 文章目录 一、异常结构体系 二、异常分类 三、异常处理 3.1异常抛出 3.2 异常捕获 四.【面试题】 五、题目练习…

大数据必学Java基础(一百一十九):Maven仓库与JDK的配置

文章目录 Maven仓库与JDK的配置 一、Maven仓库 二、JDK的配置 Maven仓库与JDK的配置 一、Maven仓库 Maven仓库是基于简单文件系统存储的,集中化管理Java API资源(构件)的一个服务。 仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路…