gcc编译器与gdb调试器

gcc编译器与gdb调试器

编译过程可分为四个阶段:

  1. 预处理(Pre-Processing)
  2. 编译(Compiling)
  3. 汇编(Assembling)
  4. 链接(Linking)

gcc文件类型约定规则:

gcc编译器与gdb调试器_第1张图片

gcc常用选项:

gcc编译器与gdb调试器_第2张图片

常用的有 -o -c -S -E -g -O

**预处理:*在预处理阶段,gcc把预处理命令扫描处理完毕,输入C语言的源文件,通常为.c

它们通常带有.h之类的头文件的包含文件,这个阶段主要处理源文件中的#ifdef#include和#define等预处理命令,该阶段会生成一个中间文件*.i,可以使用-E生成中间文件.i

gcc -E hello.c -o hello.i

**编译:*gcc把预处理后的结果编译成汇编或者目标模块,输入的中间文件 * .i,编译后生成汇编语言文件.s

gcc -S hello.i -o hello.s

**汇编:*汇编阶段,编译器把编译出来的结果汇编成具体CPU上的目标代码模块,输入汇编文件 * .s,输出机器语言.o

gcc -c hello.s -o hello.o

**链接:*在链接阶段把多个目标代码模块连接成一个大的目标模块,输入机器代码文件, .o,汇集成一个可执行的二进制代码文件。

gcc hello.o -o hello

优化gcc

编译器通过分析源代码,找出其中尚未达到最优的部分,然后对其进行重新组合,改善程序的执行性能。

gcc -On

gcc -O2 常用

gcc -O0 不进行优化

调试选项

默认情况下,gcc在编译时不会建个调试符号插入到生成的二进制代码中,如果需要生成调试符号信息,可以使用gcc -g选项,一般不加调试选项,否则会使代码增大。

gdb调试器

功能表:

  1. 设置断点
  2. 单步执行程序,便于调试
  3. 查看程序中变量值的变化
  4. 动态改变程序的执行环境
  5. 分析崩溃程序产生的core文件

gcc编译器与gdb调试器_第3张图片

设置断点
break 4

break main

gcc编译器与gdb调试器_第4张图片

单步执行程序
step 步入
next 下一行
查看运行时的数据 print display
print 
print/ 
display 可以设置一些自动显示的变量,当程序停住时,或是在单步跟踪时,这些变量会自动显示,相关的gdb命令是display,格式如下
display
display/
display/

gcc编译器与gdb调试器_第5张图片

查看源程序

1、显示源代码

gdb可以打印出所调试程序的源代码,编译时一定要加上-g参数,用list来显示源代码

gcc编译器与gdb调试器_第6张图片

2、源代码内存

info line命令查看源代码在内存中的地址

你可能感兴趣的:(Linux)