GCC以及GDB的重要参数详解

一.gcc的编译参数

1.E

-E选项指示编译器仅对输入文件进行预处理

g++ -E test.cpp -o test.i //.i文件

2.S

-S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译

g++ -S test.i -o test.s

3.c

-c 选项告诉 g++ 仅把源代码编译为机器语言的目标代码

g++ -c test.s -o test.o

4 .o

-o 编译选项来为将产生的可执行文件用指定的文件名

g++ test.o -o test

5.g

-g 编译带调试信息的可执行文件,可以产生呗GDB使用的调试信息。

g++ -g test.cpp

6.o[n]

-O 同时减小代码的长度和执行时间,其效果等价于-O1
-O0 表示不做优化
-O1 为默认优化
-O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
-O3 则包括循环展开和其他一些与处理特性相关的优化工作。
选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。

g++ -O2 test.cpp

7.-l(小写)

用来链接在/lib和/usr/lib和/usr/local/lib里的库

g++ -lglog test.cpp

8 -L

如果库文件没放在上面三个目录里,需要使用-L参数(大写)指定库文件所在目录
-L参数跟着的是库文件所在的目录名

g++ -L/home/bing/mytestlibfolder -lmytest test.cpp

9.-I(大写)

/usr/include目录一般是不用指定的,其他的就需要指定了。

g++ -I/myinclude test.cpp

10.Wall

打印gcc报错

gcc -Wall test.cpp

11.w.关闭警告信息

12-std=c++11 设置编译标准

13 -D 定义宏

二.gcc动静态库

目录结构

.
├── include
│ └── Swap.h
├── main.cpp
└── src
└── Swap.cpp

1. 生成静态库

g++ -c test.s -o test.o

## 进入src目录下

$cd src

# 汇编,生成Swap.o文件

g++ Swap.cpp -c -I../include

# 生成静态库libSwap.a

ar rs libSwap.a Swap.o

## 回到上级目录

$cd ..

# 链接,生成可执行文件:staticmain

g++ main.cpp -Iinclude -Lsrc -lSwap -o staticmain

2.生成动态库

g++ main.cpp -fPIC -share -o libmain.so

## 进入src目录下

$cd src

# 生成动态库libSwap.so

g++ Swap.cpp -I../include -fPIC -shared -o libSwap.so

## 上面命令等价于以下两条命令

# gcc Swap.cpp -I../include -c -fPIC
# gcc -shared -o libSwap.so Swap.o
## 回到上级目录

$cd ..

# 链接,生成可执行文件:sharemain

g++ main.cpp -Iinclude -Lsrc -lSwap -o sharemain

三.注意事项

1.执行动态库生成的执行程序时

LD_LIBRARY_PATH=sopath ./main
必须链接一下.so

四.gdb

1.调试开始:

执行gdb [exefilename]

2.参数:

$(gdb)help(h) # 查看命令帮助,具体命令查询在gdb中输入help + 命令

$(gdb)run® # 重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文
件)

$(gdb)start # 单步执行,运行程序,停在第一行执行语句

$(gdb)list(l) # 查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函
数)

$(gdb)set # 设置变量的值

$(gdb)next(n) # 单步调试(逐过程,函数直接执行)

$(gdb)step(s) # 单步调试(逐语句:跳入自定义函数内部执行)

$(gdb)backtrace(bt) # 查看函数的调用的栈帧和层级关系

$(gdb)frame(f) # 切换函数的栈帧

$(gdb)info(i) # 查看函数内部局部变量的数值

$(gdb)finish # 结束当前函数,返回到函数调用点

$(gdb)continue© # 继续运行

$(gdb)print§ # 打印值及地址

$(gdb)quit(q) # 退出gdb

$(gdb)break+num(b) # 在第num行设置断点

$(gdb)info breakpoints # 查看当前设置的所有断点

$(gdb)delete breakpoints num(d) # 删除第num个断点

$(gdb)display # 追踪查看具体变量值

$(gdb)undisplay # 取消追踪观察变量

$(gdb)watch # 被设置观察点的变量发生修改时,打印显示

$(gdb)i watch # 显示观察点

$(gdb)enable breakpoints # 启用断点

$(gdb)disable breakpoints # 禁用断点

$(gdb)x # 查看内存x/20xw 显示20个单元,16进制,4字节每单元

$(gdb)run argv[1] argv[2] # 调试时命令行传参

$(gdb)set follow-fork-mode child#Makefile项目管理:选择跟踪父子进程(fork())

回车键:重复上一命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值