Linux下gcc与gdb简介
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简介的更多相关文章
- linux下gcc编译多个源文件、gdb的使用方法
一. gcc常用编译命令选项 假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认 ...
- Linux下GCC的使用
1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective ...
- linux下gcc编译的参数详细说明
参考网址:1 http://hi.baidu.com/zengzhaonong/item/f1f9383565fa5c302e0f8125 gcc使用方法 汇总 2 http://s99f.blog. ...
- linux下如何使用gdb调试
gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,这里简单介绍下gdb下常用的命令. 首先编译生成可执行文件(这里的test.c是一个简单的求前n ...
- Linux下gcc与g++用法以及编写makefile
1. gcc与g++编译流程: 1) 编译流程: 2) 预处理:生成.i的预处理文件. Ø 只激活预处理,这个不生成文件,需要把它重定向一个输出文件. ...
- Linux下GCC相关知识点
摘要: 总结GCC的具体使用,动态库静态库的相关问题 参考资料: <Linux网络编程> ISBN:9787302207177 p19 1 GCC简介 GCC是Linux下的编译工具集,是 ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- Linux下Gcc生成和使用静态库和动态库详解
参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...
- Linux下gcc编译生成动态链接库*.so文件并调用它【转载】
动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...
随机推荐
- 多边形裁剪的Sutherland-Hodgman算法
多边形裁剪是渲染管线中重要的一个子阶段,它将视截体外的多边形去除.一种简单的裁剪策略是一旦发现一个顶点在裁剪区域以外,就立刻丢弃该多边形.更加精细的做法则是,将原来的多边形拆为多个不跨越边界的多边形, ...
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- Servlet异步上传文件
这里需要用到插件ajaxfileupload.js,jar包:commons-fileupload-1.3.2.jar,commons-io-2.5.jar 注意红色部分的字!!!! 1.创建一个we ...
- github搭建静态博客
p { margin-bottom: 0.1in; line-height: 120% } 1. 创建Repository 创建一个与自己github用户名对应的Repository,例如:abc.g ...
- C# 方法的回调(上)
在C#编程中方法的回调有以下几种方式 通过接口.通过委托.定时回调.多线程回调,异步回调 下面就以代码的形式来讲解这种方式 通过接口回调 代码示例如下 定义接口,定义了一个Run 方法: interf ...
- 让javascript显原型!
相信以下的javascript让你读起来痛苦不已,告诉你一下简单的办法,就可以让它显出原型!将第一个单词,即eval换成document.write,然后再运行一下,它立即就原形毕露了! eval(f ...
- 一步一步来做WebQQ机器人-(五)(发送消息||完结)
× 本篇主要是: 发送QQ消息(to:好友,群),以及对小黄鸡抓包利用它的语言库 本文是WebQQ流程的最后一章 最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下 前面几个 ...
- Scala的trait
一:说明 1.介绍 2.功能 二:具体解释功能 1.定义接口 2.定义方法 3.定义字段 4.定义抽象字段 5.混合trait
- node-webkit 桌面开发 初入1
node-webkit 是什么就不介绍了 注意官网的一句话 ”node-webkit is based on Chromium and node.js " 所以node-webkit 实际 ...
- RelativeLayout中的格局,自适应宽度布局
RelativeLayout中的布局,自适应宽度布局 该图片中为android布局:总布局为 RelativeLayoutAtLeft 为居左 <TextView android:backgro ...