您的位置:首页 > 运维架构 > Linux

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

2017-09-13 20:07 295 查看

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选项如下列表



还可以添加警告信息



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 +变量名

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: