当前位置: 首页 > news >正文

【Linux】基础开发工具(3)

1. 版本控制器Git

1.1 Git的简史

Git 的历史可以追溯到 2005 年1。当时 Linux 内核项目的开发团队一直使用 BitKeeper 进行版本管理,但由于一位 Linux 开发成员写了一个连接 BitKeeper 仓库的外挂,BitMover 公司决定中止 Linux 免费使用 BitKeeper 的授权1。Linux 团队与 BitMover 磋商无果后,Linux 内核的创始人 Linus Torvalds 决定开发自己的版本管理系统1。

2005 年 4 月 3 日,Linus Torvalds 正式开始开发 Git3。仅仅四天后,他就发布了 Git 的第一个可用版本(0.1),这个初始版本包含了 Git 的核心功能3。在接下来的几周内,Linus 和其他早期贡献者对 Git 进行了快速迭代和改进,逐步完善了其稳定性和功能3。

Git 的设计目标是实现分布式开发,解决现有集中式版本控制工具(如 CVS、Subversion)性能低下、分支管理不灵活以及依赖中央服务器等问题3。它具有所有行为都要校验、操作必须在毫秒级内完成等特性1。

随着开发的深入,Git 逐渐被大众接受1。2008 年 2 月,为 Git 提供托管服务的 GitHub 上线,进一步推动了 Git 的广泛应用1。此后,Git 成为了世界上最流行的分布式版本控制系统之一,被大量的初创企业、集体企业和跨国公司用于维护软件项目的源代码2。

1.2 Git的操作(以下操作是在Centos环境进行的)

1.2.1 安装 git

yum install git

1.2.2 在gitee创建项目

登录gitee创建仓库在创建好的项目页面中复制项目的链接, 以备接下来进行下载

下载项目到本地 

创建好一个放置代码的目录

git clone [url]

这里的url就是刚刚创建好的项目链接 

 1.2.3 git add

git add 命令是一个非常重要的操作,它的主要作用是将工作目录中修改过的文件或新建的文件,添加到暂存区(也称为 “索引”,英文为index,以便后续提交到版本库中。

git add [文件名]

1.2.4 git commit

git commit 命令用于将暂存区(staging area ,也叫索引 index)的内容提交到本地版本库,形成一个新的提交对象。

git commit -m "xxx"

提交的时候应该注明提交日记, 描述改动的详细内容. 

1.2.5 git push

 git push 命令用于将本地版本库中分支的提交推送到远程仓库,使得本地的代码变更可以与团队成员共享,或者备份到远程服务器上。

git push

需要填⼊用户名密码. 同步成功后, 刷新 gitee 页⾯就能看到代码改动了. 

git提交的时候,只会提交变化的部分! 

1.2.6 git pull

git pull 是一个常用命令,它主要用于从远程仓库获取最新代码,并自动尝试将获取到的代码合并到本地当前分支 ,在团队协作和多设备开发场景中发挥着重要作用。

git pull [文件名]

1.2.7 其他

git log //查看仓库的提交历史记录。
git status

显示工作目录、暂存区(也称为 “索引”)和本地仓库之间的状态差异。它能直观地告诉你哪些文件被修改、哪些被添加到暂存区、哪些是未被跟踪的新文件,帮助你在提交代码前了解当前工作进度。 

.ignore

 .gitignore 是一个至关重要的配置文件,用于指定 Git 应该忽略哪些文件或目录,避免它们被纳入版本控制。这在实际开发中非常实用,比如可以忽略自动生成的文件、编译产物、日志文件等无需版本管理的内容。

2.  调试器 - gdb/cgdb使用

2.1 样例代码

// mycmd.c
#include <stdio.h>
int Sum(int s, int e)
{int result = 0;for(int i = s; i <= e; i++){result += i;}return result;
}int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}

2.2 预备

程序的发布⽅式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的⼆进制程
序,默认是 release 模式。
要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候, 加上 -g 选项,如果没有添加,程序无法被
编译。

2.3 常见使用

开始: gdb binFile
退出: ctrl + d quit 调试命令
list/l:显示源代码
b:打断点
d:删断点
删断点只能根据断点编号来删,gdb不退出,断点编号依次递增。
p:打印指定变量的值
dispaly:指定变量的值常显示
命令
作⽤
样例
list/l
显⽰源代码,从上次位置开始,每次列出
10⾏
list/l 10
list/l 函数名
列出指定函数的源代码
list/l main
list/l ⽂件名:⾏号
列出指定⽂件的源代码
list/l mycmd.c:1
r/run
从程序开始连续执⾏
run
n/next
单步执⾏,不进⼊函数内部
next
s/step
单步执⾏,进⼊函数内部
step
break/b [⽂件名:]⾏号
在指定⾏号设置断点
break 10
break test.c:10
break/b 函数名
在函数开头设置断点
break main
info break/b
查看当前所有断点的信息
info break
finish
执⾏到当前函数返回,然后停⽌
finish
print/p 表达式
打印表达式的值
print start+end
p 变量
打印指定变量的值
p x
set var 变量=值
修改变量的值
set var i=10
continue/c        
从当前位置开始连续执⾏程序,直到遇到下一个断点或程序结束
continue
delete/d
breakpoints
删除所有断点
delete breakpoints
delete/d
breakpoints n
删除序号为n的断点
delete breakpoints 1
disable breakpoints
禁⽤所有断点
disable breakpoints
enable breakpoints
启⽤所有断点
enable breakpoints
info/i breakpoints
查看当前设置的断点列表
info breakpoints
display 变量名
跟踪显⽰指定变量的值(每次停⽌时)
display x
undisplay 编号
取消对指定编号的变量的跟踪显⽰
undisplay 1
until X⾏号
执⾏到指定⾏号
until 20
backtrace/bt
查看当前执⾏栈的各级函数调⽤及参数
backtrace
info/i locals
查看当前栈帧的局部变量值
info locals
quit
退出GDB调试器
quit

2.4 常见技巧

安装cgdb:
上⾯的基本调试还是⿇烦,虽然是⿊屏,但是还是想看到代码调试
推荐安装cgdb:
Ubuntu: sudo apt-get install -y cgdb
Centos: sudo yum install -y cgdb

2-4-1 watch

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

2-4-2 set var确定问题原因

更改⼀下标志位,假设我们想得到 +-result

2-4-3 条件断点

添加条件断点
注意:
条件断点添加常⻅两种⽅式:1. 新增 2. 给已有断点追加
注意两者的语法有区别,不要写错了。
新增: b 行号/⽂件名:行号/函数名 if i == 30(条件)
给已有断点追加:condition 2 i==30, 其中2是已有断点编号,没有if

 

 

http://www.dtcms.com/a/270009.html

相关文章:

  • 云归子批量混剪软件批量剪辑软件批量分割视频更新记录
  • 关于 scrapy框架 详解
  • Spring AI 基本组件详解 —— ChatClient、Prompt、Memory
  • 装修水电改造需要注意什么?水电改造有哪些注意事项?
  • C++ 的 copy and swap 惯用法
  • 05每日简报20250708
  • Kafka消息倾斜
  • 机器学习(西瓜书) 第三章 线性模型
  • Java 面向对象三大特性详解:封装、继承与多态,掌握OOP核心思想
  • OSPFv3和v2区别(续)
  • 数字人分身 + 矩阵系统聚合 + 碰一碰发视频:源码搭建 支持 OEM
  • 【网络协议安全】任务14:路由器DHCP_AAA_TELNET配置
  • UE实现路径回放、自动驾驶功能简记
  • 【Python篇】PyCharm 安装与基础配置指南
  • 移动机器人的认知进化:Deepoc大模型重构寻迹本质
  • c语言中的数组I
  • Foundry 依赖库管理实战
  • QML事件处理:鼠标、拖拽与键盘事件
  • HTML5 新特性详解:从语义化到多媒体的全面升级
  • CPP中的List
  • 我的第二份实习,学校附近,但是干前端!
  • 了解 RAC
  • FastAPI通用签名校验模块设计文档
  • 【python基础】python和pycharm的下载与安装
  • 在STM32 FreeRTOS环境中使用mutex和ringbuffer实现多任务的UART同步通信
  • JVM 整体架构详解:线程私有与线程共享内存区域划分
  • 【Android】【input子系统】【Android 焦点窗口问题分析思路】
  • 【linux网络】网络编程全流程详解:从套接字基础到 UDP/TCP 通信实战
  • 【Java安全】RMI基础
  • go go go 出发咯 - go web开发入门系列(二) Gin 框架实战指南