【linux】git和gdb调试工具

在linux下提交代码同步到gitee

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

在这里插入图片描述

在这里插入图片描述

2.init

在这里插入图片描述
在这里插入图片描述
这两个步骤用于识别提交代码的身份,一个你的名字,一个你的邮箱
在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述
克隆本地仓库成功


在这里插入图片描述
我们将这个仓库拷到了111目录底下.

在这里插入图片描述
在这里插入图片描述
我们发现少了一个.gitignore,因为.gitignore是隐藏文件,所以使用ls -la查看
在这里插入图片描述

3.git log 指令

用于查看提交状态
在这里插入图片描述

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


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

在这里插入图片描述
此时还没有同步到gitee上去

4.git三板斧

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

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71f7a70b77334b1f979462a1a0de17fc.png

在这里插入图片描述
在这里插入图片描述
git log 查看同步记录

在这里插入图片描述
然后我们在gitee上发现同步上了.


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

在这里插入图片描述
我们先新建3个文件 c.txt x.txt2 z.txt1 我们不要上传.txt文件,.txt2,.txt1上传
将这个后缀添加到.gitignore中就可以了

5. vim修改内容

在这里插入图片描述
在这里插入图片描述
添加不要上传的文件后缀
在这里插入图片描述
使用三板斧提交同步代码到远端
在这里插入图片描述
发现没有出现.txt后缀。测试成功


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

6.git rm +文件名

我们假如要删除刚才上传的两个txt1,txt2
在这里插入图片描述

使用三板斧同步修改到远端
在这里插入图片描述
在这里插入图片描述
删除成功

演示完成,我们需要删除我们这个仓库
在这里插入图片描述

这里可以查看提交的记录,
然后删除我们这个仓库
在这里插入图片描述


gdb调试工具

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

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

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

这里有一个问题?
for循环形式只是在c99下是允许的 ,所以要修改一下我的for循环模式,c89将变量定义写在外面
在这里插入图片描述

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

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

明显在debug下生成的.exe文件大
使用readelf指令可以读取可执行文件的详细信息,并且通过管道(相当于把管道前处理后再干什么),grep指令将debug信息列举
在这里插入图片描述

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


gdb指令

1.进入gdb

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

在这里插入图片描述

2.退出gdb

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

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

3.list+文件名:行号/函数名
3.l+文件名:行号/函数名(简写)
在这里插入图片描述

当执行完一个指令后,按回车会自动执行最近的上一个指令
在这里插入图片描述

简写也可以
在这里插入图片描述

l+函数名
在这里插入图片描述

l 15 显示15行的上下文
在这里插入图片描述


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

4.添加断点

在vs中添加断点

在光标停留那一行按F9或者鼠标在对应行点击出现红点
在这里插入图片描述

在gdb中添加断点

4.b+文件名:行号/函数名
4.b+ 行号/函数名(简写)
在这里插入图片描述

5.查看断点

在vs查看断点

直接看红圈出现的位置

在gdb中查看断点

5.info +b
5.i+b(简写)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ccab9c4fb5d4419eae69fbb3de51dec3.png

6.删除断点

在vs中删除断点

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

在gdb中删除断点

6.d +断点编号
在这里插入图片描述

7.断点使能

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

7.disable +断点编号(断点关闭)
7.enable +断点编号(断点重启)
在这里插入图片描述

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

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

在这里插入图片描述
我们在主函数那打个断点,然后使用指令r让程序跑起来,遇到main函数处打的断点停下来,然后按n,开始逐过程,我们发现到了add函数不进函数内部,z直到程序结束.

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

在vs中逐语句:按F11
在gdb逐语句:
9.step
9.s(简写)
在这里插入图片描述
同理,我们在主函数打断点,按r让程序跑起来,当到断点处,按s/step,我们发现可以进入add函数中

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

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

在这里插入图片描述
F11运行起来在监视里面添加变量/变量地址

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

10.print+变量名/变量地址
10.p+变量名/变量地址(简写)
在这里插入图片描述

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

在gdb中:
11.display+变量名/变量地址
11.d+变量名/变量地址
在这里插入图片描述

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

在gdb中:
12.undisplay+ 要取消持续显示的变量的编号
在这里插入图片描述
在这里插入图片描述

13.运行到下一断点处

在gdb中:
13.continue
13.c
在这里插入图片描述
这个是我们的程序
我们分别在16行,18行打断点
在这里插入图片描述
在16行的第一个断点停下,按continue/c进入下一个断点处.

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

在gdb中:
14.finish
在这里插入图片描述

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

在gdb中:
15.until
在这里插入图片描述
16行直接到18行,并且中间都被执行.

17.修改变量的值

在gdb中:
17.set var +变量名=(修改后的值)
在这里插入图片描述

18.查看栈帧创建情况

在gdb中:
18.bt
在这里插入图片描述
在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

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘎嘎旺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值