Linux开发工具(git、gdb/cgdb)--详解

news2024/9/22 0:06:46

目录

  • 一、Linux 开发工具分布式版本控制软件 git
    • 1、背景
    • 2、使用 git
      • (1)预备工作——安装 git:
      • (2)克隆远程仓库到本地
      • (3)把需要提交的代码拷贝到本地仓库
      • (4)提交本地仓库文件到远程仓库,三板斧(add,commit, push)
      • (6)补充
  • 二、Linux 开发工具调试器 gdb / cgdb
    • 1、安装
    • 2、背景
    • 3、基本概念
    • 4、基本操作
    • 5、cgdb

一、Linux 开发工具分布式版本控制软件 git

1、背景

git 是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于 2005 年以 GPL 许可协议发布。最初目的是为了更好地管理 Linux 内核开发而设计。

2、使用 git

(1)预备工作——安装 git:

ubuntu:

$ sudo apt install -y git

centos 7:

$ sudo yum install -y git

在 gitee / github 创建新仓库,然后在创建好的仓库页面中复制远程仓库的地址 url,推荐 HTTPS。

(2)克隆远程仓库到本地

windows下我们的操作:
在这里插入图片描述
在这里插入图片描述
Linux下我们的操作:

$ git clone [url] # 这里的url就是刚刚建立好的仓库的链接

在这里插入图片描述

执行命令后,输入 gitee / github 的用户名和密码,将会直接在本地创建一个放置代码的目录。
仓库中的内容(注意:不要修改隐藏文件 .git 里面的内容):

在这里插入图片描述

(3)把需要提交的代码拷贝到本地仓库

(4)提交本地仓库文件到远程仓库,三板斧(add,commit, push)

  • 查看本地仓库所有文件状态
$ git status # 查看本地仓库所有文件状态

在这里插入图片描述
如上可知 test.c 没有被添加到仓库里,他建议我们用git add

  • 把文件添加到仓库中(git的暂存区——index)
$ git add test.c # 添加所有文件到暂存区(git里的index),将需要用git管理的文件告知git

要是想放弃上述操作,输入如下代码 git reset …
在这里插入图片描述

  • 不放弃上面 add操作,确认提交文件到本地仓库
$ git commit -m "添加第一个源代码 test.c"

" "中写提交日志,不能乱写,描述改动的详细内容

下图即日志:
在这里插入图片描述

在这里插入图片描述
下图中这个master 89ee7fb有什么作用呢?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 推动本地仓库的文件到远程仓库,即同步到远端服务器上
$ git push 

第一次使用 git 时候,会让你设置用户名和邮箱(每次 git 提交都会使用到该信息,它被永远的嵌入到了你的提交中)

$ git config --global user.email "you@example.com" # 邮箱
$ git config --global user.name "Your Name"        # 用户名

当依次执行上述命令后,输入 gitee/github 的用户名和密码,在 gitee/github 上的远程仓库刷新就可以看到自己的代码了。

在这里插入图片描述

(6)补充

  • 查看所有提交日志的信息
$ git log    # 查看所有提交日志信息
  • 忽略掉不想本地托管/上传的文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • git 仓库提交,本地与远端不同,会产生冲突。
    Windows 和 linux 用户可以同时使用git 。假如 windows的 别的用户提交了仓库,那你的仓库就和远端不同步,内容不同,因此linux的你需要以下指令
$ git pull

把远端拉取下来。

接着正常进行 push 就好。

问题1:

windows用户首先提交修改代码:
在这里插入图片描述

linux 用户 也想提交自己的,但首先要pull 同步远端本地
在这里插入图片描述
然后我们会发现,系统把与linux相同的部分保存不变,与linux不同的内容依次出现在文档里,需要我们手动同步
在这里插入图片描述
接着完成正常操作,就可以把代码传到远端。

在这里插入图片描述

注:更多git内容移步 git 精品课。

二、Linux 开发工具调试器 gdb / cgdb

1、安装

$ sudo apt install -y gdb

安装成功如下:

在这里插入图片描述

2、背景

程序的发布的两种模式:

  • debug 模式(在生成可执行程序的时候,会加入调试信息,可调试)。
  • release 模式(没有调试信息,不可被调试)。

3、基本概念

Linux gcc / g++ 出来的二进制程序,默认是 release 模式
要使用 gdb 调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。
在这里插入图片描述
我们用 readelf 可以读取可持续程序格式,管理信息
在这里插入图片描述
我们可以发现 debug 版本的多了调试信息,同时文件大小还比不加 debug 的大。

4、基本操作

gdb 命令格式:gdb [目标文件名]
q / quit 退出

在这里插入图片描述

这些基本操作中,常用操作都在下面举了例子,例子也是大致按照调试步骤来排列的。

  • list/l + 行号:列出行号前后五行源代码,若为前五行,则往后列够10行,若为后五行,则列出前面五行加最后几行。

在这里插入图片描述

  • list/l:显示程序源代码,从上次的位置开始,每次列出10行。

在这里插入图片描述

  • list/l + 函数名:列出指定函数的源代码。

在这里插入图片描述

  • list/l + 文件名:行号:列出指定函数的源代码。

在这里插入图片描述

  • 无命令:按回车执行最近一次命令。

在这里插入图片描述

  • b / break + 行号:在某一行设置断点。

在一个调试周期下,把 gdb 打开不退,断点号即使删了也会线性递增,就是删了断点2,他下个断点会是3,但是退出gdb重新启动,断点就没有了。

在这里插入图片描述

  • b / break + 函数名:在某个函数开头设置断点。(实际上是这个断点是打在该函数的第一行)

在这里插入图片描述

  • info / i b:查看断点信息。当前设置了哪些断点。

  • delete / d breakpoint:删除所有断点

在这里插入图片描述

  • delete / d Num:删除序号为 Num 的断点。

在这里插入图片描述

  • disable Num:禁用断点。

在这里插入图片描述

  • enable Num:启用断点。

在这里插入图片描述

  • r 或 run:开始调试,如果没有设置断点,就直接运行结束,有断点,就停下。(相当于 VS 中的 F5)

在这里插入图片描述

  • n 或 next:单条执行。(逐过程,不会进入函数,相当于 VS 中的 F10)

在这里插入图片描述

  • s 或 step:进入函数调用。(逐语句,会进入函数,相当于 VS 中的 F11)

在这里插入图片描述

  • display + 变量名:设置常显示。跟踪查看一个变量,每次停下来都显示它的值。

在这里插入图片描述

  • undisplay + 序号:取消常显示。取消对先前设置的那些变量的跟踪。

在这里插入图片描述
注意: 再次 display 时,i 的值同样是线性递增的,与断点相同。

  • print / p + 变量:打印变量值。

在这里插入图片描述

  • until X(指定行号):跳转到第 X 行。

在这里插入图片描述

  • continue / c:从当前位置开始连续而非单步执行程序。(运行至下一个断点处停下来)

在这里插入图片描述

  • finish:执行到当前函数返回,然后停下来等待命令。输入 finish 可直接结束当前函数调用,用此命令可以快速判断一个程序中到底是哪个函数出了 bug(此命令在非 main 函数中才有效)。

在这里插入图片描述

  • info / i locals:查看当前栈帧局部变量的值

在这里插入图片描述

  • bt / breaktrace:查看各级函数调用及参数(相当于 VS 中的查看调用堆栈)。

在这里插入图片描述

  • watch + 变量名:执行时监视一个表达式(如变量的值)。如果监视的表达式在程序运行期间的值发生变化,gdb会暂时暂停程序的执行,并通知使用者。

在这里插入图片描述
类似于断点,但是类型不一样,可以 info b一下:
在这里插入图片描述
发现类型是 watchpoint

  • set var i = 100:修改变量 i 的值(比如在调试过程中,有一个变量值是flag,我不小心设成了0,应该是-1,结果在Sum函数中,我想算sum*flag,导致怎么算都是0,因此可以直接改变var flag 的值先行验证)。

在这里插入图片描述

  • 条件断点1(新增):b + 行号 + if 的判断语句:当判断语句满足时,断点便触发。如:b 28 if i = 10
  • 条件断点2(已有断点):condition + 断点序号 + if 的判断语句:当判断语句满足时,断点便触发,与上述不同的是改已有的断点。

5、cgdb

(1)安装

$ sudo apt install -y cgdb

(2)好处是可以分屏
在这里插入图片描述
cgdb的命令与gdb基本相同。

我们调试过程中可以使用连招,断点 b + 逐过程n + 逐语句s定位到函数,同时可以结合display显示变量,watch监视,finish结束函数,until跳转等功能进行调试

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript ---案例(统计字符出现次数)

统计字符出现次数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

在Linux中运行flask项目

准备 这里我准备了一个GitHub上某个大佬写的留言板的Flask项目&#xff0c;就用这个来给大家做示范了。 查看留言板的目录结构 查看主程序所用的库函数 只有一个第三方库 Flask 安装pip sudo apt install python3-pip -y测试 pip 安装成功 修改pip镜像源 修改pip的默认下载…

篮球运动场景物体检测系统源码分享

篮球运动场景物体检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

Three.js 3D人物漫游项目(中)

本文目录 前言最终效果展示1、人物添加阴影1.1 添加地板1.1.1 效果 1.2 模型castShadow1.2.1 效果 1.3 轨道控制器1.3.1 效果 2、创建建筑物2.1 代码2.2 效果 前言 在数字技术的浪潮中&#xff0c;三维图形渲染技术以其独特的魅力&#xff0c;正逐步渗透到我们生活的方方面面&a…

Blender软件三大渲染器Eevee、Cycles、Workbench对比解析

Blender 是一款强大的开源3D制作平台&#xff0c;提供了从建模、雕刻、动画到渲染、后期制作的一整套工具&#xff0c;广泛应用于电影、游戏、建筑、艺术等领域。 渲染101云渲染云渲6666 相比于其他平台&#xff0c;如 Autodesk Maya、3ds Max 或 Cinema 4D&#xff0c;Blende…

Gnu Radio抓取WiFi信号,流程图中模块功能

模块流程如图所示&#xff1a; GNURadio中抓取WiFi信号的流程图中各个模块的功能&#xff1a; UHD: USRP Source&#xff1a; 使用此模块配置USRP硬件进行信号采集。设置频率、增益、采样率等参数。Complex to Mag^2&#xff1a; 将复数IQ数据转换为幅度的平方。Delay&#xf…

descrTable常用方法

descrTable 为 R 包 compareGroups 的重要函数&#xff0c;有关该函数以及 compareGroups 包的详细内容见&#xff1a;R包compareGroups详细用法 加载包和数据 library(compareGroups)# 加载 REGICOR 数据&#xff08;横断面&#xff0c;从不同年份纳入&#xff0c;每个变量有…

深入理解前端拖拽:从基础实现到事件冒泡与委托的应用【面试真题】

在前端开发中&#xff0c;拖拽功能是一项常见的交互需求。通过监听鼠标或触摸事件&#xff0c;用户可以拖动元素并将其放置到指定位置。理解拖拽的底层实现、如何判断拖拽的是子元素还是父元素&#xff0c;以及事件冒泡和事件委托的原理&#xff0c;可以帮助我们更好地实现复杂…

stm32 FLASH闪存(读写内部FLASH读取芯片ID)

理论 1.FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;(FLASH管理员)可以对程序存储器和选项字节进行擦除和编程 读写FLASH的用途&#xff1a; 利用程序存储器的剩余空间来保存掉电不…

C++—vector的常见接口与用法(正式进入STL)

目录 0.提醒 1.介绍 2.构造 1.正常构造 2.默认值构造 3.调用默认构造函数构造 3.遍历 1.迭代器 2.范围for 3.下标访问 4.容量 1.capacity&#xff1a;返回当前容器的容量 2.reserve&#xff1a;如果传的k比当前容量大&#xff0c;则扩容到比k大或者等于k的数&…

为人机交互保持预见性丨基于G32A1445的T-BOX应用方案

T-BOX是一种集成了通信、计算和控制功能的车载信息处理终端&#xff0c;通过车辆与云端、移动网络等进行数据交互&#xff0c;用于车、人、外部环境的互联互通&#xff0c;支持车辆定位、车载通信、远程控制、故障诊断、数据传输、紧急呼叫等功能&#xff0c;帮助车辆实现更加智…

2023北华大学程序设计新生赛部分题解

时光如流水般逝去&#xff0c;我已在校园中奋战大二&#xff01;(≧▽≦) 今天&#xff0c;静静回顾去年的新生赛&#xff0c;心中涌起无尽感慨&#xff0c;仿佛那段青春岁月如烟花般绚烂。✧&#xff61;(≧▽≦)&#xff61;✧ 青春就像一场燃烧的盛宴&#xff0c;激情澎湃&…

什么情况下会导致索引失效?

什么情况下会导致索引失效&#xff1f; 1. 组合索引非最左前缀2. LIKE查询%开头3. 字符串未加引号4. 不等比较5. 索引列运算6. OR连接查询 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1. 组合索引非最左前缀 描述&#xff1a;在组合索引…

基于springboot的驾校管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的驾校管理系统4拥有三种角色&#xff0c;分别为管理员、教练、学员。 管理员&#xff1a;学员/教练管理、报名管理、车辆管理、教练分配管理、课程安排管理、考勤打卡管理…

【HTTP】构造HTTP请求和状态码

状态码 用于响应中&#xff0c;表示响应的结果如何 正确&#xff1f;错误&#xff1f;什么原因&#xff1f; HTTP 中的状态码都是标准约定好的 200 OK 成功了&#xff0c;一切顺利 在抓包到的响应中 404 Not Found 访问的资源&#xff08;URL 中的路径&#xff09;没找…

想要让ai做ppt?试试这四个!

今天咱们来聊点新鲜的&#xff0c;就是那些能让我们从繁琐的PPT制作中解脱出来的智能工具。你是否还在为制作PPT熬夜到天亮&#xff1f;别担心&#xff0c;我这就带你看看目前市面上最火的几款智能PPT生成工具&#xff0c;它们的表现如何呢&#xff1f;让我们一探究竟&#xff…

BUUCTF逆向wp [WUSTCTF2020]Cr0ssfun

第一步 查壳&#xff0c;本题是64位&#xff0c;无壳。 第二步 查看主函数&#xff0c;点开看主函数&#xff0c;没什么东西。 左边表里面看到好几个i开头的函数&#xff08;红色方框里面&#xff09;&#xff0c;点开看后每个函数的最后末尾&#xff08;图中红色椭圆圈那里&a…

MyBatis-config.xml核心配置

MyBatis-config.xml 包含了会深深影响MyBatis行为的设置和属性信息&#xff0c;配置文档的顶层结构如下 environments&#xff08;环境配置&#xff09; environments用于配置数据库的URL信息&#xff0c;MyBatis-config可以动态配置多个数据源&#xff0c;用于连生产、预发、…

(done) 声音信号处理基础知识(4)

来源&#xff1a;https://www.youtube.com/watch?vdaB9naGBVv4 模拟信号特点如下 时域连续(x轴) 振幅连续(y轴) 如下是模拟信号的一个例子&#xff1a; 数字信号特点如下&#xff1a; 一个离散值序列 数据点的值域是一系列有限的值 ADC&#xff1a;模拟信号到数字信号的…

媒体动态:播客增长的重大转变、社交媒体创新和搜索动态

关键亮点&#xff1a; 关键亮点&#xff1a; 电视和音频&#xff1a;播客继续迅速增长&#xff0c;但主要由少数几档节目驱动。付费社交&#xff1a;Meta在最新的一次成功财报电话会议后继续加倍推进AI进展&#xff0c;X起诉GARM和广告商反垄断&#xff0c;Snap的订阅计划继续…