【Linux】调试和Git及进度条实现

这里是阿川的博客,祝您变得更强

✨ 个人主页:在线OJ的阿川
💖文章专栏:Linux入门到进阶
🌏代码仓库:


写在开头

现在您看到的是我的结论或想法但在这背后凝结了大量的思考、经验和讨论


在这里插入图片描述

在这里插入图片描述

目录

  • 1. 简易版倒计时
  • 2. 进度条实现(简易版)
  • 3. 进度条实现(调用版)
  • 4. 进度条实现(回调函数版)
  • 5. 进度条实现(颜色版)
  • 6. Git的介绍
  • 7. Gitee简介
  • 8. 调试


1. 简易版倒计时

实现一个倒计时:
拥有反斜杠/n可以立马刷新,但会自动换行
fflush 可以立马刷新且不会自动换行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2. 进度条实现(简易版)

已经创建好了processBar.h、processBar.c、main.c、可执行程序processbar,如图1所示:
在这里插入图片描述

图1 文件展示
  1. vim processBar.c进入头文件,进行修改,具体如下:
// 引入运行程序、字符串、fflush的源文件
#include "processBar.h"
#include<string.h>
#include<unistd.h>
// 定义字符串常量
const char *lable="|/-\\";
// 具体实现的代码
void processbar(int speed)
{char bar[NUM];// 初始化字符数组memset(bar,'\0', sizeof(bar));int len = strlen(lable);int cnt = 0;while(cnt <= TOP){printf("[%-100s][%d%%][%c]\r", bar, cnt, lable[cnt%len]);// 从左往右以百分号%及旋转体表现进度条// fflush立刻刷新缓存区输出fflush(stdout);// 考虑边界问题bar[cnt++] = BODY;if(cnt < 100) bar[cnt] = RIGHT;// usleep以微秒为单位进行输出usleep(speed);}// 换行printf("\n");
}
  1. vim processBar.h进入源文件,进行修改,具体如下:
#pragma once
#include <stdio.h>
// 宏定义进行封装
#define NUM 102
#define TOP 100
#define BODY '='
#define RIGHT '>'extern void processbar(int speed);
  1. vim main.c进入主函数,进行修改,具体如下:
#include "processBar.h"
#include <unistd.h>
// 主函数表现
int main()
{processbar(50000);return 0;
}
  1. make 重新编译,再./processbar运行可执行程序,具体效果如图2所示:
    在这里插入图片描述
图2 效果图

3. 进度条实现(调用版)

如何调用进度条功能

  1. vim processBar.c进入头文件,进行修改,具体如下:
// 引入运行程序、字符串、fflush的源文件
#include "processBar.h"
#include<string.h>
#include<unistd.h>
// 定义字符串常量
const char *lable="|/-\\";
char bar[NUM];
// 将函数调用进度的占比率传入参数
void processbar(int rate)
{if(rate < 0 || rate > 100) return;int len = strlen(lable);printf("[%-100s][%d%%][%c]\r", bar, rate, lable[rate%len]);fflush(stdout);bar[rate++] = BODY;if(rate < 100) bar[rate] = RIGHT;
}
  1. vim processBar.h进入源文件,进行修改,具体如下:
#pragma once
#include <stdio.h>
// 宏定义进行封装
#define NUM 102
#define TOP 100
#define BODY '='
#define RIGHT '>'// 更改声明
extern void processbar(int rate);
  1. vim main.c 进入主函数,进行修改,具体如下:
#include "processBar.h"
#include <unistd.h>
// 主函数表现
int main()
{// 设置目标变量和当前变量的值int total = 1000;int curr = 0;while(curr <= total){// 换算成百分比的值processbar(curr*100/total);// 设置下载一个任务的增加进度curr += 10;// 加快速度usleep(50000);}// 换行printf("\n");return 0;
}
  1. make重新编译一下,./processbar再运行可执行程序,具体如图3所示:
    在这里插入图片描述
图3 效果图

4. 进度条实现(回调函数版)

  1. 只vim main.c修改主函数,其余processBar.h、processBar.c不变
#include "processBar.h"
#include <unistd.h>// 引入函数指针类型
typedef void (*callback_t)(int);
// 模拟安装或下载进度
void download(callback_t cb)
{// 设置目标变量和当前变量的值int total = 1000;int curr = 0;while(curr <= total){// 换算成百分比的值及加快速度usleep(50000);int rate = curr*100/total;// 通过回调函数,展示进度cb(rate);// 设置下载一个任务的增加进度curr += 10;}printf("\n");
}
int main()
{// 调用函数download(processbar);return 0;
}
  1. make重新编译一下,./processbar再运行可执行程序,具体如图3所示:
    在这里插入图片描述
图3 效果图

5. 进度条实现(颜色版)

C语言颜色的宏定义,大致如下

// \033表示告诉系统要进行颜色设置;[m表示要进行颜色关闭#define NONE         "\033[m"
#define RED          "\033[0;32;31m"
#define GREEN        "\033[0;32;32m"
#define BLUE         "\033[0;32;34m"
#define CYAN         "\033[0;36m"
#define PURPLE       "\033[0;35m"
#define BROWN        "\033[0;33m"
#define YELLOW       "\033[1;33m"
#define WHITE        "\033[1;37m"
  1. vim processBar.c进入头文件,进行修改,具体如下:
// 引入运行程序、字符串、fflush的源文件
#include "processBar.h"
#include<string.h>
#include<unistd.h>
// 定义字符串常量
const char *lable="|/-\\";
char bar[NUM];
// 进行颜色宏定义
#define BLUE "\033[0;32;34m"
// [m表示颜色应用结束
#define NONE "\033[m"// 将函数调用进度的占比率传入参数
void processbar(int rate)
{if(rate < 0 || rate > 100) return;int len = strlen(lable);// 将blue和none插入到[%-100s]中printf(BLUE"[%-100s]"NONE"[%d%%][%c]\r", bar, rate, lable[rate%len]);fflush(stdout);bar[rate++] = BODY;if(rate < 100) bar[rate] = RIGHT;
}
  1. make重新编译一下,./processbar再运行可执行程序,具体如图4所示:
    在这里插入图片描述
图4 效果图

6. Git的介绍

必要性:在公司中,每个编程人员必使用
定义:Git是一个具有网络功能的开源的版本控制器(将远端和本地部署为一体【版本控制器主要是处理各种各样变化的需求,只记录变化】),也可用于多人协作(将一份版本开源,大家一起协助),具体如图5所示:
在这里插入图片描述

图5 Git功能

可操作性: 操作挺多,这里无法详细的讲完,我会单独出一篇博客详细讲解,关注我,后面更新……


7. Gitee简介

定义:而国内的Gitee和国外的GitHub都是基于Git的商业化软件.
必要性:为以后找工作提前铺路,可以将每天的代码上传到该平台上且将该链接可以写在简历中,方便面试官更好的全面认识你。纵使不找工作,记录代码的习惯也是优秀的编程人员所必备的基本素质。
可操作性:大致的提一下国内的Gitee使:
1. 在初始化仓库中:

  • .gitignore:在里面的文件后缀,在推送或下载中均不上传具有相同的文件后缀的文件,具体如图7所示
  • 选择语言:初始仓库语言
  • 添加开源许可证:类似于一个合同,要遵循相应的规定

2. 在设置模板中:

  • Readme文件:类似于说明书
  • lssue和Pull Request模板文件及选择分支模型:涉及到多人协作相关

具体如图6所示
在这里插入图片描述

图6 展示图

在这里插入图片描述

图7 .gitignore具体图

各种操作指令:

  1. 先在Linux中安装git,指令如下:
yum install git
  1. git clone 仓库的完整链接:将远端仓库克隆到本地,如图8所示
  2. git add .:将当前目录下新增的内容添加到本地中,如图9所示
  3. git commit -m “提交的信息”:提交到本地并添加提交日志,如图9所示
  4. git push:推送到远端,如图10所示
  5. git log:可以查看历史信息,如图11所示
  6. git status:查看文件状态,如图12所示
    在这里插入图片描述
图8 git clone图

在这里插入图片描述

图9 add和commit图

在这里插入图片描述

图10 git push图

在这里插入图片描述

图11 git log图

在这里插入图片描述

图12 git status图

8. 调试

前提:程序发布的方式有debug模式和release模式,而调试必须在debug模式下进行,而可执行程序默认为release模式,若要改成 debug模式,需要在源代码生成二进制程序的时候加上-g选项,如图13所示:
在这里插入图片描述

图13 debug模式

指令:gdb
readelf -S 可执行程序:可读取程序的二进制信息,具体如图14所示:
在这里插入图片描述

图14 readelf模式

各种操作指令:

  1. gdb 可执行程序:进入gdp,具体如图15所示:
  2. q:退出gdp,具体如图15所示:

在这里插入图片描述

图15 gdb和q模式
  1. l 0:展示可执行程序内容,再按空格才会显示剩余内容,具体如图16所示:
  2. r:运行程序,具体如图16所示:

在这里插入图片描述

图16 l 0 和r模式
  1. b 行号:指定行打断点,具体如图17所示:
  2. info b:查看断点(Num是断点编号,Type断点类型,Enb是否开启,Address断点地址,What打在什么位置),具体如图17所示:
  3. d 断点编号:删除断点,具体如图17所示:

在这里插入图片描述

图17 b和info b和d模式
  1. n:逐过程,具体如图18所示:
  2. s:逐语句,具体如图18所示:

在这里插入图片描述

图18 n和s模式
  1. p 监视变量名:监视特定变量,具体如图19所示:
  2. display 监视变量名:常展示变量,具体如图19所示:
  3. undisplay 监视编号:取消变量的常展示,具体如图19所示:

在这里插入图片描述

图19 p和display和undisplay模式
  1. until 行数:直接跳转到指定函数,具体如图20所示:
  2. finish:直接运行完整个函数,具体如图20所示:

在这里插入图片描述

图20 until和finish模式
  1. c:直接从一个断点运行到另外一个断点处,具体如图21所示:
    在这里插入图片描述
图21 c模式
  1. disable 断点编号:禁用断点,具体如图22所示:
  2. enable 断点编号:打开断点,具体如图22所示:

在这里插入图片描述

图22 disable和enable模式
  1. set var 变量名=?:给变量设置指定值,具体如图23所示:

在这里插入图片描述

图23 set var模式
  1. bt:可查看入了多少栈,具体如图24所示:

在这里插入图片描述

图24 bt模式
  1. info locals:可查看当前的局部变量,具体如图25所示:

在这里插入图片描述

图25 info locals模式

9. 夹带私货

若你能看到看到这篇文章且能看到这,则说明你我有缘留个关注吧,后面还会接着计算机408、底层原理、开源项目、以及数据、后端研发相关、实习、笔试/面试、秋招/春招、各种竞赛相关、简历相关、考研、学术相关……,祝你我变得更强

好的,到此为止啦,祝您变得更强
在这里插入图片描述
10.想说的话

实不相瞒,写的这篇博客写了六个小时(加上自己学习和纸质笔记,共九小时吧),很累希望大佬支持

在这里插入图片描述

道阻且长 行则将至
个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

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

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

相关文章

KVM创建的虚拟机无法访问外网

基础环境如下&#xff1a; [rootlocalhost ~]# virsh domifaddr CentOS7_YFName MAC address Protocol Address -------------------------------------------------------------------------------vnet0 52:54:00:cb:a6:0d ipv4 192.168.…

Java中的事务管理

1.1 事务管理 1.1 事务回顾 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时失败。 怎么样来控制这组操作&#xff0c;让这组操…

OpenCV高阶操作

在图像处理与计算机视觉领域&#xff0c;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;无疑是最为强大且广泛使用的工具之一。从基础的图像读取、 1.图片的上下&#xff0c;采样 下采样&#xff08;Downsampling&#xff09; 下采样通常用于减小图像的…

RabbitMQ(高阶使用)延时任务

文章内容是学习过程中的知识总结&#xff0c;如有纰漏&#xff0c;欢迎指正 文章目录 1. 什么是延时任务&#xff1f; 1.1 和定时任务区别 2. 延时队列使用场景 3. 常见方案 3.1 数据库轮询 优点 缺点 3.2 JDK的延迟队列 优点 缺点 3.3 netty时间轮算法 优点 缺点 3.4 使用消息…

安卓BLE蓝牙通讯

蓝牙测试demo 简介   Android手机间通过蓝牙方式进行通信&#xff0c;有两种常见的方式&#xff0c;一种是socket方式&#xff08;传统蓝牙&#xff09;&#xff0c;另一种是通过GATT&#xff08;BLE蓝牙&#xff09;。与传统蓝牙相比&#xff0c;BLE 旨在大幅降低功耗。这样…

【Obsidian】当笔记接入AI,Copilot插件推荐

当笔记接入AI&#xff0c;Copilot插件推荐 自己的知识库笔记如果增加AI功能会怎样&#xff1f;AI的回答完全基于你自己的知识库余料&#xff0c;是不是很有趣。在插件库中有Copilot插件这款插件&#xff0c;可以实现这个梦想。 一、什么是Copilot&#xff1f; 我们知道githu…

香橙派zero2w上手——环境配置添加OLED小屏幕

0 硬件参数 origin pi zero2W 硬件参数 CPU全志 H618 四核 64 位 1.5GHz Cortex-A53 处理器GPUMali G31 MP2&#xff0c;支持OpenGL ES 1.0/2.0/3.2&#xff0c;OpenCL 2.0&#xff0c;Vulkan 1.1内存LPDDR4:1GB/1.5GB/2GB/4GB (可选)存储SPI Flash: 16MBWiFi蓝牙WiFi蓝牙二合…

将硬盘的GPT 转化为MBR格式

遇到的问题 在重新安装系统时&#xff0c;磁盘遇到无法空间分配给系统。 解决方式 使用Windows10镜像 U盘安装&#xff0c;选择磁盘时&#xff0c;转换磁盘格式为MBR。然后退出安装程序。 Shift F10# 输入 diskpart# 查看磁盘信息 list disk# 选择需要转换的磁盘&#xff0…

【网络安全的神秘世界】攻防环境搭建及漏洞原理学习

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 Kali安装docker 安装教程 PHP攻防环境搭建 中间件 介于应用系统和系统软件之间的软件。 能为多种应用程序合作互通、资源…

一、机器学习算法与实践_02KNN算法笔记

1、KNN基本介绍 1.1 定义 KNN&#xff08;K-NearestNeighbor&#xff0c;即&#xff1a;K最邻近算法&#xff09;是一种基于实例的学习方法&#xff0c;用于分类和回归任务&#xff0c;它通过查找一个数据点的最近邻居来预测该数据点的标签或数值。 所谓K最近邻&#xff0c;…

Golang | Leetcode Golang题解之第402题移掉K位数字

题目&#xff1a; 题解&#xff1a; func removeKdigits(num string, k int) string {stack : []byte{}for i : range num {digit : num[i]for k > 0 && len(stack) > 0 && digit < stack[len(stack)-1] {stack stack[:len(stack)-1]k--}stack app…

python-简单的数据结构

题目描述 小理有一天在网上冲浪的时候发现了一道很有意思的数据结构题。 该数据结构形如长条形。 一开始该容器为空&#xff0c;有以下七种操作。 1 a从前面插入元素 a ; 2 从前面删除一个元素; 3 a从后面插入一个元素; 4 从后面删除一个元素; 5 将整个容器头尾翻转; 6 输出个…

Mysql调优之性能监控(一)

前言&#xff1a; 官网就是最好的老师&#xff1a;MySQL&#xff0c;里面各种语法跟参数跟性能调试工具 一、使用show profile查询剖析工具 -- 开启 SET profiling 1; -- 关闭 SET profiling 0; -- 显示查询的性能分析信息 show profiles; -- 显示具体查询id的执行步骤耗时 S…

【视频教程】基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

直流无刷电机霍尔线序自学习解释

直流无刷电机霍尔线序自学习 步骤详解 1. 初始连接 连接电机的三相线&#xff1a;A、B、C。连接霍尔传感器线&#xff1a;HA、HB、HC。 2. 输入电压组合与霍尔信号记录 电机的电压输入组合和霍尔信号记录是电机控制系统中至关重要的一部分&#xff0c;它们决定了电机的运转…

codeup:将已有文件夹推送到已有仓库

codeup&#xff1a;将已有文件夹推送到已有仓库 总流程git initgit remote add origin https://codeup.aliyun.com/xxx/xxx.gitgit pull 远程库别名 mastergit add .git commit &#xff08;会遇到很多问题&#xff09;git push -u origin master &#xff08;会遇到很多问题&a…

【OpenAPI】Spring3 集成 OpenAPI 生成接口文档

Spring3 集成 OpenAPI 生成接口文档 1. 依赖 Spring 版本&#xff1a;3.0.5 Java 版本&#xff1a;jdk21 OpenAPI 依赖&#xff1a; <!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui --> <dependency><groupI…

JetLinks物联网学习(前后端项目启动)

前后端项目启动 1、后端1.1 pgsql改mysql报错2、elasticSearch7.0版本以上_doc格式取消 2、前端 1、后端 环境准备&#xff1a; 1、window系统7,8&#xff0c;10 。 硬件资源最低要求4c8G&#xff0c;硬盘40G 2、JDK 1.8.0_2xx (需要小版本号大于200) 3、Maven3.6.3 4、Redis …

渗透测试入门学习——php表单form与POST、GET请求练习

最终效果&#xff1a; 必填项为空报错提示&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>php表单练习</title> </head> <body> <?php//php中的…

二十种编程语言庆祝中秋节

二十种编程语言庆祝中秋节 文章目录 二十种编程语言庆祝中秋节中秋快乐&#xff01;家人们 &#x1f973;一 Python二 C三 C四 Java五 C#六 Perl七 Go八 Asp九 PHP十 JavaScript十一 JavaScript HTML十二 Visual Basic十三 早期 VB十四 Visual C十五 Delphi十六 Shell十七 Cobo…