GCC
安装
linux 下直接 apt-get install 就行
win 安装稍微麻烦一点,首先下载一个MinGW
默认安装,桌面生成快捷方式双击打开
安装完打开是这样的
1 首先选中箭头1所指右击 选择 Mark for Installation
2 点击左上角箭头2所指,选择 Apply changes
3 接着等待完成 close 就行
4 添加环境变量
添加到刚刚安装的 miniGW 的 bin 目录
5 测试是否安装成功
有版本号就可以了
编译过程
程序从源文件到可执行文件的过程的详细的内容可以参阅我的其他文章,这里只列出代码
g++ test.cpp -o test
1- 预处理
g++ -E test.cpp -o test.i
2- 编译
g++ -S test.i -o test.s
3- 汇编
g++ -c test.s -o test.o
4- 链接
g++ test.o -o test
一些重要的编译参数
g++ -g test.cpp
- 编译带调试信息的可执行文件
g++ -O[n] test.cpp
- O1 为默认优化
- O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等
- O3 则包括循环展开和其他一些与处理特性相关的优化工作。
g++ -I/include_dir test.cpp
- 使用 -I 来添加头文件包含目录
g++ -Wall test.cpp
- 打印警告消息
g++ -w test.cpp
- 关闭所有警告消息
g++ -std=c++11 test.cpp
- 使用c++11的标准来编译
g++ -D[***] test.cpp
- 当源码中有宏定义等条件编译的选项可以通过 -D 的参数开启
g++ test.cpp -o test
- 指定输出,不指定输出文件名为 a(a.exe)
GDB
安装
linux apt-get install 应该就行
win 还是通过上面提到的 miniGW 安装
安装步骤同 GCC 不累述了
有版本信息就成功了
GDB 指令
g++ -g debug.cpp -o debug
gdb debug.exe
- 在编译的时候加上 -g 的参数才能使用 gdb 的功能
== 打断点 ==
break < 函数名 >
break < 行号 >
break < 文件名:行号 >
break < 文件名:函数名 >
break < +/-偏移量 > 当前行的 +/- 偏移处设置断点
break < *地址 > 指定的地址打断点
== 删除断点 ==
clear 与 break 对应
delete breakpoints num # 删除第num个断点
== run(r) continue(c) ==
run 从头开始执行,直到遇到断点
run argv[1] argv[2] 调试时命令行传参
continue 从当前执行位置往下
== 打印 print(p) ==
print /[] 变量 或者 $寄存器名
[] 为输出格式 x/d/o/u/f/s...
print $pc
== info(i) ==
info all-registers 查看所有寄存器的值
info register 查看某个寄存器的值,如 info register pc 命令可以查看PC指针的内容
info breakpoints 查看所有断点位置,breakpoints(break/b)
== list(l) 查看源码 ==
list 显示当前行前后的代码,默认显示十行,按回车查看更多
list - 显示当前行之前的代码
list <行号> 显示指定行号前后的代码
list <文件名:行号> 显示指定文件中指定行号前后的代码
== 执行与退出 ==
next(n) 单步(逐语句)执行
continue(c) 继续运行 或者按 tab键
step(s) 跳转到函数内部
finish 结束当前函数,返回到函数调用点
quit(q) 退出 gdb
== 其他 ==
enable breakpoints 启用断点
disable breakpoints 禁用断点
display 追踪查看具体变量值
undisplay
watch 被设置观察点的变量发生修改时,打印显示