【Linux】gcc编译过程和gdb调试

目录

一、什么是gcc?

二、gcc编译程序的过程

三、gcc命令使用

1.预处理

2. 编译

3.汇编

4.链接

 四、gcc常用选项

五、什么是gdb?

六、gdb功能

七、gdb用法


一、什么是gcc?

gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器,现在已经支持多种语言了,如C、Java、Pascal、Ada、COBOL语言等;

可以运行各种liunx 发行版,BSD,以及solaris等多种操作系统,并能够编译X86,X86-64等不同硬件平台上。还可以实现不同平台上的交叉编译,如在liunx平台上编译windows下的可用的软件

二、gcc编译程序的过程

预处理( Pre-Processing
编译( Compiling
汇编( Assembling
链接( Linking

gcc编译程序过程示意图:

三、gcc命令使用

1.预处理

C编译器对各种预处理命令进行处理

//预处理c文件
gcc -E hello.c -o hello.i

预处理过程:

  • 将所有的#define删除,并且展开所有的宏定义
  • 处理所有的条件预编译指令,比如#if 、#ifdef、#elif、#else、#endif等
  • 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。
  • 删除所有注释“//”和“ /* */”
  • 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
  • 保留所有的#pragma编译器指令,因为编译器需要使用它们

2. 编译

将预处理得到的源代码文件,进行“翻译转换”,产生出机器语言的目标程序,得到机器语言的汇编文件,后缀是.s

//编译成汇编文件
gcc -S hello.i -o hello.s

3.汇编

将汇编代码翻译成了机器码,后缀是.o文件

gcc -c hello.s -o hello.o

4.链接

把各种符号引用和符号定义转换成为可执行文件中的合适信息,后缀是 .out 文件或可执行文件

gcc hello.o -o hello

通常我们可以一步到位,直接编译链接成可执行文件

gcc hello.c -o hello

把所有.c文件编译链接成可执行文件main 

​ 

 四、gcc常用选项

选项名

作用

-o

产生目标代码或可执行文件

-c

通知gcc取消链接步骤,即编译源码并在最后生成目标文件

-E

只运行C预编译器

-S

告诉编译器产生汇编语言文件后停止编译,产生的汇编语言文件扩展名为.s

-Idir

dir目录加入搜索头文件的目录路径

-Ldir

dir目录加入搜索库的目录路径

-llib

链接lib

-g

在目标文件中嵌入调试信息,以便gdb之类的调试程序调试

-Wall

使gcc对源文件的代码有问题的地方发出警告

五、什么是gdb?

gdb是GNU debugger的缩写,是编程调试工具

六、gdb功能

  • 启动程序,可以按照用户自定义的要求随心所欲的运行程序。
  • 可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)
  • 当程序停住时,可以检查此时程序中所发生的事
  • 动态地改变程序的执行环境

七、gdb用法

命令

含义

list(l)

列出源代码

breakb)

设置断点

info break

查看断点信息 info functions

run(r)

运行

continue(c)

继续程序运行,直到下一个断点

step(s)

单步跟踪,类似于VC中的step into

nextn)

单步跟踪,类似于VC中的step over

finish

运行程序,直到当前函数返回

util(u)

退出循环

printp)

查看运行时的变量以及表达式

watch

设置观察点

示例:

注意:运用gdb的时候需要编译时加上之前图片中有提到的-g选项,在目标文件中嵌入调试信息,以便gdb之类的调试程序调试

l列出源代码,b设置断点,r运行,n单步跟踪   

感谢观看!!!!

以上就是全部内容,如果对您有帮助,欢迎点赞评论,或者发现有哪里写错的,欢迎指正!

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

logani

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值