(1)gcc编译器
- 后缀名解释
gcc通过后缀来区别输入文件的类别:
.c 为后缀的文件:C语言源代码文件
.a 为后缀的文件:是由目标文件构成的库文件
.C,.cc或 .cxx为后缀的文件:是C++源代码文件
.h 为后缀的文件:头文件
.i 为后缀的文件:是已经预处理过的C源代码文件
.ii 为后缀的文件:是已经预处理过的C++源代码文件
.o 为后缀的文件:是编译后的目标文件
.s 为后缀的文件:是汇编语言源代码文件
.S 为后缀的文件:是经过预编译的汇编语言源代码文件
- 常用选项
-
警告信息 -pedantic -W -Wall -Werror(警告当作错误处理)
-
代码优化 -O 后面加等级
命令 #time ./程序 可以看到执行时间 -
调试选项 -g 后面加等级 或 -ggdb gdb专用调试信息
程序会加入调试代码,大小变大
(2)gdb调试器
- 简单使用
- 调试的程序编译时必须加上调试选项 -g 或 -gdb
- 直接进入 #gdb
- 使用方法 #gdb filename
- 退出 quit
- run 执行程序
- backtrace 回溯跟踪错误,找到错误的行
- frame 察看该行代码
- 设置断点( break )
- run前设置断点,然后用s或step单步运行
- 可以指定行
- 指定函数名
- 指定条件后暂停
- 打印( print )与自动显示( display )
- print <表达式> 表达式可搭配后面的call或程序中的变量
- print / <表达式> 输出格式 如 /x十六进制
- 使用方法如 print 变量名 ,第一次使用后赋值给$1 后面可使用print $1查看,也可用于改变程序内容,如 print x=8 则x变量改变
- display<表达式>
- display / <表达式> 输出格式 如 /x十六进制
- display / <内存地址>
- 使用方法同样是 display+变量名
自动显示即每运行一步都打印出设置的打印内容,也可取消或删除,查看设置了哪些变量
- 查看源码( list )
- 默认显示10行,使用show listsize 可查看
- 使用set listsize 数字 设置
- 使用方式,list 行号 则显示该行上下5行
- 查看内存地址( info line )与反汇编( disassemble )
-
查看内存地址 info line
-
使用方法:
info line 行号
info line函数名 -
查看汇编代码disassemble,反汇编
-
使用方法:disassemble 函数名
- 其他
-
转跳执行
jump <linespec>
jump <address> -
发送信号
singal <singal> -
强制返回 return <expression>
-
强制调用 call <expr>