Linux学习(十二):gcc编译和gdb调试

1 GCC编译器

GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。

 2 GCC编译过程

整个的编译过程如下:

(1)预处理阶段

在该阶段,对包含的头文件(#include)和宏定义(#define、#ifdef等)进行处理 。可以使用gcc的选项“-E” 让

gcc在预处理结束后停止编译过程。可以进入hello.i查看一下,里面就是对库文件和宏定义的处理。并且此时,即使你的

文件有错误也不会检查。

(2)编译阶段

接下来进行的是编译阶段,在这个阶段中,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实

际要做的工作,在检查无误后,gcc把代码翻译成汇编语言。用户可以使用“-S”选项来进行查看。

(3)汇编阶段,将汇编文件编译成可执行的目标文件。用-c选项

(4)链接 将所有的依赖文件编译成一个可执行文件

几个常用的gcc选项如下列表

有个小问题需要注意一下,-I dir 表示的头文件的路径,但是如果头文件分布在不同的文件夹时,不要写成 -I dir1 dir2.应写成 -I dir1 -I dir2这样形式。其实对于表示路径的选项,都应该遵循这样的格式。例如下面简单的一个main文件,这个文件在tmp3目录中,a.h在和tmp3平级的tmp目录中,b.h在于tmp3平级的tmp2目录当中

#include "a.h"
#include "b.h"
int main()
{
        return 0;
}

应该这样添加头文件目录

还可以添加警告信息

3 GDB调试

gdb调试器是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。虽然,它没有图形化的友好界面,但

是它强大的功能也足以与微软的VC工具等媲美,例如设置断点,单步调试,查看变量这些功能都可以实现。

常用的命令:

我们举几个例子:b 行号/函数名 设置断点 info b 查看断点

在gdb调试前先进入gdb的模式,通过以下两步就可以某个执行文件的gdb调试模式

1、设置断点

我们的源文件如下

我们在第7行和第10行设置断点。break可以用b来代替

(2)运行:r 全速运行(到断点),s(step)单步运行且进入函数内部,n(next)单步运行不进入函数

内部

(3)查看变量名 p +变量名

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值