c++文件变为可执行文件的过程
预处理 g++ -E test.cpp -o test.i
宏定义展开,头文件展开,条件编译等。不进行语法检查。
编译 g++ -S test.i -o test.s
检查语法,将预处理后文件编译生成汇编文件
汇编 g++ -c test.s -o test.o
将汇编文件生成目标文件(二进制文件)
链接 g++ test.o
C++语言编写的程序需要依赖各种库的,需要把库链接到最终的可执行程序中。
*note:创建的每个.cpp文件中,默认定义一个宏#define __cplusplus,编译器默认给每个.cpp文件创建这个宏。头文件不参与编译,每个.cpp文件为编译单元,编译器独立编译每个.cpp文件*
文件包含指令(#include):文件包含处理是指源文件可以把另一个文件的全部内容包含进来。#include<>常用于包含库函数的头文件。<>表示系统直接按照系统指定的目录检索。#include””常用于包含自定义的头文件。
-I 指定头文件搜索目录
-l 指定程序链接的库
-L 库文件所在的目录名
多文件联编
g++ file.cpp func.cpp -I ./include -o file //如果file.cpp调用的函数声明在头文件中,而实现在func.cpp中,那么func.cpp需要和file.cpp一起编译,生成两个目标文件后,file.o链接时才能找到函数的定义。
使用gdb对程序进行调试
list(l) num(行号) :展示从该行往下多行的代码
list(l) func(函数) :展示从该函数往下多行的代码
breakpoint(b) num(行号) :在该行增加断点
breakpoint(b) func(函数) :在该函数增加断点
查看内存中的值:examine(简写x)
x/[n][f][u]
n:要显示的内存单元数,默认为1
f:要打印的格式
- x:按照十六进制格式显示变量
- d:按照十进制格式显示变量
- u:按照十六进制格式显示无符号整型变量
- o:按照八进制格式显示变量
- t:按照二进制格式显示变量
- c:按照字符格式显示变量
- f:按照浮点数格式显示变量
u:单元的大小
- b 字节
- h 半字,两字节
- w 字,四字节
- g 八字节