GCC编译器能将C.C++语言源程序,汇编程序编译,链接为可执行的文件
hello.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
一:分四个阶段编译
预处理: gcc -E hello.c -o hello.i
编译: gcc -S hello.i -o hello.S
汇编: gcc -c hello.S -o hello.o
链接: gcc hello.o -o hello
二:单步完成编译
gcc hello.c -o hello
三:运行
./hello 输出: Hello World!
编译选项:
-c 只是编译不连接,生成目标文件“.o”
-S 只是编译不汇编,生成汇编代码
-E 只进行预编译,不做其他处理
-g 在可执行程序中包含标准调试信息(用于GDB调试)
-o file 指定输出文件为file
-v 打印出编译器内部编译各过程的命令行信息和编译器的版本
-static 链接静态库
-l dir 在头文件的搜索路径列表中添加dir 路径
eg: gcc -l /home/student/include test.c -o test
-L 在库文件的搜索路径列表中添加dir路径
-lname 链接名为libname.so的库文件
eg:gcc -L /home/student/lib -lmylib test.c -o test
警告和出错选项
-ansi 输出符合ANSI C标准语法的警告信息
-pedantic 允许ANSI C变准所列的全部警告信息
-Wall 允许发出GCC提供的所有有用的警告信息
-w 关闭所有的警告信息
-Werror 把所有的警告信息转化为错误信息,并在警告发出时终止编译过程
GDB 是GNU开源组织发布的一个强大的Linux下的程序调试工具,基于命令行的工作模式,主要用来调试C和C++程序
,通过GDB能在程序运行时动态观察程序的内部结构,变量值和内存的使用情况。
使用流程:
查看文件-》设置断点-》查看断点情况-》运行代码-》查看变量值-》单步运行-》恢复程序运行
一:GDB中源代码查看命令
list /l 行号或函数名 //查看指定位置代码
list <linenum> //显示程序第linenum行的周围的源程序
list <function> //显示函数名为function的函数的源程序
list // 显示当前行后面的源程序
list <filename:funtion> //显示哪个文件中的哪个函数的源程序
eg: list src/fun1.c:fun1
list <filename:linenum> //哪个文件的哪一行周围的源程序
eg:list src/fun1.c:1
二:运行代码
运行代码:rum /r
三:设置断点与恢复命令
info b
break /b 行号或函数名<条件表达式>
delete 断点号
disable 断点号
enable 断点号
step /s 单步调试(进入子函数)
next /n 单步调试(不进入子函数)
continue /c 继续执行函数,知道函数结束或遇到新的断点
四:查看运行数据命令
print /p 表达式或变量 //查看程序运行时对应表达式或变量的值
五:修改运行参数命令
set variable 变量名=设定值