【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/453586.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos 7.5 安装 NVM 详细步骤

NVM(Node Version Manager)是一个用于管理Node.js版本的工具,它可以让你轻松地在多个版本之间切换。NVM 通过下载和管理 Node.js 的多个版本,为用户提供了一种灵活的方式来使用不同版本的 Node.js。如果你需要更多关于NVM的信息&a…

【云原生之kubernetes系列】--污点与容忍

污点与容忍 污点(taints):用于node节点排斥Pod调度,与亲和效果相反,即taint的node排斥Pod的创建容忍(toleration):用于Pod容忍Node节点的污点信息,即node节点有污点,也将新的pod创建…

超时引发的牛角尖二(hystrix中的超时)

至今我都清楚记得自己负责的系统请求云上关联系统时所报的异常信息。为了解决这个异常,我坚持让这个关联系统的负责人查看,并且毫不顾忌他的嘲讽和鄙视,甚至无视他烦躁的情绪。不过我还是高估了自己的脸皮,最终在其恶狠狠地抛下“…

Blender_查看版本

Blender_查看版本 烦人的烦恼,没找见哪儿可以查看版本? 算是个隐蔽的角落!

[设计模式Java实现附plantuml源码~结构型]处理多维度变化——桥接模式

前言: 为什么之前写过Golang 版的设计模式,还在重新写Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很…

10_机械臂运动学_机械臂C++逆解——2023

就是算! 遨博机械臂改进DH参数表: 机械臂正运动学连杆变换通式: 其中si代表sin(θi),ci代表cos(θi) sij代表sin(θi-θj),cij代表cos(θi-θj) sijk代表sin(θi-θjθk),cijk代表cos(θi-θj-θk),用两角和差公式直接展开即可. 每…

[Linux 进程控制(二)] 写时拷贝 - 进程终止

文章目录 1、写时拷贝2、进程终止2.1 进程退出场景2.1.1 退出码2.1.2 错误码错误码 vs 退出码2.1.3 代码异常终止引入 2.2 进程常见退出方法2.2.1 exit函数2.2.2 _exit函数 本片我们主要来讲进程控制,讲之前我们先把写时拷贝理清,然后再开始讲进程控制。…

前端文艺复兴:Vue3真的需要Pinia吗?

前言 说起Pinia,熟悉 vue3 开发的程序员肯定不会陌生,甚至被vue官方推荐取代vuex,成为vue全家桶之一。 疑惑 还记得之前用 vuex 时,更改 state 还分同步和异步(这里有尤雨溪的回答www.zhihu.com/question/48… &…

【TCP/IP】用户访问一个购物网站时TCP/IP五层参考模型中每一层的功能

当用户访问一个购物网站时,网络上的每一层都会涉及不同的协议,具体网络模型如下图所示。 以下是每个网络层及其相关的协议示例: 物理层:负责将比特流传输到物理媒介上,例如电缆或无线信号。所以在物理层,可…

创建TextMeshPro字体文件

相比于Unity的Text组件,TextMesh Pro提供了更强大的文本格式和布局控制,更高级的文本渲染技术,更灵活的文本样式和纹理支持,更好的性能以及更易于使用的优点。但unity自带TextMeshPro字体不支持中文。这里使用普通字体文件生成Tex…

docker更换镜像源

添加的镜像源 {"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com", "https://reg-mirror.qiniu.com/", "https://docker.mirrors.ustc.edu.cn"] }docker更换镜像源之后一定要重启守卫 systemctl daemon-reloaddock…

微服务的幂等性

微服务架构设计的中心思想是将服务进行拆分,但是在这个过程中,如果被依赖的服务发生奔溃,就会引起一系列问题。为了解决这个问题,就会引入重试的机制,重试又会引入幂等性的问题,下面我们就分析这个过程&…