嵌入式Linux编程基础 | GCC 编译器 与 GDB 调试器的基本操作

一、GCC 编译器

1. 什么是 GCC

GCC 是 GNU Compiler Collection (GNU 编译器套装)的简称,目前 GCC 可以支持 C,C++,ADA,JAVA,Fortran,PASCAL 等多种高级语言。支持主流的 CPU 平台,完成从源程序向特定 CPU 硬件平台上自标代码的转换。

2. GCC 支持的源程序

后缀 说明
.c C 源程序
.a LINUX/UNIX 库文件
.c; .gcc; .cxx C++ 源程序
.h 头文件
.i 预处理后的 C 文件
.ii 预处理后的 C++ 文件
.o 编译后的目标文件
.s 汇编程序
.S 预编译后的汇编程序

3. GCC 编译流程

3.1 方法一:四步完成编译

1)预处理

对包含的头文件(#include)和宏定义(#define、#ifdef等)进行处理。可以使用 gcc 的选项 -E 让 gcc 在预处理结束后停止编译过程。

gcc -E filename.c -o filename.i

2)编译

gcc 首先检查代码的规范性、是否有语法错误等,以确定代码实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。用户可以使用 -S 选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。

gcc -S filename.i -o filename.s

3)汇编

将编译阶段生成的 .s 文件转成目标文件,用选项 -c 只产生目标代码,不链接。

gcc -c filename.s -o filename.o

4)链接

将库链接进来生成可执行文件,可执行文件没有统一的后缀名。如果 GCC 编译时没有 使用 -o 选项明确给出输出文件名,则系统自动生成一个 a.out 的可执行文件。

gcc filename.o -o filename

3.2 方法二: 单步完成编译

gcc filename.c -o filename

3.3 运行

./filename

3.4 GCC 总体选项列表

选项名 含义
-E 只进行预编译,不进行其它处理
-S 只是编译,不汇编;生成汇编文件
-c 只是编译,不链接;生成目标文件 .o
-g 在可执行程序中包含标准调试信息
-o file 把输出文件输出到 file
-v 输出 GCC 的版本信息
-I dir 在头文件的搜索路径列表中添加 dir 目录
-L dir 在库文件的搜索路径列表中添加 dir 目录
-static 链接静态函数库
-llibrary 链接名字为 library 的库文件

二、GDB 调试器

1. 什么是 GDB

GDB (GNU Debugger) 是 GNU 开发的一款调试器,在 Linux/UNIX 编程调试中应用广泛。要想使用 GDB 对程序进行调试,必须在对源码进行编译的时候,使用 -g 编译选项开关。

2. GDB 使用流程

1)使用 -g 选项编译源程序

gdb 调试的不是 .c 的源代码文件,而是可执行文件,因此要调试一个文件,应该先使用 gcc 工具编译成可执行文件。

gcc -g filename.c -o filename

2)进入 gdb 调试环境

gdb filename

3)查看文件

在列出的源代码中,给出了行号

(gdb) l

4)设置断点

在源代码的第14行设置断点。利用行号设置断点,代码运行到该行之前停止

(gdb) b 14

5)查看断点情况

(gdb) info b

6)运行代码

(gdb) r

7)查看变量值

查看变量 a 当前的值

(gdb) p a

8)单步运行

两种方式:n(next)或 s(step)。遇到函数调用时 s 会进入到函数内部,n 不会进入。

(gdb) n
(gdb) s

9)继续运行程序

(gdb) c

10)退出调试

(gdb) q

3. GDB 常用命令

命令 描述
file 指定要调试的可执行程序
kill 终止正在调试的可执行程序
list 部分列出源程序
step 单步调试,并进入函数内部
next 单步调试,不进入函数内部
run 运行当前调试的可执行程序
quit 退出 gdb
watch 检查一个变量
print 打印表达式的值到标准输出
break N 在指定第 N 行插入断点
info break 显示当前断点信息
info files 显示被调试程文件信息
info func 显示所有的函数名
info local 显示当前函数中局部变量信息
info prog 显示被调试程序的执行状态
clear N 清楚第 N 行的断点
make 在不退出 gdb 使用 make 命令
shell 在不退出 gdb 使用 shell 命令
continue 继续执行正在调试的程序
disable N 关闭第 N 行的断点
enable N 开启第 N 行的断点
posted @ 2024-10-15 14:05  意气风发胡小图  阅读(158)  评论(0)    收藏  举报