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

Linux:版本控制器git和调试工具cgdb

✨✨所属专栏:Linux✨✨

✨✨作者主页:嶔某✨✨

版本控制器

为了能够更⽅便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。 ⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、 dgn、rvt等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码⽂件! 

git 简史

同⽣活中的许多伟⼤事物⼀样,Git 诞⽣于⼀个极富纷争⼤举创新的年代。 Linux 内核开源项⽬有着为数众多的参与者。 绝⼤多数的 Linux 内核维护⼯作都花在了提交补丁和保存归档的繁琐事务上(1991−2002年间)。 到 2002 年,整个项⽬组开始启⽤⼀个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使⽤ BitKeeper 的权⼒。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使⽤ BitKeeper 时的经验教训,开发出⾃⼰的版本系统。 他们对新的系统制订了若⼲⽬标:

  • 速度
  • 简单的设计
  • 对⾮线性开发模式的强⼒⽀持(允许成千上万个并⾏开发的分⽀)
  • 完全分布式
  • 有能⼒⾼效管理类似 Linux 内核⼀样的超⼤规模项⽬(速度和数据量)

⾃诞⽣于 2005 年以来,Git ⽇臻成熟完善,在⾼度易⽤的同时,仍然保留着初期设定的⽬标。 它的速度⻜快,极其适合管理⼤项⽬,有着令⼈难以置信的⾮线性分⽀管理系统。 

 git的简单使用

克隆仓库 

下载好git后。我们进入gitee或者github,新建一个仓库

将新建仓库的路径复制下来

在本地打开cmd窗口输入

git clone https://github.com/QinMou000/Code.git

你的当前目录下就会新建一个新文件了

其实在你新建仓库的时候,在云端为你新建了一个文件夹,这个新文件就是从云端的仓库克隆下来的。

 上传文件

 在里面新建一个.c文件

 在当前页面打开cmd窗口输入

git add test.c // 你要上传的文件
git commit -m "这是一个测试" // 这次上传你做了什么工作
git push // 将代码上传到云端

如果一切正常,再次打开github就会在你的仓库里看到你刚刚上传的文件了 

在我们本地仓库有一个隐形文件 .git 这个文件里面管理和记录了你本地仓库的所有提交,命令commit就是把你本地的更改记录到 .git 里面。push指令就是将本地的更改同步到云端。

那如果有两个人A B在管理这个仓库,今天上传了一个文件,B不知道A上传了,B也准备上传文件,但是此时B的本地仓库和云端仓库不一样,一个陌生的文件出现在了云端(A上传的)并且这个文件在B的本地没有任何记录,此时B就会上传失败。此时B的解决方法就是将本地与云端同步一次,也就是git pull指令。但这并不会删除B原来准备上传的文件,相当于把A上传的文件和上传记录拷了下来。这时B在git push 就没有任何问题了

调试器 - gdb/cgdb使⽤

程序的发布⽅式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的⼆进制程序,默认是 release模式。

要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候, 加上 -g 选项,如果没有添加,程序⽆法被 编译

gcc test -o test.c -g

常见指令

命令作用样例
list/l显示源代码+数字表示行数list/l 10
list/l 函数名列出指定函数代码list/l main
list/l 文件名:行号列出指定文件的源代码list/l test.c:2
r/run从程序开始连续执行run
n/next单步执行,不进入函数内部next
s/step单步执行,进入函数内部

step

break/b 文件名:行号在指定行号设置断点

break test.c:10

b 10

break/b 函数名在函数开头设置断点break fun
info break/b查看当前所有断点信息info b
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

watch

执⾏时监视⼀个表达式(如变量)的值。如果监视的表达式在程序运⾏期间的值发⽣变化,GDB 会暂停程序的执⾏,并通知使⽤者。如果你有⼀些变量不应该修改,但是你怀疑它修改导致了问题,你可以watch它,如果变化了,就会通知你.

条件断点添加常⻅两种⽅式:

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

本期博客到这里就结束了,如果有什么错误,欢迎指出,如果对你有帮助,请点个赞,谢谢! 


http://www.kler.cn/a/398928.html

相关文章:

  • uniapp 跨域前端代理
  • 详细分析ip addr show 查看网络配置的命令
  • SpringBoot配置相关的内容
  • Ubuntu VNC Session启动chromium和firefox报错
  • [ACTF2020]Upload 1--详细解析
  • <websocket><PLC>使用js和html实现webscoket,与PLC进行socket通讯的实例
  • react+hook+vite项目使用eletron打包成桌面应用+可以热更新
  • 使用 Python 和 Selenium 解决 hCaptcha:完整指南
  • fastadmin常用操作
  • 推荐一款功能强大的光学识别OCR软件:Readiris Dyslexic
  • YOLO-SLD: An Attention Mechanism-ImprovedYOLO for License Plate Detection
  • 大三学生面试经历(2)
  • K8s学习笔记之了解k8s的网络模型
  • Vue2教程001:初识Vue
  • C 语言Union 结构
  • Docker compose部署RocketMQ(单机版)
  • 解剖了一个Github 5k Star项目
  • Android笔记(三十六):封装一个Matrix从顶部/底部对齐的ImageView
  • C#获取指定文件夹下所有文件的两种方式(使用Directory.GetFiles()和Directory.EnumerateFiles()函数)及其区别
  • 自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展
  • 【黑马点评debug日记】redis登录跳转不成功
  • 操作系统学习笔记-5 传输层
  • Embedding的用法
  • SSDT Hook
  • 小程序-基于java+SpringBoot+Vue的校园失物招领系统设计与实现
  • outlook邮箱关闭垃圾邮件——PowerAutomate自动化任务