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

在线OJ的阿川 2024-09-17 14:07:02 阅读 91

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

✨ 个人主页:在线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 文件展示

vim processBar.c进入头文件,进行修改,具体如下:

<code>// 引入运行程序、字符串、fflush的源文件

#include "processBar.h"

#include<string.h>

#include<unistd.h>

// 定义字符串常量

const char *lable="|/-\\";code>

// 具体实现的代码

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");

}

vim processBar.h进入源文件,进行修改,具体如下:

#pragma once

#include <stdio.h>

// 宏定义进行封装

#define NUM 102

#define TOP 100

#define BODY '='

#define RIGHT '>'

extern void processbar(int speed);

vim main.c进入主函数,进行修改,具体如下:

#include "processBar.h"

#include <unistd.h>

// 主函数表现

int main()

{

processbar(50000);

return 0;

}

make 重新编译,再./processbar运行可执行程序,具体效果如图2所示:

在这里插入图片描述

图2 效果图


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

如何调用进度条功能

vim processBar.c进入头文件,进行修改,具体如下:

<code>// 引入运行程序、字符串、fflush的源文件

#include "processBar.h"

#include<string.h>

#include<unistd.h>

// 定义字符串常量

const char *lable="|/-\\";code>

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;

}

vim processBar.h进入源文件,进行修改,具体如下:

#pragma once

#include <stdio.h>

// 宏定义进行封装

#define NUM 102

#define TOP 100

#define BODY '='

#define RIGHT '>'

// 更改声明

extern void processbar(int rate);

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;

}

make重新编译一下,./processbar再运行可执行程序,具体如图3所示:

在这里插入图片描述

图3 效果图


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

只vim main.c修改主函数,其余processBar.h、processBar.c不变

<code>#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;

}

make重新编译一下,./processbar再运行可执行程序,具体如图3所示:

在这里插入图片描述

图3 效果图


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

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

<code>// \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"

vim processBar.c进入头文件,进行修改,具体如下:

// 引入运行程序、字符串、fflush的源文件

#include "processBar.h"

#include<string.h>

#include<unistd.h>

// 定义字符串常量

const char *lable="|/-\\";code>

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;

}

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具体图

各种操作指令:

先在Linux中安装git,指令如下:

<code>yum install git

git clone 仓库的完整链接:将远端仓库克隆到本地,如图8所示git add .:将当前目录下新增的内容添加到本地中,如图9所示git commit -m “提交的信息”:提交到本地并添加提交日志,如图9所示git push:推送到远端,如图10所示git log:可以查看历史信息,如图11所示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模式

各种操作指令:

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

在这里插入图片描述

图15 gdb和q模式

l 0:展示可执行程序内容,再按空格才会显示剩余内容,具体如图16所示:r:运行程序,具体如图16所示:

在这里插入图片描述

图16 l 0 和r模式

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

在这里插入图片描述

图17 b和info b和d模式

n:逐过程,具体如图18所示:s:逐语句,具体如图18所示:

在这里插入图片描述

图18 n和s模式

p 监视变量名:监视特定变量,具体如图19所示:display 监视变量名:常展示变量,具体如图19所示:undisplay 监视编号:取消变量的常展示,具体如图19所示:

在这里插入图片描述

图19 p和display和undisplay模式

until 行数:直接跳转到指定函数,具体如图20所示:finish:直接运行完整个函数,具体如图20所示:

在这里插入图片描述

图20 until和finish模式

c:直接从一个断点运行到另外一个断点处,具体如图21所示:

在这里插入图片描述

图21 c模式

disable 断点编号:禁用断点,具体如图22所示:enable 断点编号:打开断点,具体如图22所示:

在这里插入图片描述

图22 disable和enable模式

set var 变量名=?:给变量设置指定值,具体如图23所示:

在这里插入图片描述

图23 set var模式

bt:可查看入了多少栈,具体如图24所示:

在这里插入图片描述

图24 bt模式

info locals:可查看当前的局部变量,具体如图25所示:

在这里插入图片描述

图25 info locals模式

9. 夹带私货

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

好的,到此为止啦,祝您变得更强

在这里插入图片描述

10.想说的话

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

在这里插入图片描述

道阻且长 行则将至
个人主页:在线OJ的阿川

大佬的支持和鼓励,将是我成长路上最大的动力

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。