赞
踩
编译过程可分为四个阶段:
gcc文件类型约定规则:
常用的有 -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 -On
gcc -O2 常用
gcc -O0 不进行优化
默认情况下,gcc在编译时不会建个调试符号插入到生成的二进制代码中,如果需要生成调试符号信息,可以使用gcc -g选项,一般不加调试选项,否则会使代码增大。
功能表:
break 4
break main
step 步入
next 下一行
print <expr>
print/<f> <expr>
display 可以设置一些自动显示的变量,当程序停住时,或是在单步跟踪时,这些变量会自动显示,相关的gdb命令是display,格式如下
display<expr>
display/<fmt><expr>
display/<fmt><addr>
1、显示源代码
gdb可以打印出所调试程序的源代码,编译时一定要加上-g参数,用list来显示源代码
2、源代码内存
info line命令查看源代码在内存中的地址
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。