【linux】git和gdb调试工具

简介: 【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远端仓库

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(简写)

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

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
3月前
|
Linux 开发工具 git
linux自建仓库git之钩子不生效
linux自建仓库git之钩子不生效
|
4月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
66 10
|
4月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
112 3
|
4月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
172 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
6月前
|
Linux 测试技术 开发工具
CentOS Linux 8使用阿里源(安装jdk11、git测试)
CentOS Linux 8使用阿里源(安装jdk11、git测试)
541 1
|
6月前
|
Linux 开发工具 git
解决 Linux git push 贡献者不同(没有出现绿点)的问题
解决 Linux git push 贡献者不同(没有出现绿点)的问题
|
6月前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
91 0
|
7月前
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
404 2
|
4月前
|
NoSQL
技术分享:如何使用GDB调试不带调试信息的可执行程序
【8月更文挑战第27天】在软件开发和调试过程中,我们有时会遇到需要调试没有调试信息的可执行程序的情况。这可能是由于程序在编译时没有加入调试信息,或者调试信息被剥离了。然而,即使面对这样的挑战,GDB(GNU Debugger)仍然提供了一些方法和技术来帮助我们进行调试。以下将详细介绍如何使用GDB调试不带调试信息的可执行程序。
116 0
|
6月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
45 1