【linux】git和gdb调试工具

在linux下提交代码同步到gitee

1.创建一个新的仓库(演示步骤)

【linux】git和gdb调试工具_第1张图片

【linux】git和gdb调试工具_第2张图片

2.init

【linux】git和gdb调试工具_第3张图片
在这里插入图片描述
这两个步骤用于识别提交代码的身份,一个你的名字,一个你的邮箱
在这里插入图片描述

开启本地仓库
在这里插入图片描述

在这里插入图片描述

【linux】git和gdb调试工具_第4张图片
克隆本地仓库成功


【linux】git和gdb调试工具_第5张图片
我们将这个仓库拷到了111目录底下.

【linux】git和gdb调试工具_第6张图片
【linux】git和gdb调试工具_第7张图片
我们发现少了一个.gitignore,因为.gitignore是隐藏文件,所以使用ls -la查看
【linux】git和gdb调试工具_第8张图片

3.git log 指令

用于查看提交状态
【linux】git和gdb调试工具_第9张图片

上面可以看到提交人的信息,以及时间,以及提交备注


将上节课写的代码拷贝到当前目录下
在这里插入图片描述

【linux】git和gdb调试工具_第10张图片
此时还没有同步到gitee上去

4.git三板斧

1.git add .//将该目录的修改记录同步到本地仓库去
在这里插入图片描述
2.git commit -m+“提交备注”//正式将修改更新到本地仓库
【linux】git和gdb调试工具_第11张图片
根据.git更改时间发现仓库更新
【linux】git和gdb调试工具_第12张图片
3.git push//将本地仓库内容同步到gitee远端仓库

【linux】git和gdb调试工具_第13张图片

【linux】git和gdb调试工具_第14张图片
【linux】git和gdb调试工具_第15张图片
git log 查看同步记录

【linux】git和gdb调试工具_第16张图片
然后我们在gitee上发现同步上了.


在windows下我们使用小乌龟上传代码到gitee远端仓库 ,我们发现会有很多.obj ,.exe文件 ,我们不需要这些,我们应该怎么办?

【linux】git和gdb调试工具_第17张图片
我们先新建3个文件 c.txt x.txt2 z.txt1 我们不要上传.txt文件,.txt2,.txt1上传
将这个后缀添加到.gitignore中就可以了

5. vim修改内容

【linux】git和gdb调试工具_第18张图片
【linux】git和gdb调试工具_第19张图片
添加不要上传的文件后缀
【linux】git和gdb调试工具_第20张图片
使用三板斧提交同步代码到远端
【linux】git和gdb调试工具_第21张图片
发现没有出现.txt后缀。测试成功


我们如何在本地删除一个文件,然后同步到远端呢?

6.git rm +文件名

我们假如要删除刚才上传的两个txt1,txt2
【linux】git和gdb调试工具_第22张图片

使用三板斧同步修改到远端
【linux】git和gdb调试工具_第23张图片
【linux】git和gdb调试工具_第24张图片
删除成功

演示完成,我们需要删除我们这个仓库
【linux】git和gdb调试工具_第25张图片

这里可以查看提交的记录,
然后删除我们这个仓库
【linux】git和gdb调试工具_第26张图片


gdb调试工具

debug版本为什么比release版本文件大

用户一般用的产品只需要使用,不用带调试信息,用户也不需要调试信息,使用release版本就行,而程序员需要看调试信息找错误,所以程序员使用的debug版本,debug版本比release大是因为携带调试信息

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

这里有一个问题?
for循环形式只是在c99下是允许的 ,所以要修改一下我的for循环模式,c89将变量定义写在外面
【linux】git和gdb调试工具_第27张图片

默认gcc 编译生成release版本
在这里插入图片描述

exe1为release版本下的
exe2为debug版本下的
在这里插入图片描述

明显在debug下生成的.exe文件大
使用readelf指令可以读取可执行文件的详细信息,并且通过管道(相当于把管道前处理后再干什么),grep指令将debug信息列举
【linux】git和gdb调试工具_第28张图片

我们发现exe1没有debug信息,exe2有debug信息


gdb指令

1.进入gdb

1.gdb+在debug下生成可执行文件的文件名

【linux】git和gdb调试工具_第29张图片

2.退出gdb

2.q
在这里插入图片描述

3.查看对应的.c文件对应行的上下文

3.list+文件名:行号/函数名
3.l+文件名:行号/函数名(简写)
【linux】git和gdb调试工具_第30张图片

当执行完一个指令后,按回车会自动执行最近的上一个指令
【linux】git和gdb调试工具_第31张图片

简写也可以
【linux】git和gdb调试工具_第32张图片

l+函数名
【linux】git和gdb调试工具_第33张图片

l 15 显示15行的上下文
【linux】git和gdb调试工具_第34张图片


接着我们对应着vs的调试理解gdb调试下的指令
我们将代码拷到vs上去

4.添加断点

在vs中添加断点

在光标停留那一行按F9或者鼠标在对应行点击出现红点
【linux】git和gdb调试工具_第35张图片

在gdb中添加断点

4.b+文件名:行号/函数名
4.b+ 行号/函数名(简写)
【linux】git和gdb调试工具_第36张图片

5.查看断点

在vs查看断点

直接看红圈出现的位置

在gdb中查看断点

5.info +b
5.i+b(简写)
【linux】git和gdb调试工具_第37张图片

6.删除断点

在vs中删除断点

在打断点的行再次按一下F9或者用鼠标点击一下断点取消断点

在gdb中删除断点

6.d +断点编号
【linux】git和gdb调试工具_第38张图片

7.断点使能

在gdb中让断点关闭/打开,并非删除

7.disable +断点编号(断点关闭)
7.enable +断点编号(断点重启)
【linux】git和gdb调试工具_第39张图片

8.逐过程(不进入定义函数内部)

在vs中逐过程:F10
在gdb中的逐过程:
8.next
8.n(简写)

【linux】git和gdb调试工具_第40张图片
我们在主函数那打个断点,然后使用指令r让程序跑起来,遇到main函数处打的断点停下来,然后按n,开始逐过程,我们发现到了add函数不进函数内部,z直到程序结束.

9.逐语句(进入定义函数内部)

在vs中逐语句:按F11
在gdb逐语句:
9.step
9.s(简写)
【linux】git和gdb调试工具_第41张图片
同理,我们在主函数打断点,按r让程序跑起来,当到断点处,按s/step,我们发现可以进入add函数中

10.查看变量内容或者变量地址

在vs中查看变量内容/变量地址:

【linux】git和gdb调试工具_第42张图片
F11运行起来在监视里面添加变量/变量地址

在gbd中查看变量内容/变量地址:

10.print+变量名/变量地址
10.p+变量名/变量地址(简写)
【linux】git和gdb调试工具_第43张图片

11.持续显示变量/变量地址

在gdb中:
11.display+变量名/变量地址
11.d+变量名/变量地址
【linux】git和gdb调试工具_第44张图片

12.取消持续显示的变量/变量地址

在gdb中:
12.undisplay+ 要取消持续显示的变量的编号
【linux】git和gdb调试工具_第45张图片
【linux】git和gdb调试工具_第46张图片

13.运行到下一断点处

在gdb中:
13.continue
13.c
【linux】git和gdb调试工具_第47张图片
这个是我们的程序
我们分别在16行,18行打断点
【linux】git和gdb调试工具_第48张图片
在16行的第一个断点停下,按continue/c进入下一个断点处.

14.运行结束所在函数,就停下来

在gdb中:
14.finish
【linux】git和gdb调试工具_第49张图片

15.跳转到指定行,中间代码都是运行过的

在gdb中:
15.until
【linux】git和gdb调试工具_第50张图片
16行直接到18行,并且中间都被执行.

17.修改变量的值

在gdb中:
17.set var +变量名=(修改后的值)
【linux】git和gdb调试工具_第51张图片

18.查看栈帧创建情况

在gdb中:
18.bt
【linux】git和gdb调试工具_第52张图片
在add函数中,我们发现add函数的栈帧在主函数的上面压着,当finish完add后,只剩下main的栈帧.

总结
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):查看各级函数调用及参数
quit:退出gdb

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