GCC
| Option | 解释 | 
| -c | 只compile, 不链接成为可执行文件, 通常用语编译不包含主程序的子程序文件 | 
| -o output_filename | 如果不给这个选项, GCC 给出预设可执行文件 a.out | 
| -g | 产生 GDB Debugger 必要的 | 
| -O | 对程序进行优化的编译,链接, 执行速度变快, 但是compile,链接速度变慢 | 
| -O2 | 比 -O更好优化编译,链接, 但是整个编译,链接过程更慢 | 
| -pedantic | 产生警告信息 | 
| -Wall | 最有价值, 让GCC 产生更多的警告信息 | 
| -Werror | 要求GCC 将所有的警告 当成错误进行处理,对自动编译的make 非常有用, 如果有这个选项, GCC 会在所有产生警告地方停止编译, 迫使程序员修改 | 
GDB Debugger
有程序
1 #include <iostream>
2 #include <vector> 
3 using namespace std;
4 
5  void func(vector<int>b){
6    for(auto i: b)
7        cout << i <<endl;
8  }
9 int main(){
10   vector<int>a={1,2,3,4,5};
11    for(auto i: a)
12        cout << i <<endl;
13     func(a);
14    return 0;
15 }
```shell
g++ -g -Wall -Werror -o test hello.cpp
gdb test #打开生成test 的调试工具
#上面可以写成两步
gdb
(gdb) file text
(gdb) run #运行刚生成的out 文件
(gdb) backtrace #具体哪里发生了错误
(gbb) frame #将错误定位到原来cpp文件的行

Breakpoint
# 运行到指定某行停止
break 行号
# 一次只能设置一个数不能设置两个数
#运行到指定function 停止
break function_name
#符号if 语句条件是, 运行到指定位置停止运行
break line_number/function_name if condition 
(gdb) break 7 #在第7行breakpoint 
(gdb) break 12 #在第13行breakpoint 
(gdb) print a[0]; #打印vector a[0]
(gdb) step #单步执行每条语句
(gdb) s #跟step 一样
(gbd) next #到下个break point
(gdb) continue #继续执行程序, 到下一个breakpoint 
#or 用 c 也是continue
(gdb) enable 1 #在第二个breakpoint 回到第一个 breakpoint,
(gdb) run #回到breakpoint 1
(gdb) quit # 退出调试
next

continue: 运行到下一个breakpoint

enable
