【本节目标】
- 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