Liunx开发工具:git和gdb

这篇具有很好参考价值的文章主要介绍了Liunx开发工具:git和gdb。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一. git的功能和使用

1.1 git的功能

1.2 git三板斧 

1.3 git使用中的其他问题

二. 使用gdb调试代码 

2.1 生成带有调试信息的可执行程序

2.2 gdb调试代码的方法


一. git的功能和使用

1.1 git的功能

git是一块开源、免费的版本管理系统,能够高效敏捷地处理任何大型或小型项目。

问题:什么是版本管理?

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

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

Liunx开发工具:git和gdb
图1.1 版本管理的过程

git可以实现对项目代码进行版本管理,是一款企业级的多人协同操作软件。通过gitee可以实现对代码的托管,人们可以向指定的仓库上传、修改和删除指定的代码,每一步操作都强行写"日志",以便追踪特定仓库的修改记录。在项目代码不断进行完善的过程中,产生的不同版本的项目代码,都可以在git的远程仓库中得以保存,每当项目代码发生改变,通过将修改后的代码上传至远程仓库,实现新版本的记录。

1.2 git三板斧 

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

  • 远程仓库的创建

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

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

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

Liunx开发工具:git和gdb
图1.2 在远程创建仓库
  •  将远程仓库克隆到近端

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

Liunx开发工具:git和gdb
图1.3 git的版本查看与安装

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

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

Liunx开发工具:git和gdb
图1.4 拉取远程仓库到近端

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

如图1.5所示,我们希望将文件test1.cpp传入远程仓库,首先应当让git知道test1.cpp要被git管理,那么应当执行指令git add test1.cpp。

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

  • git reset HEAD -- 撤销全部文件的add操作
  • git reset HEAD [文件名] -- 撤销对指定文件的add
Liunx开发工具:git和gdb
图1.5 git add和git reset操作

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

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

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

Liunx开发工具:git和gdb
图1.6 git commit操作

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

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

Liunx开发工具:git和gdb
图1.7 git push
Liunx开发工具:git和gdb
图1.8 远程仓库

1.3 git使用中的其他问题

 (1) git log查看提交记录

Liunx开发工具:git和gdb
图1.9 git log查看提交日志

 (2) .gitignore

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

Liunx开发工具:git和gdb
图1.10 gitignore文件

(3) git push无法提交文件的问题

如果我们的仓库在近端和远端不同步(在Linux和Windows下都对仓库进行了操作),那么提交文件可能会失败,这是只要无脑git pull即可。

git pull极有可能会出现警告信息,我们不用在意,只需要shift + : 进入底行模式,然后wq!强制退出即可。这时再次git push,提交成功。

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

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

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

二. 使用gdb调试代码 

2.1 生成带有调试信息的可执行程序

我们默认使用gcc/g++编译源文件生成的可执行程序,是Release版本,不带有调试信息。使用g++,编译源文件test.cpp(见代码2.1),生成可执行程序mytest.exe。

使用指令readelf -S mytest.exe | grep -i debug,获取可执行文件中的调试信息,看到没有捕捉到任何含有debug的内容(见图2.1)。

Liunx开发工具:git和gdb
图2.1 获取Release版本可执行程序的调试信息

代码2.1:test.cpp文件 

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

如果想要程序能够调试,就必须生成Debug版本,在gcc/g++编译程序时添加-g选项,就能够生成Debug版本的可执行程序。如图2.2所示,生成debug版本的可执行程序mytest-debug.exe,获取其内部的调试信息,可见有内容输出。

Liunx开发工具:git和gdb
图2.2 编译生成debug版本可执行程序并获取调试信息

2.2 gdb调试代码的方法

还是以代码2.1的程序为例,讲解如何使用gdb调试代码。

  • gdb [文件名] -- 启动调试、quit -- 退出gdb
Liunx开发工具:git和gdb
图2.3 启动和退出gdb调试
  • list [行号] -- 从指定行开始显示代码
  • list [函数名] -- 从头开始显示某个函数的代码
  • list 源文件:n(行号) -- 显示指定源文件特定行的内容。如list func.c:5,表示显示源文件第5行前后的内容。

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

Liunx开发工具:git和gdb
图2.4 list和回车键显示全部代码
  • b [行号] -- 在指定行打断点。
  • b 函数名 -- 在指定函数的实现代码的第一行处打断点。
  • b 源文件名:函数 [行号] -- 在指定源文件的特定行打断点。如b func.c:10,表示在源文件func.c的第10行打断点。
  • b [行号] if expr -- 设置条件断点
  • info b -- 显示断点信息(包含断点编号、是否打开/禁用、断点位置等)。
  • d [断点编号] -- 删除指定编号的断点(不是指定行号)。
  • set var -- 改变特定变量的值,如set var i=98 ,就表示把变量i的值改为98。 
Liunx开发工具:git和gdb
图2.5 打断点、显示断点信息与删除断点
  • disable [断点编号] -- 禁止使用某断点
  • enable [断点编号] -- 启用某断点
Liunx开发工具:git和gdb
图2.6 断点的禁用和启用
  •  run ( r ) -- 开始调试,如果没有断点直接运行到程序结束,有断点就运行到第一个断点位置

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

Liunx开发工具:git和gdb
图2.7 run(r)指令
  • next (n) -- 逐过程执行,相对于VS下的F10
  • step (s) -- 逐语句执行,相当于VS下的F11
  • continue (n) -- 运行至下一断点处
Liunx开发工具:git和gdb
图2.8 next、step和continue指令
  •  bt -- 查看调用堆栈

最上层的调用堆栈,为当前函数的调用堆栈。文章来源地址https://www.toymoban.com/news/detail-506738.html

Liunx开发工具:git和gdb
图2.9 bt指令查看调用堆栈
  • p [变量名] -- 查看指定变量的值
  • display [变量名] -- 长显示指定变量(之后每次执行都会显示变量的值)
  • undisplay [长显示变量的编号] -- 删除指定编号变量的长显示
Liunx开发工具:git和gdb
图2.10 变量值的显示
  • finish -- 执行完当前执行流所在函数就停下来
  • until (u) -- 执行到指定行(不宜跨函数调用)
Liunx开发工具:git和gdb
图2.11 finish和until指令

到了这里,关于Liunx开发工具:git和gdb的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux基础——Linux开发工具(make/makefile,git)

    前言:在经过前面两篇学习,大家对Linux开发工具都有一定的了解,而在此之前最重要的两个工具就是vim,gcc。 如果对这两个工具不太了解,可以先阅读这两篇文章: Linux开发工具 (vim) Linux开发工具 (gcc/g++) 首先让我们来初步了解一下本篇的目标: 1. 学习make/makefile,并能简单

    2024年04月27日
    浏览(36)
  • Postman,一个功能强大的API开发和测试工具

    最近有粉丝在群里说在找 postman 的使用教程,案例等文章。 那么今天我就来写一个。 Postman 是一个功能强大的 API 开发和测试工具,它提供了丰富的功能,帮助开发人员更好地管理、测试和文档化 API。无论是单独开发还是团队协作,Postman 都可以提高开发效率,并提供可靠的

    2024年04月15日
    浏览(49)
  • 全文检索工具elasticsearch:第四章:开发电商的搜索列表功能

    // skuInfo转化成skuLsInfo for (SkuInfo skuInfo : skuInfos) { SkuLsInfo skuLsInfo = new SkuLsInfo(); BeanUtils.copyProperties(skuInfo,skuLsInfo); // 将skuLsInfo导入到es中 Index index = new Index.Builder(skuLsInfo).index(“gmall”).type(“SkuLsInfo”).id(skuLsInfo.getId()).build(); jestClient.execute(index); } } } @Override public List SkuListByCat

    2024年04月09日
    浏览(48)
  • 12.(开发工具篇vscode+git)vscode 不能识别npm命令

    问题描述: 解决方式: (1)右击VSCode图标,选择以管理员身份运行; (2)在终端中执行get-ExecutionPolicy,显示Restricted,表示状态是禁止的; (3)这时执行set-ExecutionPolicy RemoteSigned; (4)此时再执行get-ExecutionPolicy,显示RemoteSigned,则表示状态解禁,可以运行 (5)重启

    2024年02月16日
    浏览(37)
  • 18.(开发工具篇Gitlab)Git如何回退到指定版本

    首先: 使用git log命令查看提交历史,找到想要回退的版本的commit id. 第一步:git reset --hard 命令是强制回到某一个版本。执行后本地工程回退到该版本。 第二步:利用git push -f命令强制推到远程 如下所示: 优点:干净利落,回滚后完全回到最初状态。 缺点: (1)需要找到你要

    2024年02月04日
    浏览(59)
  • 如何使用VSCode将iPad Pro转化为功能强大的开发工具?

    随着平板电脑的普及,大多数人的生活习惯和生活场景都离不开平板电脑的使用,刷剧,看短视频,玩主流游戏等,但是这些只是娱乐性质的场景,那想实现把平板结合到工作或者生产之中场景中呢,如编辑文档,制作工作表格,编写代码? 所以在入手ipad后,为了防止“买前生产力,买

    2024年02月08日
    浏览(67)
  • C/C++开发,关闭vscode中的插件git工具

    安装git后,有git配置的路径,vscode会通过git进行检测。关闭vscode中的插件git工具方法如下:

    2024年02月11日
    浏览(49)
  • 低代码开发重要工具:jvs-rules 规则引擎功能介绍(三)

    规则引擎是由多个组件组成的,这些组件共同协作实现规则的管理、执行和决策流的构建。 决策流:决策流是由多个业务节点连接而成的流程,用于实现复杂的业务逻辑。决策流中的业务节点按照特定的顺序执行,每个节点根据输入数据和规则引擎的执行结果,决定下一个要

    2024年02月15日
    浏览(55)
  • 微信小程序实现简单的点击切换功能(微信开发者工具)

    📚文章目录 🔗首先创建一个简单的切换按钮📋 如图下  📋wxml代码  📋wxss代码 🔗但是这个元素是无法点击的,所以要添加一个点击事件到这两个元素里面  📋js代码(在page({})里面添加) 📋wxml代码  🔗class使用三元表达式来继续点击判断  🔗使用bindtap绑定事件  事件的

    2024年02月09日
    浏览(210)
  • 低代码开发重要工具:jvs-form(表单引擎)2.1.7功能清单及新增功能介绍

    在低代码开发平台中,表单是用于收集和编辑数据的页面。它通常用于创建、更新或查看单个记录的详细信息。 jvs-form是jvs快速开发平台的8大引擎的其中之一,它的特点: 与动态模型联动,支持动态的调整物理库表,也就是说无需先建库表,表单根据所需要的数据字段 可以

    2024年02月13日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包