Linux--gcc/gdb基础

(1)gcc编译器
  1. 后缀名解释

gcc通过后缀来区别输入文件的类别:
.c 为后缀的文件:C语言源代码文件
.a 为后缀的文件:是由目标文件构成的库文件
.C,.cc或 .cxx为后缀的文件:是C++源代码文件
.h 为后缀的文件:头文件
.i 为后缀的文件:是已经预处理过的C源代码文件
.ii 为后缀的文件:是已经预处理过的C++源代码文件
.o 为后缀的文件:是编译后的目标文件
.s 为后缀的文件:是汇编语言源代码文件
.S 为后缀的文件:是经过预编译的汇编语言源代码文件

  1. 常用选项
  • 警告信息 -pedantic -W -Wall -Werror(警告当作错误处理)

  • 代码优化 -O 后面加等级
    命令 #time ./程序 可以看到执行时间

  • 调试选项 -g 后面加等级 或 -ggdb gdb专用调试信息
    程序会加入调试代码,大小变大

Linux--gcc/gdb基础


(2)gdb调试器
  1. 简单使用
  • 调试的程序编译时必须加上调试选项 -g 或 -gdb
  • 直接进入 #gdb
  • 使用方法 #gdb filename
  • 退出 quit
  • run 执行程序
  • backtrace 回溯跟踪错误,找到错误的行
  • frame 察看该行代码

Linux--gcc/gdb基础


  1. 设置断点( break )
  • run前设置断点,然后用s或step单步运行
  • 可以指定行
  • 指定函数名
  • 指定条件后暂停

Linux--gcc/gdb基础


  1. 打印( print )与自动显示( display )
  • print <表达式> 表达式可搭配后面的call或程序中的变量
  • print / <表达式> 输出格式 如 /x十六进制
  • 使用方法如 print 变量名 ,第一次使用后赋值给$1 后面可使用print $1查看,也可用于改变程序内容,如 print x=8 则x变量改变

  • display<表达式>
  • display / <表达式> 输出格式 如 /x十六进制
  • display / <内存地址>
  • 使用方法同样是 display+变量名

    自动显示即每运行一步都打印出设置的打印内容,也可取消或删除,查看设置了哪些变量

Linux--gcc/gdb基础


  1. 查看源码( list )
  • 默认显示10行,使用show listsize 可查看
  • 使用set listsize 数字 设置
  • 使用方式,list 行号 则显示该行上下5行

Linux--gcc/gdb基础


  1. 查看内存地址( info line )与反汇编( disassemble )
  • 查看内存地址 info line

  • 使用方法:
    info line 行号
    info line函数名

  • 查看汇编代码disassemble,反汇编

  • 使用方法:disassemble 函数名


  1. 其他
  • 转跳执行
    jump <linespec>
    jump <address>

  • 发送信号
    singal <singal>

  • 强制返回 return <expression>

  • 强制调用 call <expr>