- -g 编译带调试信息的可执行文件
1# -g 选项告诉 GCC 产生能被 GNU 调试器GDB使用的调试信息,以调试程序。
2
3# 产生带调试信息的可执行文件test
4g++ -g test.cpp
- -O[n] 优化源代码
1## 所谓优化,例如省略掉代码中从未使用过的变量、直接将常量表达式用结果值代替等等,这些操作会缩减目标文件所包含的代码量,提高最终生成的可执行文件的运行效率。
2
3# -O 选项告诉 g++ 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。 -O2 选项告诉 g++ 产生尽可能小和尽可能快的代码。 如-O2,-O3,-On(n 常为0–3)
4# -O 同时减小代码的长度和执行时间,其效果等价于-O1
5# -O0 表示不做优化
6# -O1 为默认优化
7# -O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
8# -O3 则包括循环展开和其他一些与处理特性相关的优化工作。
9# 选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。
10
11# 使用 -O2优化源代码,并输出可执行文件
12g++ -O2 test.cpp
- -l 和 -L 指定库文件 | 指定库文件路径
1# -l参数(小写)就是用来指定程序要链接的库,-l参数紧接着就是库名
2# 在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接
3
4# 链接glog库
5g++ -lglog test.cpp
6
7# 如果库文件没放在上面三个目录里,需要使用-L参数(大写)指定库文件所在目录
8# -L参数跟着的是库文件所在的目录名
9
10# 链接mytest库,libmytest.so在/home/bing/mytestlibfolder目录下
11g++ -L/home/bing/mytestlibfolder -lmytest test.cpp
- -Wall 打印警告信息
1# 打印出gcc提供的警告信息
2g++ -Wall test.cpp
- -w 关闭警告信息
1# 关闭所有警告信息
2g++ -w test.cpp
- -std=c++11 设置编译标准
1# 使用 c++11 标准编译 test.cpp
2g++ -std=c++11 test.cpp
- -o 指定输出文件名
1# 指定即将产生的文件名
2
3# 指定输出可执行文件名为test
4g++ test.cpp -o test
- -D 定义宏
1# 在使用gcc/g++编译的时候定义宏
2
3# 常用场景:
4# -DDEBUG 定义DEBUG宏,可能文件中有DEBUG宏部分的相关信息,用个DDEBUG来选择开启或关闭DEBUG
常用调试命令参数
1## 以下命令后括号内为命令的简化使用,比如run(r),直接输入命令 r 就代表命令run
2
3$(gdb)help(h) # 查看命令帮助,具体命令查询在gdb中输入help + 命令
4
5$(gdb)run(r) # 重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件)
6
7$(gdb)start # 单步执行,运行程序,停在第一行执行语句
8
9$(gdb)list(l) # 查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数)
10
11$(gdb)set # 设置变量的值
12
13$(gdb)next(n) # 单步调试(逐过程,函数直接执行)
14
15$(gdb)step(s) # 单步调试(逐语句:跳入自定义函数内部执行)
16
17$(gdb)backtrace(bt) # 查看函数的调用的栈帧和层级关系
18
19$(gdb)frame(f) # 切换函数的栈帧
20
21$(gdb)info(i) # 查看函数内部局部变量的数值
22
23$(gdb)finish # 结束当前函数,返回到函数调用点
24
25$(gdb)continue(c) # 继续运行
26
27$(gdb)print(p) # 打印值及地址
28
29$(gdb)quit(q) # 退出gdb
30
31$(gdb)break+num(b) # 在第num行设置断点
32
33$(gdb)info breakpoints # 查看当前设置的所有断点
34
35$(gdb)delete breakpoints num(d) # 删除第num个断点
36
37$(gdb)display # 追踪查看具体变量值
38
39$(gdb)undisplay # 取消追踪观察变量
40
41$(gdb)watch # 被设置观察点的变量发生修改时,打印显示
42
43$(gdb)i watch # 显示观察点
44
45$(gdb)enable breakpoints # 启用断点
46
47$(gdb)disable breakpoints # 禁用断点
48
49$(gdb)x # 查看内存x/20xw 显示20个单元,16进制,4字节每单元
50
51$(gdb)run argv[1] argv[2] # 调试时命令行传参
52
53$(gdb)set follow-fork-mode child # Makefile项目管理:选择跟踪父子进程(fork())