首页 > 系统相关 >【linux系统】基础开发工具(git、gdb/cgdb使用)

【linux系统】基础开发工具(git、gdb/cgdb使用)

时间:2024-12-11 11:03:12浏览次数:5  
标签:git cgdb breakpoints gdb mycmd 版本 Linux 断点

1. 版本控制器Git

不知道你工作或学习时,有没有遇到这样的情况:我们在编写各种⽂档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出⼀个副本,比如: “报告-v1” “报告-v2” “报告-v3” “报告-确定版” “报告-最终版” “报告-究极进化版” ... 每个版本有各自的内容,但最终会只有⼀份报告需要被我们使用 。 但在此之前的工作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的文件就越来越 多,文件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各⾃都是修改了什么 吗? 文档如此,我们写的项目代码,也是存在这个问题的!!

1.1 版本控制器

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

1.2 git 简史

同⽣活中的许多伟大事物⼀样,Git 诞⽣于⼀个极富纷争大举创新的年代。 Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991−2002年间)。 到 2002 年,整个项目组开始启⽤⼀个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
  • 速度
  • 简单的设计
  • 对⾮线性开发模式的强⼒⽀持(允许成千上万个并⾏开发的分⽀)
  • 完全分布式
  • 有能⼒⾼效管理类似 Linux 内核⼀样的超⼤规模项⽬(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的⽬标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。

1.3 安装 git

yum install git

1.4 在 Github 创建项目

注册账号 这个比较简单, 参考着官网提示即可. 需要进行邮箱校验. 创建项目 1. 登陆成功后, 进入个人主页, 点击左下方的 New repository 按钮新建项目

2. 然后跳转到的新页⾯中输⼊项⽬名称(注意, 名称不能重复, 系统会自动校验. 校验过程可能会花费几秒钟). 校验完毕后, 点击下方的 Create repository 按钮确认创建。

 3. 在创建好的项目页面中复制项目的链接, 以备接下来进行下载。

下载项目到本地

创建好⼀个放置代码的⽬录。

git clone [url]

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

1.5 三板斧

1. git add 将代码放到刚才下载好的目录中
git add [⽂件名]
将需要用 git 管理的文件告知 git 2. git commit 提交改动到本地
git commit -m "XXX"
最后的 "." 表⽰当前⽬录 提交的时候应该注明提交日志, 描述改动的详细内容. 3. git push 同步到远端服务器上
git push
需要填入用户名密码. 同步成功后, 刷新 Github 页面就能看到代码改动了. 配置免密码提交(参考) git本地免密码和账号pull、push_没有git账号怎么拉代码-CSDN博客文章浏览阅读1.2w次,点赞10次,收藏15次。说明:%HOME%,一般为C:\users\Administrator,也可以是你自己创建的系统用户名目录,反正都在C:\users\中一.windows下:需要创建一个.git-credentials文件,由于在Window中不允许直接创建以"."开头的文件,所以需要借助git bash进行,步骤如下:1.打开git bash客户端,进入%HOME%目录(即C:\users\自己的电..._没有git账号怎么拉代码https://blog.csdn.net/camillezj/article/details/55103149 4. 其他
  • git log/status/pull
  • .ignore
  • 首次使用问题,需要现场看

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 选项,如果没有添加,程序无法被编译
$ gcc mycmd.c -o mycmd # 默认模式,不⽀持调试
$ file mycmd
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=82f5cbaada10a9987d9f325384861a88d278b160, for GNU/Linux
3.2.0, not stripped

$ gcc mycmd.c -o mycmd -g # debug模式
$ file mycmd
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=3d5a2317809ef86c7827e9199cfefa622e3c187f, for GNU/Linux
3.2.0, with debug_info, not stripped

2.3 常见使用

  • 开始: gdb binFile
  • 退出: ctrl + d 或 quit 调试命令
命令 作用 样例
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

本篇文章分享了关于linux环境下的基本开发工具,git以及gdb/cgdb的介绍。欢迎评论,分享交流。

标签:git,cgdb,breakpoints,gdb,mycmd,版本,Linux,断点
From: https://blog.csdn.net/2402_82689232/article/details/144392888

相关文章

  • GitHub 正式收录 MoonBit 作为一门通用编程语言!核心用户突破三万!
    MoonBit 编程语言正式被Github收录!这对于一个仅有两年发展时间的编程语言来说是一种高度认可,期待未来由MoonBit编写的项目数量快速增长,早日成为首个由国人研发迈进10万➕用户的编程语言。最近用户数已经接近3万(数据统计来源综合VisualStudioMarketplac......
  • 如何实现默认显示git的第一帧图片,当鼠标经过时,播放完整的gif动画
    要实现鼠标悬停时播放GIF动画,默认显示GIF的第一帧,你可以使用JavaScript和HTML。以下是一种实现方法:HTML:<divclass="gif-container"><imgsrc="first-frame.jpg"data-gif="animation.gif"alt="Description"></div>first-frame.jp......
  • git怎样忽略已加入版本库的文件?
    在Git中忽略已经加入版本库的文件,你需要先将文件从Git的跟踪列表中移除,然后添加到.gitignore文件中。这里有几种方法可以实现:1.使用gitrm--cached命令:这是最常用的方法。--cached选项会将文件从Git的索引(stagingarea)中移除,但保留在你的工作目录中。这样,Git就......
  • git区分大小写吗?如果不区分,那要如何设置?
    Git区分大小写,但默认情况下,它对文件名大小写的更改不敏感。这意味着如果你在一个不区分大小写的操作系统(如Windows或macOS默认设置)上重命名文件README.md为readme.md,Git默认不会识别这一更改。这会导致一些问题,例如:在区分大小写的操作系统上出现问题:如果你在Linux服务器......
  • git commit之后,如何撤销commit
    gitreset--softHEAD^仅仅是撤回commit操作,您写的代码仍然保留。HEAD^的意思是上一个版本,也可以写成HEAD~1如果你进行了2次commit,想都撤回,可以使用HEAD~2至于这几个参数:--mixed意思是:不删除工作空间改动代码,撤销commit,并且撤销gitadd.操作这个为默认参数,gitreset--......
  • 惊艳!首份“架构师成长笔记”在GitHub狂澜9000星
    其实架构师是需要一个相对而言对架构师友善的环境。第一,架构师到底需要什么?一个架构师要成长,首先他需要信任,第二他需要授权,第三他需要时间,第四他需要资源,少一样都很难开展工作。如果一个公司没有很系统的架构设计,对于架构师来说这是一个创造机会或者创造价值的场景,一开始的选......
  • 冲刺金三银四!GitHub中文社区高热度的Java面试题被我整理好了!
     面对已经过去的金九银十很多小伙伴都受到了很大的挫折!最近收到一个小伙伴金九银十在阿里的面试流程完全被吊打,和我一起看看阿里都问了什么吧!添加图片注释,不超过140字(可选)小编在这里也简单的看了一下牛客网阿里招聘的一些评价,难度指数普遍在四星以上!!!!添加图片注......
  • Watt Toolkit 加速 github clone 命令行下载
      这里的26561是默认的,不要修改打开Pycharm的设置 将127.0.0.1和26561录入进去,然后在终端进行clone操作即可如果没有pycharm,在cmd终端也是可以的打开系统代理设置  ......
  • git cheery-pick操作及相关知识
    介绍gitcherry-pick<CommitHash>的使用先了解一下gitcherry-pick<CommitHash>命令该命令用与合并某个分支的某一次提交,<CommitHash>替换为对应那次提交的哈希码(Hash)。哈希码:哈希算法是一种将任意长度的输入数据转换成固定长度输出的方法,输出结果称为哈希码。可以起到压......
  • 【Ray tracing with NeRF】Learnable Wireless Digital Twins: Reconstructing Elect
    LearnableWirelessDigitalTwins:ReconstructingElectromagneticFieldwithNeuralRepresentations###1.Overview2.MLmodelfortheEMpropertyandtheinteractionbehaviour2.1NeuralObject\[\mathbf{e}=\widetilde{g}_{\mathscr{E},o}\left......