【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)

⭐博客主页:️CS semi主页
⭐欢迎关注:点赞收藏+留言
⭐系列专栏:Linux
⭐代码仓库:Linux
家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我创作最大的动力,欢迎友友们私信提问,家人们不要忘记点赞收藏+关注哦!!!

Linux环境基础开发工具使用(gdb调试和git的使用)

  • 前言
  • 一、Linux第一个小程序-进度条
    • 1、\r&&\n
    • 2、行缓冲区概念
      • (1)\r&&\n对缓冲区的影响
      • (2)倒计时小程序(凡是显示器打印的所有内容,都是字符)
    • 3、进度条程序
      • (1)三文件之间的链接
      • (2)进度条程序
  • 二、使用 git 命令行
    • 1、git版本管理
    • 2、命令行基本操作
      • (1)git clone
      • (2)git add
      • (3)git commit -m "xxx"
      • (4)git push
      • (5)git rm / git log / git status
    • 3、演示
        • i、我们先新建一个仓库:
        • ii、将远端仓库提交到linux文件中(git clone)
        • iii、将linux文件和代码放到本地仓库的暂存区(git add)
        • iv、利用commit进行将我们修改的内容提交到本地仓库是真的提交(git commit)
        • v、将本地仓库和远端仓库链接起来,提交到远端仓库
        • vi、删除远端的文件
  • 三、Linux调试器-gdb调试
    • 1、背景
    • 2、使用
      • -g:让我们对应的gcc/g++以debug的形式编译程序。
      • debug调试信息与release没有调试信息(readelf)
    • 3、调试
      • (1)安装gdb
      • (2)切换到debug
      • (3)l(list)指令
      • (4)r(run)指令
      • (5)b(breakpoint)+行号 打断点 和 info b 查断点 和 d+Num 删断点
      • (6)断点使能
      • (7)n(next)逐过程----相当于vs中的F10
      • (8)s(step)逐语句 ---- 相当于vs中的F11
      • (9)bt ---- 看栈帧,调用栈
      • (10)p+名称 ---- 与vs监视窗口一样看当前的值或地址
      • (11)display ---- 长显示
      • (12)undisplay+Num编号 ---- 取消长显示
      • (13)until+行号 ---- 跳到相对应的行号(用于结束循环执行完区间代码)
      • (14)finish ---- 跑完一个函数就停下,不往后跑
      • (15)c(continue)
      • (16)set var n=xxx ---- 设置某一个变量特定的值
      • (17)quit ---- 退出gdb


前言

我们在前面讲完gcc 和 g++的基本使用以后,我们开始讲解gdb和git的使用!


一、Linux第一个小程序-进度条

1、\r&&\n

C语言中有很多字符:
1、可显示字符
2、控制字符

\r回车概念 — 是将光标移动到该段最左边
\n换行概念 — 是另起一段

简单来讲,我们按我们的键盘中的回车键,在编译器内部实现的是先换行再光标到最左边,也就是有些老的键盘是如下图所示的样子:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第1张图片

2、行缓冲区概念

(1)\r&&\n对缓冲区的影响

我们的程序打印内容是先存放到缓冲区中的,只有当我们的程序运行到return 0结束的时候,缓冲区的数据才会被清空,也就是打印到显示器上,重点我们要看光标的位置,如下图我们看一下\n和\r对缓冲区的影响。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第2张图片

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第3张图片

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第4张图片

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第5张图片

(2)倒计时小程序(凡是显示器打印的所有内容,都是字符)

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第6张图片
我们换一个i从10开始的设置呢?
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第7张图片

解决方法:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第8张图片

3、进度条程序

(1)三文件之间的链接

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第9张图片

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第10张图片

(2)进度条程序

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第11张图片

  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 }

改进:

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第12张图片

  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 }


二、使用 git 命令行

1、git版本管理

每改一个版本,都将原本的版本进行存档,而如果扩大了受众面,大家都将自己写的代码和程序版本上传给一个管理员的服务器上,那么就为版本管理,而当我们的软件和服务器做大了以后,萌生出来做一个网站更加方便大家进行保存并提交代码的操作,其网站就为gitub和gitee,所以这两个网站的底层就是git命令行。

2、命令行基本操作

(1)git clone

创建好一个放置代码的目录
git clone [url]
这里的 url 就是刚刚建立好的 项目 的链接

(2)git add

将代码放到刚才下载好的目录中
git add [文件名]

将需要用 git 管理的文件告知 git

(3)git commit -m “xxx”

提交改动到本地

(4)git push

同步到远端服务器上,需要填入用户名密码. 同步成功后, 刷新 Github 页面就能看到代码改动了。

(5)git rm / git log / git status

这三个命令都是比较简单的,合并起来看。

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第13张图片

3、演示

我们先来再linux下安装一下git,我们的指令代码如下:
普通用户:sudo yum install -y git + 普通用户密码
超级用户:yum install -y git

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第14张图片

i、我们先新建一个仓库:

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第15张图片
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第16张图片

ii、将远端仓库提交到linux文件中(git clone)

我用一下新建立的仓库的内容进行演示一下:
我们先复制一下http的网站地址。

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第17张图片

再在Linux下用指令git clone+复制的网站地址(注意是要开源的,不然需要输入账号密码)。

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第18张图片

这样就能看一下我们克隆完的文件里面的内容了。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第19张图片

这个.git就是我们的本地仓库,里面的内容是git仓库大佬进行写的底层的代码。说明我们的远端仓库和本地仓库是关联的,靠着底层的代码进行连接。

iii、将linux文件和代码放到本地仓库的暂存区(git add)

我们先简单将原本我写过的代码拷贝到当前文件下。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第20张图片

再利用git add . 将只是拷贝到当前目录下的文件和代码存放到本地仓库的暂存区。其实说的深一点就是放到暂存区,我们当前先暂时理解为存放到.git本地仓库里面的暂存区,还未放入本地仓库。

在这里插入图片描述

iv、利用commit进行将我们修改的内容提交到本地仓库是真的提交(git commit)

也就是正式将linux中的文件和代码提交到.git文件,也就是本地文件。
git commit -m “XXX” (里面的命名不要随意命名!!!)

作为第一次使用git的新人,我们肯定需要让git认识你,也就是需要给git提供你的信息。遇到下面的问题:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第21张图片
所以配置一下,也就是输入前面的提示加邮箱名字。
git config --global user.email “[email protected]
git config --global user.name “Your Name”
在这里插入图片描述

如下图,我们就成功将我们的代码和文件写到本地的.git仓库中了。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第22张图片

v、将本地仓库和远端仓库链接起来,提交到远端仓库

linux中想要提交的文件输入git push命令再加上在网页上刷新即可,注意的是是将远端仓库中没有的提交上去(注意,这个操作是建立在已经保存到本地仓库了)。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第23张图片
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第24张图片

vi、删除远端的文件

还是三板斧。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第25张图片
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第26张图片

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第27张图片


三、Linux调试器-gdb调试

1、背景

程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

2、使用

我们先进行一系列操作如下:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第28张图片
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第29张图片
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第30张图片
注意:linux下gcc/g++默认形成的可执行程序是release的,不是debug的。

-g:让我们对应的gcc/g++以debug的形式编译程序。

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第31张图片

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第32张图片

debug调试信息与release没有调试信息(readelf)

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第33张图片

3、调试

先把我们的所有命令罗列出来:

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

(1)安装gdb

有些云服务器下需要安装gdb,有些云服务器下不需要安装,如果要安装的话用下面这行指令。
安装指令:
sudo yum install -y gdb
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第34张图片

(2)切换到debug

这里需要注意的是我们的linux下默认是release版本的,是不能进行调试的,所以我们需要转换到debug下进行调试。

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第35张图片
如若出现上图的情形,切换到debug,也就是在Makefile下加个-g即能切换到debug了。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第36张图片

(3)l(list)指令

刚进入就按l,是打印出10到19行的内容。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第37张图片

l+行号:
从该行号起往后10打印十行。
(l 0 和 l 1一样)
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第38张图片

从某一行开始回车往后十行十行直到最后一行。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第39张图片

(4)r(run)指令

r:让程序跑起来。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第40张图片

(5)b(breakpoint)+行号 打断点 和 info b 查断点 和 d+Num 删断点

b+行号:给那一行打断点。
在这里插入图片描述

b+文件名:函数名:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第41张图片

info b:查看断点。
在这里插入图片描述

打完断点以后我们跑跑程序看看效果:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第42张图片
发现停在断点处了。

我们再查一下断点:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第43张图片

d+Num:删断点,这个很重要,删除的是Num编号而不是我们当时候打断点的位置!!!(小知识,当我们没有退出gdb,删除断点以后,这个Num不会从1开始,而是号码会依次递增的)
在这里插入图片描述
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第44张图片
d+breakpoints:删除所有断点。

我们再重新跑一下程序:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第45张图片
没断点直接运行到最后了。

(6)断点使能

断点使能就是我们的断点不删掉,而变成空心的红点点,为了避免我们删掉断点以后我们忘记了之前是在那边打的断点,先将断点保留,不让它有用,我们先看一下什么是是断点使能:
关闭:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第46张图片

开启:
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第47张图片

注意,断点打了但是给关了 / 断点删除进行r跑代码的操作都会跑到结尾。

(7)n(next)逐过程----相当于vs中的F10

即将一个函数直接执行完。
而在main中往后执行语句,而遇到函数则是直接将函数进行执行,不进入函数体内部。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第48张图片
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第49张图片

(8)s(step)逐语句 ---- 相当于vs中的F11

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第50张图片

(9)bt ---- 看栈帧,调用栈

在这里插入图片描述

(10)p+名称 ---- 与vs监视窗口一样看当前的值或地址

查看当前该字母的值或者是地址。

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第51张图片

(11)display ---- 长显示

既可以显示内置类型,也能够显示结构体等自定义类型,以及C++中的STL库。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第52张图片

(12)undisplay+Num编号 ---- 取消长显示

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第53张图片

(13)until+行号 ---- 跳到相对应的行号(用于结束循环执行完区间代码)

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第54张图片

(14)finish ---- 跑完一个函数就停下,不往后跑

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

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第55张图片

(15)c(continue)

从一个断电处,直接运行至下一个断点处。
【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第56张图片

(16)set var n=xxx ---- 设置某一个变量特定的值

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第57张图片

(17)quit ---- 退出gdb

【Linux】Linux环境基础开发工具使用(gdb调试和git的使用)_第58张图片


家人们不要忘记点赞收藏+关注哦!!!

你可能感兴趣的:(Linux,git,linux,github,服务器,运维)