Linux环境基础开发:git和gdb

目录

git的功能和使用过程

git的功能

git三板斧

git使用中的其他问题

Linux调试器——gdb使用

gdb调试代码的方法(选项)


前言

我们在平时维护和上传代码时会用到git,但是这个git具体是什么,往往又说不清楚。其实git其实就是一个版本管理工具,有了这个工具就能方便快捷地查询自己上传代码的不同版本,对每一次上传的改动了如指掌。

那gdb又是什么呢?在VS上,我们可以通过鼠标点击来打断点,通过F5,F10和F11来控制程序,实现程序的调试,但是Linux没有图形界面,就不能像VS一样,就只能引入gdb来作为调试工具,对程序进行调试。


git的功能和使用过程

git的功能

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

什么是版本管理?

这里以一个生活中的例子来讲解,假设程序员A写了一份实验报告,最初版本我们称之为v1,程序员去拿给项目经理进行审阅,项目经理提出修改意见,程序员A下去修改。程序员A在修改前先将v1版本进行备份,修改后获得v2版本,程序员A再去拿给项目经理审阅,项目经理再次提出修改意见,程序员A再次将v2版备份后,修改获得了v3版本。项目经理看了v3版本后,认为程序员A修改的v3版本还不如之前的v2版本,因此让程序员B在v2版本的基础之上,修改获得了v3.2版本,项目经理最终决定采用v3.2版本。

上述过程中,修改、保存每个版本过程中的操作,实际上就是在进行版本管理。

Linux环境基础开发:git和gdb_第1张图片

当你需要做一个大工程的时候,文件的管理无疑是非常庞大的工作,因为你需要不断的修改更新文件内容,同时可能还要保留旧版本保证可以复原,这样就需要备份多个版本的文件。并且在大多数情况下一个工程需要在多数人来共同维护,那么这种情况下不同人之间修改内容的合并也是非常麻烦的,这时使用git就可以很轻松的解决这些问题。


git三板斧

准备工作 -- 在git上创建远程仓库并克隆到本地

  • 远程仓库的创建

登录gitee网站,点击右上角的+,选择新建仓库,自定义仓库名、仓库介绍等内容后,点击创建,这样就在远程创建了代码仓库。

注意这里的添加.gitignore选项,是指引入忽略黑名单,将指定后缀名的文件自动屏蔽,使垃圾文件不会被上传至远程仓库。这里我们在.gitignore选项中选择C,其中就包含了生成C可执行文件过程中常见的应当被加入黑名单的文件的后缀名。

一般而言,只需要上传.c/.cpp/.h文件即可。

Linux环境基础开发:git和gdb_第2张图片

Linux环境基础开发:git和gdb_第3张图片

  • 将远程仓库克隆到近端

在进行这项工作之前,我们首先检查自己的Linux系统下面是否安装了git,检查方法为输入指令:git --version,这条指令的功能是输出当前环境下git的版本,如果输出成功(如图1.3),那么表示git已经安装,如果没有安装git,则需要通过指令yum -y install git来安装git

Linux环境基础开发:git和gdb_第4张图片

  • 将远端仓库克隆到近端的指令:git clone [远端仓库链接]

这一步会提示我们输入用户名和密码,我们只需要输入注册gitee账号时使用的用户名和密码(并不登录linux的用户和密码)即可。执行完git clone指令后,我们通过ll,可以看到远端仓库已经被拉取到了近端。

Linux环境基础开发:git和gdb_第5张图片

Linux环境基础开发:git和gdb_第6张图片

第一板斧:git add [文件名]  -- 将用git管理的文件告知git

我们希望将文件test.c传入远程仓库,首先应当让git知道test.c要被git管理,那么应当执行指令git add test.c。

在实际项目中。我们可能会失误add,如果想撤销对某个文件的add,指令为:

  • git reset HEAD -- 撤销全部文件的add操作
  • git reset HEAD [文件名] -- 撤销对指定文件的add

第二板斧:git commit  --  提交改动到本地

语法:git commit -m "日志信息"

注意,这里的日志信息不可以省略,修改仓库必须要记录对应的修改日志,将test.c文件提交改动到本地,记录日志信息是修改操作的用户(zhang)和修改仓库的时间(2023.09.25)。如果我们希望撤销git commit操作,指令为:git reset --soft HEAD^。

第三板斧:git push -- 将修改同步到远程仓库

使用git push指令,输入用户名和密码之后,到远程仓库中,查看发现,test.c被成功提交,相应的日志信息也得以被记录。

Linux环境基础开发:git和gdb_第7张图片
Linux环境基础开发:git和gdb_第8张图片


git使用中的其他问题

 (1) git log查看提交记录

Linux环境基础开发:git和gdb_第9张图片

 (2) .gitignore

 .gitignore为黑名单文件,用于屏蔽指定后缀名的文件为黑名单文件,禁止特定的文件被同步到远程仓库。使用vim打开.gitignore文件,可以对黑名单文件进行设置。

Linux环境基础开发:git和gdb_第10张图片

(3) 在近端操控远程仓库删除文件

  • 指令:git rm -f [文件名] 

注意,不可以省略git,直接rm,这样会造成近端删除了文件,而远端仓库没有删除的问题。


Linux调试器——gdb使用

debug && release

debug能被调试,release不能,debug在形成可执行程序的时候会有调试信息,release没有

gcc默认编译是release方式发布的,无法直接调试, 如果要以debug方式,必须携带 : -g.

Linux环境基础开发:git和gdb_第11张图片

Linux环境基础开发:git和gdb_第12张图片

release发布的文件大小大于debug文件大小,要被gdb调试,必须要以debug发布,必须加-g


mycode.c文件

1 #include                                                                                                                                                                  
  2 int addToTop(int top)
  3 {
  4    int res=0;
  5    int i=1;
  6    for(;i<=top;i++)
  7    {
  8        res+=i;
  9    }
 10    return res;
 11 }
 12 
 13 int main()
 14 {
 15     printf("debug begin\n");
 16     int top=100;
 17     int sum=addToTop(top);
 18     printf("sum:%d\n",sum);
 19     printf("debug end\n");
 20 }

gdb调试代码的方法(选项)

  • gdb [文件名] -- 启动调试、quit(q) -- 退出gdb

Linux环境基础开发:git和gdb_第13张图片

  • list [行号] -- 从指定行开始显示代码
  • list [函数名] -- 从头开始显示某个函数的代码
  • list 源文件:n(行号) -- 显示指定源文件特定行的内容。如list func.c:5,表示显示源文件第5行前后的内容

输入list 0后,持续按回车键,可以显示出全部代码,因为gdb会记录最近一条的指令,如果接下来要执行的指令没有改变,可以直接回车执行。

Linux环境基础开发:git和gdb_第14张图片

  • b [行号] -- 在指定行打断点。
  • b 函数名 -- 在指定函数的实现代码的第一行处打断点。
  • b 源文件名:函数 [行号] -- 在指定源文件的特定行打断点。如b func.c:10,表示在源文件func.c的第10行打断点。
  • b [行号] if expr -- 设置条件断点
  • info b -- 显示断点信息(包含断点编号、是否打开/禁用、断点位置等)。
  • d [断点编号] -- 删除指定编号的断点(不是指定行号)。
  • set var -- 改变特定变量的值,如set var i=98 ,就表示把变量i的值改为98。

Linux环境基础开发:git和gdb_第15张图片

  • disable [断点编号] -- 禁止使用某断点
  • enable [断点编号] -- 启用某断点

Linux环境基础开发:git和gdb_第16张图片

  •  run ( r ) -- 开始调试,如果没有断点直接运行到程序结束,有断点就运行到第一个断点位置

注意:如果多次连续执行r指令,并不是执行到下一处断点,而是重写开始调试。

Linux环境基础开发:git和gdb_第17张图片

  • next (n) -- 逐过程执行,相对于VS下的F10
  • step (s) -- 逐语句执行,相当于VS下的F11
  • continue (n) -- 运行至下一断点处

Linux环境基础开发:git和gdb_第18张图片

  •  bt -- 查看调用堆栈

最上层的调用堆栈,为当前函数的调用堆栈。

  • p [变量名] -- 查看指定变量的值
  • display [变量名] -- 长显示指定变量(之后每次执行都会显示变量的值)
  • undisplay [长显示变量的编号] -- 删除指定编号变量的长显示

Linux环境基础开发:git和gdb_第19张图片

  • finish -- 执行完当前执行流所在函数就停下来
  • until (u) -- 执行到指定行(不宜跨函数调用)

Linux环境基础开发:git和gdb_第20张图片


风来自很远的地方,去去也无妨。

你可能感兴趣的:(Linux,git)