⭐博客主页:️CS semi主页
⭐欢迎关注:点赞收藏+留言
⭐系列专栏:Linux
⭐代码仓库:Linux
家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我创作最大的动力,欢迎友友们私信提问,家人们不要忘记点赞收藏+关注哦!!!
我们在前面讲完gcc 和 g++的基本使用以后,我们开始讲解gdb和git的使用!
C语言中有很多字符:
1、可显示字符
2、控制字符
\r回车概念 — 是将光标移动到该段最左边
\n换行概念 — 是另起一段
简单来讲,我们按我们的键盘中的回车键,在编译器内部实现的是先换行再光标到最左边,也就是有些老的键盘是如下图所示的样子:
我们的程序打印内容是先存放到缓冲区中的,只有当我们的程序运行到return 0结束的时候,缓冲区的数据才会被清空,也就是打印到显示器上,重点我们要看光标的位置,如下图我们看一下\n和\r对缓冲区的影响。
1 #include"proc.h"
2
3 #define SIZE 102
4 #define SYMBOL '*'
5
6 void process()
7 {
8 char bar[SIZE];
9 memset(bar, '\0', sizeof(bar));
10 int i = 0;
11 while(i <= 100)
12 {
13 printf("[%-100s]\r", bar);
14 fflush(stdout);
15 bar[i++] = SYMBOL;
16 bar[i] = '>';
17 usleep(100000);
18 }
19 printf("\n");
20 }
改进:
1 #include"proc.h"
2
3 #define SIZE 102
4 #define SYMBOL '*'
5
6 void process()
7 {
8 const char * lable = "/-|\\";
9 char bar[SIZE];
10 memset(bar, '\0', sizeof(bar));
11 int i = 0;
12 while(i <= 100)
13 {
14 printf("[%-100s][%d][%c]\r", bar, i, lable[i%4]);
15 fflush(stdout);
16 bar[i++] = SYMBOL;
17 if(i != 100) bar[i] = '>';
18 usleep(100000);
19 }
20 printf("\n");
21 }
每改一个版本,都将原本的版本进行存档,而如果扩大了受众面,大家都将自己写的代码和程序版本上传给一个管理员的服务器上,那么就为版本管理,而当我们的软件和服务器做大了以后,萌生出来做一个网站更加方便大家进行保存并提交代码的操作,其网站就为gitub和gitee,所以这两个网站的底层就是git命令行。
创建好一个放置代码的目录
git clone [url]
这里的 url 就是刚刚建立好的 项目 的链接
将代码放到刚才下载好的目录中
git add [文件名]
将需要用 git 管理的文件告知 git
提交改动到本地
同步到远端服务器上,需要填入用户名密码. 同步成功后, 刷新 Github 页面就能看到代码改动了。
这三个命令都是比较简单的,合并起来看。
我们先来再linux下安装一下git,我们的指令代码如下:
普通用户:sudo yum install -y git + 普通用户密码
超级用户:yum install -y git
我用一下新建立的仓库的内容进行演示一下:
我们先复制一下http的网站地址。
再在Linux下用指令git clone+复制的网站地址(注意是要开源的,不然需要输入账号密码)。
这个.git就是我们的本地仓库,里面的内容是git仓库大佬进行写的底层的代码。说明我们的远端仓库和本地仓库是关联的,靠着底层的代码进行连接。
再利用git add . 将只是拷贝到当前目录下的文件和代码存放到本地仓库的暂存区。其实说的深一点就是放到暂存区,我们当前先暂时理解为存放到.git本地仓库里面的暂存区,还未放入本地仓库。
也就是正式将linux中的文件和代码提交到.git文件,也就是本地文件。
git commit -m “XXX” (里面的命名不要随意命名!!!)
作为第一次使用git的新人,我们肯定需要让git认识你,也就是需要给git提供你的信息。遇到下面的问题:
所以配置一下,也就是输入前面的提示加邮箱名字。
git config --global user.email “[email protected]”
git config --global user.name “Your Name”
如下图,我们就成功将我们的代码和文件写到本地的.git仓库中了。
linux中想要提交的文件输入git push命令再加上在网页上刷新即可,注意的是是将远端仓库中没有的提交上去(注意,这个操作是建立在已经保存到本地仓库了)。
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
我们先进行一系列操作如下:
注意:linux下gcc/g++默认形成的可执行程序是release的,不是debug的。
先把我们的所有命令罗列出来:
gdb binFile 退出: ctrl + d 或 quit 调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
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,有些云服务器下不需要安装,如果要安装的话用下面这行指令。
安装指令:
sudo yum install -y gdb
这里需要注意的是我们的linux下默认是release版本的,是不能进行调试的,所以我们需要转换到debug下进行调试。
如若出现上图的情形,切换到debug,也就是在Makefile下加个-g即能切换到debug了。
l+行号:
从该行号起往后10打印十行。
(l 0 和 l 1一样)
d+Num:删断点,这个很重要,删除的是Num编号而不是我们当时候打断点的位置!!!(小知识,当我们没有退出gdb,删除断点以后,这个Num不会从1开始,而是号码会依次递增的)
d+breakpoints:删除所有断点。
断点使能就是我们的断点不删掉,而变成空心的红点点,为了避免我们删掉断点以后我们忘记了之前是在那边打的断点,先将断点保留,不让它有用,我们先看一下什么是是断点使能:
关闭:
注意,断点打了但是给关了 / 断点删除进行r跑代码的操作都会跑到结尾。
即将一个函数直接执行完。
而在main中往后执行语句,而遇到函数则是直接将函数进行执行,不进入函数体内部。
查看当前该字母的值或者是地址。
既可以显示内置类型,也能够显示结构体等自定义类型,以及C++中的STL库。
进入一个函数执行完该函数就停下来。
家人们不要忘记点赞收藏+关注哦!!!