乌市泽哥 发表于 2024-8-16 10:42:04

【深入解析git和gdb:版本控制与调试利器的终极指南】

https://i-blog.csdnimg.cn/blog_migrate/44b41c7fd525a449ec738d29ff16c3b7.jpeg

【本节目的】

   

[*] 1. 掌握简单gdb使用于调试
[*] 2. 学习 git 下令行的简单操作, 能够将代码上传到 Github 上
1.Linux调试器-gdb使用

1.1.配景



[*]步伐的发布方式有两种,debug模式和release模式
[*]release模式不可被调试,debug模式可被调试
[*]Linux gcc/g++出来的二进制步伐,默认是release模式
[*]要使用gdb调试,必须在源代码天生二进制步伐的时候, 加上 -g 选项
为什么要有debug模式和release模式两种模式呢?这两种模式的存在是为了在差别阶段和用途下提供差别的编译和运行配置。
https://i-blog.csdnimg.cn/blog_migrate/fcb8d2c7b6fc5ed1542e1db6b4c9c68b.png
Debug 模式主要用于开发和调试阶段,以提供更好的可读性和调试本领,而 Release 模式则用于终极部署,面向用户的就是该版本,且该版本能提供更好的性能和减小可执行文件的体积。Debug 模式形成的可执行步伐会添加调式信息,Release 模式形成的可执行步伐会去掉调式信息。对于用户来说,用户不需要调式信息,用户只在乎下载速率和安装文件巨细。对于步伐员来说,步伐员需要改bug,因此需要调式信息才能修正bug,于是就出现了两种模式。
1.2. 开始使用

我们首先写个步伐,方便背面调试样例
#include<stdio.h>
int Sum(int n)
{
        int i = 1;
        int sum = 0;
        for (; i <= n; i++)
        {
                sum += i;
        }
        return sum;
}
int main()
{
        int result = Sum(100);
        printf("%d\n", result);
        return 0;
} 然后再将我们的makefile文件写好。
https://i-blog.csdnimg.cn/blog_migrate/93d86a9eafd68e567ca9c3bdc6bbb642.png
然后我们来编译一下我们上面的代码,上面的代码是求从1加到100的和,可以看到我们的步伐是正确的。
https://i-blog.csdnimg.cn/blog_migrate/5037a29798d6bead6664f7ad0b08c461.png
接下来就开始我们的调试步伐
https://i-blog.csdnimg.cn/blog_migrate/cdad33c84647a90563c412f3f6701c6d.png
但是我们发现此时我们不能举行调试,因为此时是release版本,是不可被调试滴。
https://i-blog.csdnimg.cn/blog_migrate/7bd3e32cb7b512b697b957159a0d2510.png
为了区分两种模式下的可执行步伐,将Debug版本下的可执行步伐加上-d,此时经过修改之后。
https://i-blog.csdnimg.cn/blog_migrate/350128910943c90b08727627a867c616.png
我们可以清楚的看到两个模式下的可执行步伐的文件巨细,刚好可以验证我们上面的结论。通过文件巨细能验证Debug确实增长了调式信息,但是我们想看到更详细的调试信息。
readelf 是一个用于读取 ELF(Executable and Linkable Format,可执行和可链接格式)文件的下令行工具。ELF 是一种用于在Unix和类Unix体系上执行步伐的尺度文件格式。readelf 工具允许用户查看 ELF 文件的内部结构、头部信息、节(sections)、步伐头部、符号表等内容。
该工具通常在开发和调试过程中使用,以便分析可执行文件或共享库的细节,了解它们的结构和元数据。通过 readelf,用户可以获取关于 ELF 文件的各种信息,比方代码段和数据段的巨细、链接地点、节头表、符号表等。
https://i-blog.csdnimg.cn/blog_migrate/78b581907b223df03fe54928c056c69e.png
然后我们在删除刚刚两个版本的文件,重新make一个Debug模式的可执行步伐mytest文件,然后开始调试mytest文件。
https://i-blog.csdnimg.cn/blog_migrate/ac262b9d04b73041f8eb75059129cfd8.png
gdb调试相干指令学习 - 平替 - vs上的调试
https://i-blog.csdnimg.cn/blog_migrate/30b575adb085d11dab48623c037e2110.png
gdb binFile 退出: ctrl + d 或 quit 调试下令:
https://i-blog.csdnimg.cn/blog_migrate/f8c0721d2882e97d8dd07f6c61cec191.png
2. 学习 git 下令行的简单操作, 能够将代码上传到 Github 上

2.1.什么是git?明确版本控制器

git是一个分布式版本控制体系,用于跟踪项目代码的变化。
版本控制器(Version Control System,VCS)是一种记录和管理文件或代码变更的体系。它追踪文件的历史变更,允许用户回溯到先前的状态,并支持多人协同开发。
2.2.什么是github/gitee?

https://i-blog.csdnimg.cn/blog_migrate/ad01406fbd100ec2b1a25b875536f3ec.png
GitHub:GitHub是一个基于Git的代码托管平台,提供了代码堆栈的托管服务。开发者可以将他们的项目代码存储在GitHub上,并与团队成员协同工作。GitHub也提供了许多协作和社交功能,如题目跟踪、代码审查、项目管理等,使得团队协作更加便捷。
Gitee:Gitee(码云)是中国的一个类似GitHub的代码托管平台,同样基于Git。它提供了类似的代码堆栈托管服务,并支持团队协作。Gitee也提供了一些特有的功能,以满足中国开发者的需求,如在线构建、镜像堆栈等。
总的来说,Git是版本控制体系,而GitHub和Gitee是基于Git的代码托管平台,它们提供了一些额外的功能来帮助开发者更好地举行协同开发。
2.3.使用 git 下令行

安装git - 必须先安装指令

yum install -y git 由于github是国外的网站,我们访问起来速率较慢,于是这里使用gitee作为我们的样例。
在 Github 创建项目



[*]No.1:注册自己的gitee账号,然后进入自己的个人主页,点击右上角的+号,点击新建堆栈
https://i-blog.csdnimg.cn/blog_migrate/478af9b7bd208314d266e9e7706aff79.png


[*]No.2:在进入创建的堆栈界面后,设置堆栈的名称,如果我们想将该堆栈分享给别人,就可以设置开源,初始化现在选择C语言,.gitignore 是在当地堆栈上传到远端堆栈的时候,不会上传不必要的或敏感的文件提交到代码堆栈。比方,编译产生的临时文件、操作体系天生的文件、一些配置文件等,通常不应该包罗在版本控制中,而 .gitignore 文件就是告诉 git 忽略这些文件的规则,这里也选择C。模板设置 Readme文件 是为了让其他开发者或用户更容易明确和使用你的项目而创建的。它可以包罗项目的概述、依靠关系、配置信息、使用示例等。分支模型涉及到开发,目前这个堆栈只有我们一个人用,以是我们这里就不需要设置了。
https://i-blog.csdnimg.cn/blog_migrate/a9d83388cf1015ccc3d8d61eec9bda27.png



[*]No.3:进入到我们刚才创建的堆栈,点击克隆,选择HTPPS,复制下面的链接。
https://i-blog.csdnimg.cn/blog_migrate/77d359f17ea4510a85d993ec7a910aff.png


[*]No.4:git clone ,这里的 url 就是刚刚复制好的 项目 的链接.
https://i-blog.csdnimg.cn/blog_migrate/13f32de1948f595239a4adf42c65a998.png


[*]No.5:第一招git add .,.代表当前目次下所有文件,第二招git commit -m "提交日志信息(必须好好写)",如果是第一次,我们这里还需要输入以下两个指令:
git config --global user.name "gitee 用户名"
git config --global user.email "gitee邮箱地点"
第三招,git push需要填入用户名密码,然后就提交到我们的远端堆栈了。
https://i-blog.csdnimg.cn/blog_migrate/c7df269a344a8c45db6a7b1af480761e.png
图解:
https://i-blog.csdnimg.cn/blog_migrate/b24faf2b1cf5de310270c50577257f32.png
解释:

[*] git clone:

[*]用途:从远程堆栈克隆(复制)整个代码库到当地。
[*]示例:git clone https://github.com/example/repo.git

[*] git add:

[*]用途:将工作目次中的修改添加到暂存区,为下一次提交做准备。
[*]示例:git add filename(将指定文件添加到暂存区)或 git add .(将所有修改添加到暂存区)。

[*] git commit:

[*]用途:将暂存区中的修改提交到当地堆栈,创建一个新的版本(commit)。
[*]示例:git commit -m "Commit message"

[*] git push:

[*]用途:将当地堆栈的提交推送到远程堆栈。
[*]示例:git push origin master(将当地的 master 分支推送到远程堆栈的 master 分支)。



[*]No.6:提交乐成到远端堆栈
https://i-blog.csdnimg.cn/blog_migrate/e5bceeba415540c4f8bf552f28885b60.png
上面就是当地堆栈提交到远端堆栈的步骤。现在我们来看一下我们刚刚的提交日志信息:git log
https://i-blog.csdnimg.cn/blog_migrate/1b2385ecfc0a88c3c280ca3636d13ba3.png
        上面的图片中commit背面跟的一串是commit的ID,每一次修改都有一次commit的ID,于是我们就可以通过用哪个commit的ID,就可以看到曾经修改的哪个版本。Author是我们刚才配置邮箱和用户名,这是为了标识你是代码的提交者。这信息会被包罗在每次提交中,以记录是谁举行了代码的更改。这对于团队协作和代码贡献追踪非常重要。
  git status 是 Git 中用于查看工作区(working directory)和暂存区(staging area)状态的下令。运行这个下令可以告诉你当前工作目次中文件的状态以及是否有文件修改未提交。
此时会显示工作目次中未被 Git 跟踪的文件和已修改的文件,但不会显示任何文件已暂存(staged)或提交(committed)的状态。
https://i-blog.csdnimg.cn/blog_migrate/658bd162a880739c9aa7489bf034cb31.png
这是已经通过 git add 添加到暂存区但尚未通过 git commit 提交到版本库的文件。
https://i-blog.csdnimg.cn/blog_migrate/a1944f03f89a5ed1595e0e01701a6fce.png
此时显示没有文件需要 commit ,当前暂存区干净。
https://i-blog.csdnimg.cn/blog_migrate/2a9ebe2d25fd3d75f1ef97fcdebcccdb.png
通过 git add push 推送到远端堆栈,下面是推送后的状态
https://i-blog.csdnimg.cn/blog_migrate/c3f5e06ff2a53bcd6bbfb4657343f01a.png
删除堆栈文件的步骤

https://i-blog.csdnimg.cn/blog_migrate/f04e6a80aecf454a88245f6a01c773ff.png
此时我们还可以通过git log查看日志信息
https://i-blog.csdnimg.cn/blog_migrate/c114b5a9f8acf6206c2454fb1642dfa0.png
在Git中,git branch是用来管理分支的下令。
查看分支: 使用git branch下令可以列出当前堆栈中存在的所有分支。当前分支前会有一个星号(*)表示当前地点的分支。
git branch https://i-blog.csdnimg.cn/blog_migrate/27416db38b81a867b189cf1fe5a6757b.png
通过公道使用分支,可以更方便地举行代码的管理和协同开发。分支允许多个开发者在同一时间内独立地开发差别的功能或修复差别的bug,而不会相互影响。每个分支都代表着一个特定的工作线,开发者可以在不干扰其他工作的情况下举行自己的修改和实验,末了归并到master分支,能包管此时出现极少的错误。
.gitignore 是一个用于指定在版本控制体系中忽略哪些文件或目次的配置文件。在一个Git堆栈中,有些文件是不希望被纳入版本控制的,比如编译天生的文件、临时文件、日志文件等。.gitignore 文件告诉Git哪些文件或目次应该被忽略,从而不会被提交到版本库中。通过使用 .gitignore 文件,你可以确保不必要的文件不会被提交到版本库中,从而保持版本库的干净和有序。
现在我们来验证一下,我们想设置.txt文件不被提交到远端堆栈。
https://i-blog.csdnimg.cn/blog_migrate/6de928e774ebb5bb4de276900f5616d3.png
此时我们修改了.gitignore文件,因为.gitignore也是工作区的文件,也要被上传到远端堆栈,但是我们此时先不上传到远端堆栈。
https://i-blog.csdnimg.cn/blog_migrate/8830069060925f80ce9490b35603f6bf.png
上传到远端堆栈后,我们建立一些文件来验证一下
https://i-blog.csdnimg.cn/blog_migrate/2273e326892edfbb856922d693def488.png
然后我们使用我们的三板斧上传到远端堆栈
https://i-blog.csdnimg.cn/blog_migrate/a0d429656f6cec0f5cc57bc98685b25b.png
但是我们发现.txt后缀的文件被上传到远端堆栈了,为什么呢?这是因为在.gitignore中被忽略的文件前面加上了*,这里的*就是通配符的意思,这里必须要带上*,表示所有后缀为.txt的文件。
https://i-blog.csdnimg.cn/blog_migrate/fa6f4913c2b0811b607ece9ecdb2c088.png
我们现在才来创建文件试一试
https://i-blog.csdnimg.cn/blog_migrate/5f6706ee857ad50b779e9432a72022d8.png
此时我们就发现3.txt文件就没有同步到远端堆栈
https://i-blog.csdnimg.cn/blog_migrate/a15a129d3a97e92f2359e550284e7c55.png
通过上面的样例,我们可以发现.gitignore我们没有立即同步到远端堆栈,而也可以立即生效,它是在git add的时候已经将.gitignore加载到暂存区,并且此时就会过滤这些文件。当您在当地举行 git add 操作时,Git 会将已跟踪的文件和新添加的文件添加到暂存区。.gitignore 文件的规则在这个阶段就会生效,被指定忽略的文件将不会被包罗在暂存区中。
总结:https://i-blog.csdnimg.cn/blog_migrate/95220c0de07972f59db77f89a0d64b26.png
git如何举行多人协作 - 并行开发,串行提交

多人协作是Git的一个强大功能,以下是一般的多人协作流程:

[*] 创建远程堆栈: 通常,多人协作的项目会有一个中央远程堆栈,比如在GitHub、Gitee或Bitbucket上创建一个项目堆栈。
[*] 每个人克隆堆栈: 每个团队成员将远程堆栈克隆到当地,使用如下下令:
git clone <远程仓库URL>
[*] 创建分支: 为了避免直接在主分支上工作,每个人都应该在当地创建一个新的分支,用于开发特定的功能或修复题目。
git checkout -b <新分支名称>
[*] 举行开发: 每个人在自己的分支上举行开发工作。使用git add和git commit来生存更改。
git add . git commit -m "描述提交的更改"
[*] 推送到远程堆栈: 当开发工作完成并且代码已经经过测试,将当地分支推送到远程堆栈。
git push origin <分支名称>
[*] 归并分支: 使用 pull request(GitHub、GitLab等平台)或 merge 请求(Bitbucket),将特性分支归并到主分支。如允许以举行代码审查和确保代码质量。
[*] 更新当地堆栈: 每个人在开始新的工作前应该定期更新他们的当地堆栈,以包罗其他人的更改。
git pull origin master
[*] 解决辩论: 如果多人在同一部门修改了代码,大概会发生辩论。在这种情况下,Git 会提示您解决辩论。
        产生辩论的缘故原由是:比如Windows用户此时上传了修改这个代码,此时远端堆栈就和这个Windows用户同步了,然后Linux用户再对这个代码举行上传,此时就会因为远端堆栈没有和Linux用户当地堆栈同步发生辩论。
https://i-blog.csdnimg.cn/blog_migrate/92ba9778ab55f3125230800594590e8b.png
以是此时就要远端堆栈和Linux用户当地堆栈同步,git pull 用于将远程堆栈的最新更改拉取到当地并归并,以保持当地堆栈与远程堆栈同步。
git pull 此时我们就可以上传到远端堆栈了,我们不但能看到Linux在本文件中修改的代码,还能看到Windows用户修改的代码。以是git堆栈如果当地和远端差别步,此时如果想要其他用户上传到远端堆栈,git会逼迫你举行同步,一旦提交乐成后,对于任何人,此时你修改的代码会被所有人看到。   
上面我们每次git push的时候都需要输入用户和密码,比力麻烦,我们可以配置免密码提交
https://blog.csdn.net/camillezj/article/details/55103149
https://i-blog.csdnimg.cn/blog_migrate/2862883e7dd17a59496b9cdc2b29fd19.png

                                                                                                                                                      

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【深入解析git和gdb:版本控制与调试利器的终极指南】