【Linux】Linux小程序(进度条)、git命令行的使用及gdb的使用

简介: 【Linux】Linux小程序(进度条)、git命令行的使用及gdb的使用

辛勤的蜜蜂永没有时间悲哀。                                                            ——布莱克

c1ae9dd02fe458d477c162b3e98572f1_ba0d3f5bde8a4e738ca10d3b70739bb9.gif

目录

\r和\n的区别:

进度条小程序  

git 命令行

Linux调试器:gdb的使用

背景

gdb的使用

gdb调试指令:


\r和\n的区别:

\r:回车

\n:换行

那么这两个有什么区别呢?


   (1)让光标从第一行跳到第二行,但是光标只是垂直向下跳,并没有在第二行的开始。这个操作就是换行(\n)。


   (2)在第二行让光标跳到最开始的位置,这个操作就是回车(\r)。


当只有\r时的运行结果:

bf29961e2bd82ffbabac0069847170f6_67a3f28e4c36405d88c049c98cbec31e.png

只有回车,我们可以想象到运行的结果是什么样,答案是:什么都不显示。为什么呢?

  • 回车之后,光标来到了文本行的开始位置,此时linux的命令行就会从光标处开始,将我们的文本覆盖掉,我们就什么也看不到

当只有\n时的运行结果:

63287f2f3df2191d28a3a1e639536510_1631b4d9495e4ba6b864a6e15918b2fe.png

此时test.c文件有\n(行缓冲区内容打印)


此时运行,打印出hello world 这时光标会停3秒


如果没有\n,会先停3秒然后再打印出hello  world


无论是否有\n时,都是先走printf再sleep的,当有\n时如果读到了\n的位置就会先将行缓冲区的内容马上打印出来再往下走。


注意:fflush函数可以立马刷新行缓冲区


当\r和\n同时再的时候:

5c398034c4fb9500ba0b0d61e8ffeb5e_7ed7b650a9a242babc0b6834e3bce5db.png

进度条小程序  

#include "proc.h"  
  2   
  3   
  4 #define SIZE 102  
  5 #define STYLE '='  
  6 #define ARR ">"  
  7   
  8 void process()  
  9 {  
 10   const char *lable = "|/-\\";  
 11    char bar[SIZE];  
 12     memset(bar, '\0', sizeof(bar));  
 13     int i = 0;  
 14     while( i <= 100 )  
 15     {  
 16         printf("[\033[42;32;31m%-100s\033[0m][%d%%][%c]\r", bar, i, lable[i%4]);  
 17         fflush(stdout);  
 18         bar[i++] = STYLE;  
 19                                                                                                           
 20         usleep(100000);//usleep是微秒,1秒等于1000000微秒  
 21     }                                                      
 22     printf("\n");                                         
 23 }

proc.h文件:

#include<stdio.h>
#pragma once
extern void proc();

git 命令行

检查Linux是否安装git:


git --version


如果没有,安装指令是


sudo yum install -y git


clone一个远端仓库:


复制仓库的链接


1d781ae538516f6b68bfc3e990410196_9c4b1e0243034def82177e0e47a7ad8f.png


在Linux中创建远端仓库:


git clone 链接  


提交代码带Git:


git add 文件名


提交当前目录下的所有代码


git commit -m “文字描述”


最后推送到远程:


git push


第一次在Linux提交代码的会出现这个情况:


这里需要你设置邮箱和名字


git config --global user.name"你的名字"


git config --global  user .email"你的邮箱"

Linux调试器:gdb的使用

背景

程序的发布方式有两种,debug模式和release模式

Linux gcc/g++出来的二进制程序,默认是release模式

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

debug为可以调试的版本,release为优化后的版本也就是测试版本了


Linux gcc/g++出来的是二进制文件,默认是release版本。


在VS中,我们可以按F10进入调试


在Linux我们依旧可以调试,要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

gdb的使用

gdb 文件名

gcc生成后默认是release版本,因此是不可以调试的

查看调试信息

readelf -S 文件名

gdb调试指令:

list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

list/l 函数名:列出某个函数的源代码。

r或run:运行程序。

n 或 next:单条执行(逐过程执行)。

s或step:进入函数调用(逐语句执行)

break(b) 行号:在某一行设置断点 break 函数名:在某个函数开头设置断点

d 编号 :删除断点

info break :查看断点信息。

finish:执行到当前函数返回,然后停下来等待命令

print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

p 变量:打印变量值。

set var:修改变量的值

continue(或c):从当前位置开始连续而非单步执行程序

run(或r):从开始连续而非单步执行程序

delete breakpoints:删除所有断点

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

info(或i) breakpoints:参看当前设置了哪些断点

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

undisplay:取消对先前设置的那些变量的跟踪

until X行号:跳至X行

breaktrace(或bt):查看各级函数调用及参数

info(i) locals:查看当前栈帧局部变量的值

quit:退出gdb


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
4月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
68 10
|
4月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
130 3
|
4月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
188 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
4月前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
5月前
|
小程序
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
94 1
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
|
6月前
|
Linux 测试技术 开发工具
CentOS Linux 8使用阿里源(安装jdk11、git测试)
CentOS Linux 8使用阿里源(安装jdk11、git测试)
572 1
|
6月前
|
Linux 开发工具 git
解决 Linux git push 贡献者不同(没有出现绿点)的问题
解决 Linux git push 贡献者不同(没有出现绿点)的问题
|
6月前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
101 0
|
22天前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
37 1
|
4月前
|
NoSQL
技术分享:如何使用GDB调试不带调试信息的可执行程序
【8月更文挑战第27天】在软件开发和调试过程中,我们有时会遇到需要调试没有调试信息的可执行程序的情况。这可能是由于程序在编译时没有加入调试信息,或者调试信息被剥离了。然而,即使面对这样的挑战,GDB(GNU Debugger)仍然提供了一些方法和技术来帮助我们进行调试。以下将详细介绍如何使用GDB调试不带调试信息的可执行程序。
132 0
下一篇
DataWorks