gcc编译器可以将C、C++等语言源程序、汇编程序编译、链接成可执行程序。
gdb是 GNU 开发的一个Unix/Linux下强大的程序调试工具。

linux下没有后缀名的概念。但 gcc 根据文件的后缀来区别输入文件的类别:

.c          C语言源代码文件
.a          由目标文件构成的库文件
.C、.cc、.cpp     C++源码文件
.h          头文件
.i          经过预处理之后的 C 语言文件
.ii          经过预处理之后的 C++ 文件
.o          编译后的目标文件
.s          汇编源码文件
.S          经过预编译的汇编源码文件

程序由C、C++源代码到可执行文件共经过了四个阶段:

预处理    该阶段主要对源码进行头文件展开、宏替换等操作
编译     该阶段将经过预处理之后的代码编译成 .s 汇编文件
汇编     该阶段将汇编文件翻译成 .o 的中间代码
链接     该阶段将用户文件和库文件进行链接,最终生成可执行文件

gcc 格式有如下两种:

第一种:gcc 选项 目标文件名 源文件名
第二种:gcc 源文件名 选项 目标文件名

gcc四个阶段的处理过程

预处理:  gcc -E -o hello.i hello.c
       gcc -E hello.c -o hello.i
     
编译:   gcc -S -o hello.S hello.i 
       gcc -S hello.i -o hello.S
   
汇编:   gcc -c -o hello.o hello.S
       gcc -c hello.S -o hello.o
   
链接:   gcc -o hello hello.o
       gcc hello.o -o hello
   
也可以一条命令产生可执行文件:   gcc -o hello hello.c
                       gcc hello.c -o hello
        
gcc常用选项:

编译选项

选项                  内容                        目标文件格式
-c                只预编译、编译、汇编,不链接              .o
-E                只预处理,不编译                       .i
-S                只预处理、编译,不汇编                    .S
-o file             生成名为 file 的文件
-g              在可执行文件中包含调试信息
-v              输出编译过程和编译器版本信息
-static               链接静态库
-I dir             添加 dir 的头文件搜索目录
-L dir             添加 dir 的库文件搜索目录
-Iname             链接名为 libname.so 的库文件

警告和出错选项
-ansi          输出符合 ANSI C 标准的警告信息
-pedantic       输出 ANSI C 标准的全部警告信息
-Wall          输出 gcc 提供的所有警告信息
-w            关闭所有警告信息
-Werror        将所有警告转化为错误

优化选项
-O或O1       一级优化,告诉 gcc 减小代码长度和执行时间
-O2         二级优化,除了进行 O1 之外,还要进行额外调整,如处理器指令调度
-O3         三级优化,除了进行 O2 之外,还要进行循环展开等调整优化

使用 gdb 进行程序调试之前,gcc编译选项必须加上 -g 选项来讲调试信息加到可执行文件中。

命令行中输入:gdb 可执行文件 即可启动 gdb 对其进行调试

gdb 命令:

list 或 l [行号或函数名]           查看指定位置代码,接行号会将该行显示于屏幕中央。如果多个文件,可以输入 l file:行号或函数名
       
run 或 r                    运行代码

break 或 b [行号或函数名] [条件表达式]   在某行或某函数处设置断点,也可以当条件满足时断点才生效     
info b                      查看断点信息
delete 断点号                 删除断点
disable 断点号                将某断点失效
enable 断点号                生效某断点

step 或 s                   单步执行,进入子函数
next 或 n                   单步执行,不进入子函数
continue 或 c                 继续执行,直到下一断点或程序结束

print 或 p 表达式或变量          查看表达式或变量的值

set variable 变量=值            修改变量值

Linux下gcc与gdb简介的更多相关文章

  1. linux下gcc编译多个源文件、gdb的使用方法

    一. gcc常用编译命令选项 假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认 ...

  2. Linux下GCC的使用

    1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective ...

  3. linux下gcc编译的参数详细说明

    参考网址:1 http://hi.baidu.com/zengzhaonong/item/f1f9383565fa5c302e0f8125 gcc使用方法 汇总 2 http://s99f.blog. ...

  4. linux下如何使用gdb调试

    gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,这里简单介绍下gdb下常用的命令. 首先编译生成可执行文件(这里的test.c是一个简单的求前n ...

  5. Linux下gcc与g++用法以及编写makefile

    1.         gcc与g++编译流程: 1)         编译流程: 2)         预处理:生成.i的预处理文件. Ø 只激活预处理,这个不生成文件,需要把它重定向一个输出文件. ...

  6. Linux下GCC相关知识点

    摘要: 总结GCC的具体使用,动态库静态库的相关问题 参考资料: <Linux网络编程> ISBN:9787302207177 p19 1 GCC简介 GCC是Linux下的编译工具集,是 ...

  7. Linux下Gcc生成和使用静态库和动态库详解(转)

    一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...

  8. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

  9. Linux下gcc编译生成动态链接库*.so文件并调用它【转载】

    动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...

随机推荐

  1. 谢欣伦 - OpenDev原创教程 - 客户端套接字类CxClientSocket

    这是一个精练的客户端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxClientSocket的使用如下(以某个叫做CSo ...

  2. 读取bmp图片数据

    public void getBMPImage(String source) throws Exception { clearNData(); //清除数据保存区 FileInputStream fs ...

  3. 引用dll动态库,动态库中弹出对话框输入,将输入参数,作为变量继续调用。

    在做支付项目时,引用动态库,动态库弹出支付宝或者微信的支付码,继而接收.最终将结果返回给调用动态库方法. 首先,动态库接收的是一个string 类型的xml,如 public string Pay(s ...

  4. Eclipse导入现有项目

    针对一些新手内容 1.Eclipse 打开一个项目 第一步File-->Import导入 第二步:选择导入类型 第三步选择文件路径,点击Browse... 注意下面细红框选项,根据需要勾选 第四 ...

  5. 时间js转换方法Date("149...") 转成 2016-7-12 21:23:34 009

     function timeFormatter(value) {     var da = new Date(parseInt(value.replace("/Date(", &q ...

  6. mydumper 和 myloader 的使用

    mydumper 和 myloader 的使用 MySQL 自身的 mysqldump 工具支持单线程工作, 依次一个个导出多个表,没有一个并行的机 ,这就使得它无法迅速的备份数据. mydumper ...

  7. Thinking in Java——笔记(12)

    Error Handling with Exceptions The ideal time to catch an error is at compile time, before you even ...

  8. Codeforces 209 C. Trails and Glades

    Vasya went for a walk in the park. The park has n glades, numbered from 1 to n. There are m trails b ...

  9. Angular2 起步(1)

    1.安装 nodejs(最新稳定版)https://nodejs.org/en/ 安装 typescript npm install -g typescript 安装 angular-cli(关于CL ...

  10. 更新与升级 FreeBSD

    https://www.freebsd.org/doc/zh_CN/books/handbook/updating-upgrading-freebsdupdate.html 安全补丁存储在远程的机器上 ...