Linux下git和gdb的使用

 🚀每日鸡汤:生活不相信眼泪,即使你把眼泪流成珍珠,灰暗的生活也不会因此而闪光。

目录

一、使用git命令行

1.1安装git、配置仓库

Ⅰ.gitignore

Ⅱ.git

1.2git的基本使用

二、Linux调试器-gdb

2.1、gdb的使用

 2.2、 debug与release版本的区别

①release版本大小小于debug版本

 ②readelf -S 可执行程序(debug/release)

2.3、 gdb的基本指令

Ⅰ断点

Ⅱ调试

一、使用git命令行

1.1安装git、配置仓库

安装git :sudo yum install -y git

我们在自己的gitee开创一个仓库,用于上传我们的Linux文件。然后就可以克隆到Linux

 在我们git下来的文件里面除了两个说明书和一个通行证,还有隐藏文件:.gitignore.git. 我们先来谈.gitignore

Ⅰ.gitignore

它的里面全是文件后缀:

 这些后缀是做什么的呢?凡是在.gitignore里面的后缀,我们在上传的文件后缀凡是被包含于其中的,都不会被上传到gitee,相当于一个过滤器

Ⅱ.git

而所谓的git仓库,本身就是一个目录.git +里面的内容

.git类似于我们的一个中转站,我们先把新增的文件添加到.git目录,然后再上传到码云gitee。介绍完这些,我们再来看一下git的基本使用。

1.2git的基本使用

 ①git add

git add 文件名 这个指令的作用在于将我们刚刚clone下来的目录里新增的文件添加到.git目录

 ②git commit  -m ‘日志’

这个指令先把.git新增的文件合并到本地仓库,注意,这里我们还没上传到远端,而引号里面就是我们要写的日志,我们可以添加一些备注或者日期。

③git push 

把本地的推送到码云。需要我们输入gitee的用户名和密码,我们可以设置为免密码,但是不推荐。

④git status

查看git状态,会显示我们当前进行到git的哪一步了。

当我们git add .之后,查询状态,会提示我们下一步要commit。  

⑤git mv

git mv source destination

要求source文件必须是文件,链接或目录,如果destination是现有的目录,则被认为是移动sourcedestination,如果destination不存在,则被判定是更改名字。

演示:

 我们这里的git mv pu.c love包含三步:

mv pu.c love

rm pu.c

git add .

我们查询git status 就会发现已经执行了git add . 到了git commit的阶段。

需要注意的是如果是改名必须在git commit之后才能改名。

⑥git pull

如果你把远端的仓库里的文件给修改了,就会导致git push失败,这时就需要git pull把文件拉回来进行合并,然后我们就可以提交git pushgit保证本地和远端仓库的文件要保持一致

⑦git log

git log 可以查看所有的提交记录:

我们发现我们commit时写的日志也会显示,所以要提醒各位老铁,不要乱写,hr会看的!!😄

二、Linux调试器-gdb

2.1、gdb的使用

Windows下我们通过编译器比如说vs进行调试,那么在Linux下我们也有自己的调试工具--gdbgdb是基于命令行式的调试,两者在方法上有区别,gdb没有vs调试起来那么方便,但是在思路上还是相近的。

一般我们的编译器上是没有配备gdb的,需要自己安装。

安装指令:sudo yum install -y gdb

这里要提到两个指令,在gdb模式下:

🖊list(l)是查看代码

🖊run(r)是运行代码

🖊quit(q)是推出gdb模式

 那么我们可以看到我这里的查看代码什么也没有看到,这是为什么呢?这是因为,在默认情况下,gdb无法进行对现在发布的程序进行调试。也就是说,默认情况下,我们发布的程序是release版本。我们知道vs下我们想调试必须将软件设为debug模式,设为debug后才能生效,否则不能调试。

怎么才能让他以debug版本发布呢?我们需要在gcc编译软件时添加-g选项。

 

 2.2、 debug与release版本的区别

①release版本大小小于debug版本

这肯定是毋庸置疑的,因为debug版本需要我们使用工具调试,需要文件展示的信息更多。

 ②readelf -S 可执行程序(debug/release)

Linux下有一个readelf -S 可执行程序(debug/release) 指令用于读取可执行程序的二进制构成。

 虽然我们看不懂这些二进制,但是我们可以利用管道过滤一下得到debug信息。

我们可以小结一下Linux下的默认行为:

gcc默认行为:

                    1、默认是动态链接的。

                    2、默认是release版本

vim默认行为:

                    默认打开就是命令模式

2.3、 gdb的基本指令

gdb 退出:CTRL+dquit/q调试命令:

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

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

🖊r或run:运行程序

🖊n或next:逐过程调试,相当于f10

🖊s或step:逐语句调试,相当于f11,可以进入函数

🖊break(b) 行号:给第n行断点。注意:如果打断点的所在行没有代码,就会相当于断点打在后面有代码的行。

🖊info break(b):用于查看所有断点

🖊finish:首先需要进入函数,finish直接运行到将对应函数跑完,如果跑时挂掉,直接确定函数有问题。

🖊p  变量:查看变量内容。

🖊p &变量:查看变量地址。

🖊set var:修改变量的值

🖊continue(c):从一个断点运行到下一个断点

🖊run(r):r相当于f5.当没有断点的时候,就是运行程序,有断点的时候就是运行到第一个断点处。

🖊d  b:删除所有断点 

🖊d b 断点编号:d  断点编号去掉指定断点,这里需要注意,不是d  行号 去掉断点,而是我们info b 查看到的每个断点的编号。

🖊disable breakpoints:禁用断点

🖊enable breakpoints:启用断点

🖊info(或i) b:查看当前设置了哪些断点

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

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

🖊until X行号:跳至X行,跳出循环到有效代码行(不是空)

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

🖊info(i) locals:查看当前栈帧局部变量的值,显示特定区域中的临时变量。

Ⅰ断点

①gdb l  1

从第一行开始显示,显示后面的不用再输入指令,回车即可,gdb会默认记住之前的指令。

 ②gdb b(break) # 

gdb b(break) #:给第#行断点。

我们可以打多个断点。

打过断点后,我们不像在vs上能看到红色断点,我们怎么在Linux上查看断点呢?

③info(i) b

info b:用于查看所有断点。

 ④delete(d) 断点编号

断点编号去掉指定断点,这里需要注意,不是d  行号 去掉断点,而是我们info b 查看到的每个断点的编号。

 在掌握这些基本指令之后,怎么调试呢?在vs下我们f5执行到断点,当断点比较多的时候,f5表示从一个断点执行到另一个断点CTRL+f5 执行可执行程序。那么在Linux下与之对应的哪些指令是调试呢?

Ⅱ调试

①gdb r

r相当于f5.当没有断点的时候,就是运行程序,有断点的时候就是运行到第一个断点处。

 ②gdb p

p 变量用于查看内容,p &变量查看地址

 但是我们这样查看很不方便,只能看到临时的,不能常显示。

③display && undisplay

display可以常显示变量display &变量可以常显示变量地址

 取消常显示:undisplay 编号

undisplay用于取消常显示,我们取消的也是变量的编号

 ④disable && enable

有些断点虽然我们打下了,但是我们不想让它生效,我们又不想取消这个断点就可以使用disable 断点编号指令。

与之对应的是enable 断点编号重新使断点生效

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值