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

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

【本节目标】


  • 1. 掌握简单gdb使用于调试
  • 2. 学习 git 命令行的简单操作, 能够将代码上传到 Github 上


1.Linux调试器-gdb使用


1.1.背景


  • 程序的发布方式有两种,debug模式release模式
  • release模式不可被调试,debug模式可被调试
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项


为什么要有debug模式release模式两种模式呢?这两种模式的存在是为了在不同阶段和用途下提供不同的编译和运行配置。


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文件写好。


然后我们来编译一下我们上面的代码,上面的代码是求从1加到100的和,可以看到我们的程序是正确的。


接下来就开始我们的调试程序


但是我们发现此时我们不能进行调试,因为此时是release版本,是不可被调试滴。


为了区分两种模式下的可执行程序,将Debug版本下的可执行程序加上-d,此时经过修改之后。


我们可以清楚的看到两个模式下的可执行程序的文件大小,刚好可以验证我们上面的结论。通过文件大小能验证Debug确实增加了调式信息,但是我们想看到更详细的调试信息。


readelf 是一个用于读取 ELF(Executable and Linkable Format,可执行和可链接格式)文件的命令行工具。ELF 是一种用于在Unix和类Unix系统上执行程序的标准文件格式。readelf 工具允许用户查看 ELF 文件的内部结构、头部信息、节(sections)、程序头部、符号表等内容。


该工具通常在开发和调试过程中使用,以便分析可执行文件或共享库的细节,了解它们的结构和元数据。通过 readelf,用户可以获取关于 ELF 文件的各种信息,例如代码段和数据段的大小、链接地址、节头表、符号表等。


然后我们在删除刚刚两个版本的文件,重新make一个Debug模式的可执行程序mytest文件,然后开始调试mytest文件。


gdb调试相关指令学习 - 平替 - vs上的调试


gdb binFile 退出: ctrl + d 或 quit 调试命令:


2. 学习 git 命令行的简单操作, 能够将代码上传到 Github 上


2.1.什么是git?理解版本控制器


git是一个分布式版本控制系统,用于跟踪项目代码的变化。


版本控制器(Version Control System,VCS)是一种记录和管理文件或代码变更的系统。它追踪文件的历史变更,允许用户回溯到先前的状态,并支持多人协同开发。


2.2.什么是github/gitee?



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账号,然后进入自己的个人主页,点击右上角的+号,点击新建仓库


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


【深入解析git和gdb:版本控制与调试利器的终极指南】(下):https://developer.aliyun.com/article/1425636

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
1月前
|
开发工具 git 开发者
|
1月前
|
开发工具 git 开发者
Git Pull vs. Git Fetch:深度解析
【2月更文挑战第29天】
139 0
Git Pull vs. Git Fetch:深度解析
|
1月前
|
开发工具 git 开发者
|
1月前
|
开发工具 git
|
26天前
|
开发工具 git 开发者
Git常用命令大全:让你轻松驾驭版本控制
Git命令速查:`git init`新建仓库,`git clone`克隆,`git add`入暂存区,`git commit -m`提交,`git status`查看状态,`git log`查看历史,`git branch`创建分支,`git checkout`切换,`git merge`合并,`git pull`拉取更新,`git push`推送,`git remote -v`查看远程,`git checkout --`撤销本地修改,`git reset HEAD`取消暂存,`git reset --hard`回退版本。掌握这些,提升代码管理效率!
18 0
|
1月前
|
存储 NoSQL 安全
【C++调试】深入探索C++调试:从DWARF到堆栈解析
【C++调试】深入探索C++调试:从DWARF到堆栈解析
62 1
|
3天前
|
NoSQL Ubuntu 测试技术
【GDB自定义指令】core analyzer结合gdb的调试及自定义gdb指令详情
【GDB自定义指令】core analyzer结合gdb的调试及自定义gdb指令详情
7 1
|
3天前
|
存储 项目管理 开发工具
Git 版本控制:构建高效协作和开发流程的最佳实践
版本控制是软件开发的核心,促进团队协作与项目管理。通过制定明确的分支命名策略,遵循一致的代码提交规范,如指明提交类型和简短描述,增强了历史记录的可读性,可以清晰地组织和理解项目的结构与进展。
11 0
Git 版本控制:构建高效协作和开发流程的最佳实践
|
1月前
|
开发工具 git
Git版本控制工具详解(三)
Git版本控制工具详解
35 0
|
1月前
|
NoSQL C++ 开发者
【C/C++ 调试 GDB指南 】GDB中的‘info’命令:一次全面的探索
【C/C++ 调试 GDB指南 】GDB中的‘info’命令:一次全面的探索
40 0

推荐镜像

更多