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. Hadoop_UDF示例

    UDF:  一进一出 Eclipse端 1. 继承UDF 2. 实现evaluate方法(可重裁实现多个evaluate方法,以实现不同需求) 3. 导出类jar包,注意指定main方法 Hive端 ...

  2. java并发编程(十一)线程间的通信notify通知的遗漏

    notify通知的遗漏很容易理解,即threadA还没开始wait的时候,threadB已经notify了,这样,threadB通知是没有任何响应的,当threadB退出synchronized代码块 ...

  3. Git fetch和git pull的区别

    Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin mastergit log - ...

  4. js模版引擎handlebars.js实用教程——为什么选择Handlebars.js

    返回目录 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是: ...

  5. c# winform编程之多线程ui界面资源修改总结篇

    单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!";就搞定了,但是如果在一个新线程中这么 ...

  6. 好看的IDE配色方案让代码看起来不再那么凶猛了

    写这篇小文的初衷是,笔者是原教旨主义者,一直坚持用IDE默认的配色方案.另外也觉得网上黑色系的配色方案太过bling bling了.但今天尝试用新的配色方案后,兴奋地发现对代码的好感度大幅提升. 嗯, ...

  7. Vue.js起手式+Vue小作品实战

    本文是小羊根据Vue.js文档进行解读的第一篇文章,主要内容涵盖Vue.js的基础部分的知识的,文章顺序基本按照官方文档的顺序,每个知识点现附上代码,然后根据代码给予个人的一些理解,最后还放上在线编辑 ...

  8. 安装oracle 11g时出现启动服务出现错误,找不到OracleMTSRecoveryService

    运行注册表(cmd-输入regedit),到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,找到OracleMTSRecoveryServ ...

  9. union的限制, 临时表大小的优化

  10. json字符串转泛型集合对象

    Dictionary<string, object> jd = js.Deserialize<Dictionary<string, object>>(item); ...