第 27 章 本阶段总结
在这一阶段我们又学习了很多新的语法规则,首先读者应该回到第 13 章 本阶段总结把那些知识点重新总结一遍。然后我们总结一下各种开发调试工具的用法。
gcc
-c:编译生成目标文件(Relocatable),详见第 2 节“main函数和启动例程”。-Dmacro[=defn]:定义一个宏,详见第 3 节“条件预处理指示”。-E:只做预处理而不编译,cpp命令也可以达到同样的效果,详见第 2.1 节“函数式宏定义”。-g:在生成的目标文件中添加调试信息,所谓调试信息就是源代码和指令之间的对应关系,在gdb调试和objdump反汇编时要用到这些信息,详见第 1 节“单步执行和跟踪函数调用”。-Idir:dir是头文件所在的目录,详见第 2.2 节“头文件”。-Ldir:dir是库文件所在的目录,详见第 3 节“静态库”。-M和-MM:输出“.o文件:.c文件.h文件”这种形式的 Makefile 规则,-MM的输出不包括系统头文件,详见第 4 节“自动处理头文件的依赖关系”。-o outfile:outfile输出文件的文件名,详见第 2 节“main函数和启动例程”。-O?:各种编译优化选项,详见第 6 节“volatile 限定符”。-print-search-dirs:打印库文件的默认搜索路径,详见第 3 节“静态库”。-S:编译生成汇编代码,详见第 2 节“main函数和启动例程”。-v:打印详细的编译链接过程,详见第 2 节“main函数和启动例程”。-Wall:打印所有的警告信息,详见第 4 节“第一个程序”。-Wl,options:options是传递给链接器的选项,详见第 4 节“共享库”。
gdb
- 在第 10 章 gdb集中介绍了
gdb的基本命令和调试方法。 - 在第 1 节“函数调用”提到了
gdb的指令级调试和反汇编命令。 - 如果一个程序由多个
.c文件编译链接而成,用gdb调试时如何定位某个源文件中的某一行代码呢?在第 1 节“多目标文件的链接”有介绍。 - 在第 6 节“指向指针的指针与指针数组”提到了用
gdb调试时如何给程序提供命令行参数。
- 在第 10 章 gdb集中介绍了
其它开发调试工具
as,汇编器,用法详见例 18.1“最简单的汇编程序”。ld,链接器,用法详见例 18.1“最简单的汇编程序”,用--verbose选项可以显示默认链接脚本,详见第 1 节“多目标文件的链接”。readelf,读 ELF 文件信息,用法详见第 5.1 节“目标文件”。objdump,显示目标文件中的信息,本书主要用它做反汇编,用法详见第 5.1 节“目标文件”。hexdump,以十六进制或 ASCII 码显示一个文件,用法详见第 5.1 节“目标文件”。ar,把目标文件打包成静态库,用法详见第 3 节“静态库”。ranlib,给ar打包的静态库建索引,用法详见第 3 节“静态库”。nm,查看符号表,用法详见第 2 节“main函数和启动例程”。