Linux——git和gdb

什么是git

git是一个版本控制工具

如何去做版本管理?

假设学校布置了一个实践报告课题,让学生去写

小A写完了一篇。去给老师交,老师指出了很多不足,把第一次的报告打回去了

报告改好后,又去给老师交,第二次又被打回了

第三次一样,也是被老师给打回去了,结果老师又找小A要他第二次的实践报告,小A已经懵了,他根本就没有留以前写的报告

小明知道了小A这件事,在他被老师大会的时候他就留了个备份

等到第三次的时候老师又找小明要第二次写的报告,小明留有备份,所以就给老师交差了

小明所做的工作就叫做版本管理

以后在公司上班,程序员就扮演了学生这一角色,产品经理就是老师,程序员就要将每次的项目都备份一下,以防产品经理需要历史版本

git命令行基本操作

确定自己Linux上有没有安装git,输入giit --version

如果有下面这行代码,就说明Linux里装了git

如果没有就直接用指令安装就行了

bash 复制代码
sudo yum install -y git

没有仓库可以在git个人主页新建仓库

创建仓库设置照搬这个就行,新建仓库现在只能是私有的,后面可以改

语言和.gitgnore可以根据自己的情况调整

还有这个

现在想要开源就要在代码的管理里

找到开源设置,把这些都勾了,然后git后台就会审核仓库,完成后就能开源了

但是一般空仓库午饭直接开源,提交一点代码就能开源了

怎么把远端拉取到本地

复制这个链接

git clone 就能把远端仓库的所有内容克隆到本地

这里的.git目录其实就叫做仓库

怎么添加代码到仓库里呢?

现在进入要添加到仓库的目录中,使用git add .

这里的 . 就是选中当前目录里所有没有被添加到仓库的文件

然后就是提交

使用 git commit -m "代码说明" 提交代码,这个叫做把对应的修改内容提交到本地仓库

从add 到 commit 指令的过程中,就已经相当于小明把自己的实践报告保存到本地的这一动作

接着就是push将本地仓库的内容传到远端仓库

然后输入一下用户名和密码

成功后远端仓库也能看见提交的代码了

使用git log 能看到所有的提交日志

要是想删除文件,直接输入这个指令,就会在git上直接删除

我们想看一下本地和远端同步的状态,使用git status就可以看

现在就能看出这个main.c被delete了

这时要将本地的删除提交到远端,这时就再进行git的三板斧就行了

gdb的使用

Linux跟vs一样写完代码也需要调试,这里用的就是gdb

首先先在vim里写一段代码

一般代码有两个版本,分别是debug版本和release版本

debug版本是程序员自己进行测试的版本,测试没问题后就把release版本交给测试人员让他们再进行测试

但是gcc/g++默认生成的是release版本的,不是debug版本的,所以还要改一下Makefile

-g 就是生成debug版本的可执行程序

-std=c99 就是用c99的标准编译

那么debug和release在调试信息层面上有什么差别呢

可以使用readelf指令来读取可执行程序的二进制构成

这个就是mytest -debug文件二进制构成的指令

他就能把我们可执行程序的对应的各种分段全部显示出来

使用grep指令搜索一下debug,debug文件里确实有很多的debug调试信息

现在可以使用gdb指令来进行调试了

l 1

l 1指令就是从第一行开始显示代码,继续输l就能把历史的代码全部展示出来,gdb能自动记录我们最近一次写的输入的指令,所以直接回车也能显示代码

r

输入r指令,表示润代码就会运行起来,直接就会显示结果最后正常退出

b

调试肯定是要打断点的,打断点的指令就是b

写个b 19就会在代码的第19行打一个断点,后面还有文件信息等

info

info b 的意思是打开我们打过的断点

当我们再输入r时就会在断点处停止

再输 info b

就跟上次不一样了,多了这么一行,意思就是当前我们的断点已经命中一次了

d

删除断点使用的时指令 d

b 的时候是行号,d 的时候更行号怎么样,似乎并不行

其实d后面跟的时断点的编号

当我们把编号为1的断点删除后,再去info就找不到了

再次运行时就会直接运行到程序结束

disable breakpoint

vs的断点不还有实心和空心的状态嘛,当断点时空心的时候就是失去作用了,linux里面也可以输入 disable breakpoint 2后能发现2号断点Enb选项是 n

这就表示这个断点现在是关闭状态

enable breakpoint

打开指令则是enable breakpoint

s

逐语句调试

如果前面输入过s,后面继续回车就会自动逐语句

n

一个过程由多条语句组成

前面输过n后再按回车就是逐过程调试

p

有时候调试不仅仅是一步步走,还会监视相应变量的变化,于是就有了p

要监视sum,就p sum,相应的 i 和 &sum 也一样

但是这个指令不能常显示,必须手动输入后才能查看变化后的数值

display

要常显示就要使用display指令,这下每一次调试时都会常显示

取消常显示则是用 undisplay,但不能直接输入具体名字,要输入对应条目的编号才能取消常显示

until

假如我们调试时就像把循环跑完,不打断点,就使用到了until指令

注意:要是有断点在until指定行数的前面的话先取消掉断点才能正常until

finish

假如目的只是进入到某个函数但是只运行完该函数就停下来,就可以使用finish指令

c

这个指令的作用就是调试时从一个断点处直接运行到下一个断点处

相关推荐
China_Yanhy2 小时前
入职 Web3 运维日记 · 第 5 日:硬分叉倒计时 —— 给飞行中的飞机换引擎
运维·web3
TangDuoduo00052 小时前
【Linux字符设备驱动】
linux·驱动开发
代码游侠2 小时前
学习笔记——Linux内核与嵌入式开发2
linux·运维·arm开发·嵌入式硬件·学习·架构
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 小时前
Nginx性能调优与压测实战指南
运维·nginx
郝学胜-神的一滴2 小时前
深入Linux网络编程:accept函数——连接请求的“摆渡人”
linux·服务器·开发语言·网络·c++·程序人生
小义_2 小时前
【Docker】知识一
linux·docker·云原生·容器
wefg12 小时前
【Linux】进程地址空间深入理解
linux·运维·服务器
leisigoyle2 小时前
SQL Server 2025安装教程
大数据·运维·服务器·数据库·人工智能·计算机视觉·数据可视化
ZHANG13HAO2 小时前
android13 4G网络环境和wifi内网说明
linux·服务器·网络