gcc and g++编译器和gdb调试器
### gcc和g++编译器及gdb调试器详解 #### 一、gcc与g++编译器介绍 **gcc**(GNU Compiler Collection)是一套由自由软件基金会发布的编译器集合,支持多种编程语言,如C、C++、Objective-C、Fortran等。它不仅包括编译器本身,还包含了一系列相关的工具。而**g++**则是gcc的一个组成部分,专门用于编译C++代码。 #### 二、gcc与g++编译过程 gcc/g++编译过程主要包括四个阶段: 1. **预处理**:在这个阶段,源代码会经过宏替换、头文件包含等操作。 2. **编译**:预处理后的代码会被编译成汇编代码。 3. **汇编**:汇编代码被转换为机器码,生成目标文件。 4. **链接**:所有目标文件会被链接起来,生成可执行文件或库。 #### 三、gcc/g++命令详解 - **预处理命令**:`gcc -E file.c` - `-E`选项仅进行预处理,输出结果到标准输出设备。 - **编译命令**: - `gcc -c file.c` - `-c`选项只编译并生成目标文件(.o),不进行链接。 - **汇编命令**: - `gcc -S file.c` - `-S`选项只进行编译和汇编,但不进行链接。 - **指定语言类型**: - `-x language filename` - 指定输入文件的语言类型,如`-xc`表示C语言,`-xc++`表示C++语言。 - **包含文件处理**: - `-I dir`:搜索包含文件的目录。 - `-include file`:在预处理阶段包含指定文件。 - `-imacros file`:将指定文件中的宏定义用于预处理。 - **宏定义和取消定义**: - `-D macro`:定义宏。 - `-U macro`:取消定义宏。 - `-D macro=value`:定义宏并赋予值。 - **编译选项**: - `-pipe`:使用管道来提高编译速度。 - `-ansi`:启用ANSI C兼容模式。 - `-pedantic`:启用所有符合标准的警告。 - `-fno-asm`:禁用内嵌汇编。 - `-fno-inline`:禁止内联函数。 - `-fno-strict-aliasing`:禁用严格的别名检查。 - **类型和符号选项**: - `-fthis-is-variable`:允许`this`作为变量名。 - `-fcond-mismatch`:允许条件表达式类型不匹配。 - `-funsigned-char`/`-fsigned-char`/`-fno-unsigned-char`:指定char类型的默认符号性。 #### 四、gdb调试器简介 **gdb**是GNU项目提供的一个强大的程序调试工具,支持多种操作系统平台。它可以对程序进行断点设置、单步执行、内存查看等操作,帮助开发者定位和解决程序中的问题。 #### 五、使用gdb进行调试 - **启动gdb**: - `gdb program`:加载程序到gdb中。 - **设置断点**: - `break function`:在函数`function`处设置断点。 - `break line_number`:在第`line_number`行设置断点。 - **执行程序**: - `run [args]`:运行程序,可以传递参数`args`。 - **单步执行**: - `step`:单步执行。 - `next`:跳过当前函数调用。 - **查看变量值**: - `print variable`:打印变量`variable`的值。 - **退出gdb**: - `quit`:退出gdb。 #### 六、gcc与g++高级特性 - **优化级别**: - `-O1`/`-O2`/`-O3`:不同的优化级别,数字越大优化越强。 - `-Os`:优化代码大小而非执行时间。 - `-Ofast`:开启所有可用的优化,可能会违反语言规范。 - **警告选项**: - `-Wall`:显示所有警告。 - `-Werror`:将所有警告视为错误。 - `-Wextra`:显示额外的警告信息。 - **调试信息**: - `-g`:生成调试信息。 通过以上介绍,我们可以看到gcc和g++编译器以及gdb调试器的强大功能和灵活性。它们不仅是开发C/C++程序不可或缺的工具,也是学习和理解编译原理、调试技巧的重要途径。希望本篇介绍能够帮助读者更好地掌握这些工具的使用方法。
gcc/g++在执行编译工作的时候,总共需要4步
1.预处理,生成.i的文件[预处理器cpp]
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4.连接目标代码,生成可执行程序[链接器ld]
[参数详解]
-x language filename
设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根
据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果
你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这
个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数
的使用。
可以使用的参数吗有下面的这些
`c', `objective-c', `c-header', `c++', `cpp-output',
`assembler', and `assembler-with-cpp'.
看到英文,应该可以理解的。
例子用法:
gcc -x c hello.pig
-x none filename
关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型
例子用法:
gcc -x c hello.pig -x none hello2.c
只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
例子用法:
gcc -c hello.c
他将生成.o的obj文件
-S
只激活预处理和编译,就是指把文件编译成为汇编代码。
例子用法
gcc -S hello.c
他将生成.s的汇编代码,你可以用文本编辑器察看
-E
只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里
面.
例子用法:
gcc -E hello.c > pianoapan.txt
gcc -E hello.c | more
慢慢看吧,一个hello word 也要与处理成800行的代码
-o
制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果
你和我有同感,改掉它,哈哈
例子用法
gcc -o hello.exe hello.c (哦,windows用习惯了)
gcc -o hello.asm -S hello.c
-pipe
使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问
题
剩余5页未读,继续阅读
- caow20092012-07-02就一文档,哪有安装包,还要10分
- 粉丝: 26
- 资源: 632
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术资料分享多核处理器构架的高速JPEG解码算法很好的技术资料.zip
- 技术资料分享第24章 性能和资源占用很好的技术资料.zip
- 技术资料分享第23章 LCD驱动API函数很好的技术资料.zip
- 技术资料分享第22章 LCD驱动程序很好的技术资料.zip
- 技术资料分享第21章 高层次配置很好的技术资料.zip
- 技术资料分享第20章 底层配置很好的技术资料.zip
- 技术资料分享第19章 与时间相关的函数很好的技术资料.zip
- 技术资料分享第18章 输入设备很好的技术资料.zip
- 技术资料分享第17章 Shift-JIS支持很好的技术资料.zip
- 技术资料分享第16章 Unicode很好的技术资料.zip