C++ in Linux

linux learning note

Posted by Becks on January 26, 2016

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