Linux之基础开发工具(Ubuntu)之编译器

编译器:

我们知道代码运行的时候需要进行

1.预处理------替换宏、头文件的展开、去注释

2.编译------生成汇编

3.汇编------生成机械码

4.链接------生成可执行文件/库文件

至于为什么要这么麻烦,还得从历史说。在早期只有手动操作的时候,相当于输入机械码,直到后面出现汇编语言,所以需要用机械码来翻译汇编语言,应为计算机只认识机械码,后买你高级语言同样如此,需要先由汇编来处理,在翻译成机械码。

而我们今天所学的编译器将按照这个进行过程一一学习,利用gcc来手动完成

格式:

gcc 选项 要编译的⽂件 选项 ⽬标⽂件

1.预处理:

gcc -E 要编译的文件 -o 目标文件

-o代表后面接的是目标文件,所以这个指令可以写成 gcc -o 目标文件 -E 要编译的文件,只需要谨记指令后面接上对应的文件就行。

一般而言预处理后的文件后缀是 .i,for example :gcc -E code.c -o code.i

2.编译

gcc -S 预处理生成的文件 -o 目标文件

3.汇编

gcc -c 编译生成的文件 -o 目标文件

4.链接

gcc 汇编生成的文件 -o 可执行文件

其实在真实的环境下,我们往往是这样操作的

gcc -o code.o code.c

直接从.c 文件到.o文件,在这个状态下进行多文件的链接,生成可执行文件

如何进入调试?

使用gdb,但这就要求我们汇编是后二进制文件的时候加上-g选项,因为默认gcc/g++生成的是release模式,想要调试,就要进入debug模式

gcc code.c -o

cgdb 目标文件

这里要说的是cgdb是要apt的

你自己想一下如何下载?

apt install -y cgdb

接下来就是学习如何使用cgdb

断点

b -n ------断点

info b ------查看断点

delete -n ------删除编号为 n 的断点

delete 不加编号,默认删除所有的断点;加入编号,就是删除指定断点。

disable -n ------禁用编号为 n 的断点,适合用于现在不想要删除断点,但是目前不想使用这个断点

enable -n ------恢复使用编号为 n 的断点

(不加编号的话,对象都是默认对所有的断点)

下面的图可以看出第一个断点是行号为 4 的,使用disable后没有删除这个断点,但是 r 后执行到了第二个断点标记的行号

enable 回复使用

现在你想要某个断点在特殊条件下才能执行,如何操作?

1.对于没有标记过的

b -n if 条件

2.对于已经存在的断点,想要添加条件

condition 编号 条件

运行

r ------如果没有运行到第一个断点,会自动运行到第一个断点;如果已经运行到第一个断点,会弹出选项,是选择重新运行到第一个断点,还是运行完。

c ------ 从当前位置开始往后执行断点,但第一步需要run

n ------单步执行,自动跳过函数

s ------单步执行,进入函数内部

until -n ------表示直接运行到第n行,这个还是比较常用的

如果你想要监视变量

display 变量名

undisplay -n 编号

watch 变量------只要这个变量的值发生变化就会跳出提醒,相当于监视这个变量

退出:

quit

相关推荐
秋风&萧瑟5 分钟前
【Linux系统编程】Linux IPC 的使用
linux·运维·网络
DOLA_Tech16 分钟前
WIN电脑中VMware虚拟机网速慢的解决办法
运维·服务器
En^_^Joy1 小时前
Nginx 从入门到精通:配置、原理与实战详解
运维·nginx
玖石书1 小时前
WSL2 手动安装 Ubuntu 24.04 到指定磁盘位置
linux·运维·ubuntu·wsl
库玛西2 小时前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
随便做点啥2 小时前
32卡-64G-910B4-16后端-(Qwen3.8-27B-W8A8)集群部署报告
运维·服务器·经验分享·docker·vllm
薛定谔的悦6 小时前
储能 EMS 的功率策略:从一块电表到一次逆流的 200 毫秒
大数据·linux·能源·储能·bms
2601_962218478 小时前
万象生鲜系统区块链溯源技术帮助生鲜企业搭建食品安全数字化体系
大数据·运维·微服务·云原生·架构
智塑未来8 小时前
中小公司在线文档选型:从协作入口到安全边界
运维·安全
新时代牛马9 小时前
Linux 内核入门地图:架构、源码目录与五大子系统
linux·运维·架构