![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a3afa1556f282b002b98f46a1735a1af.gif#pic_center)
📄前言
在学习编程的路途中,你是否有了解过自己使用的编译器呢,这里说的编译器指的可不是vscode或vs2022这样的ide,如果你还没有了解过编译器,本文将为你介绍编译器中最著名的gcc(???我在写什么)
gcc
gcc的介绍
gcc是linux下的一款开源的编译器软件,全程GNU Compiler Collection
,可用于编译多种编程语言,包含C++、C、Java等。
gcc的编译过程
gcc的编译分为4个过程,分别是:
- 预处理:将头文件进行展开包含,取注释等操作
gcc -E test.c -o test.i
- 编译:检查代码是否规范,并生成汇编代码。
gcc -S test.i -o test.s
- 汇编:将汇编代码生成为二进制文件
gcc -c test.s -o test.o
- 链接:将二进制文件与使用的库所连接。
gcc test.o -o test
gcc的部分参数
参数 | 意义 |
---|---|
-E | 预处理文件 |
-S | 编译到汇编语言不进行汇编和链接 |
-c | 编译到目标代码 |
-o | 文件输出到 文件 |
-static | 此选项对生成的文件采用静态链接 |
-g | 生成调试信息。GNU 调试器可利用该信息 |
-shared | 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库 |
O0~O3 | 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 |
-w | 不生成任何警告信息 |
-Wall | 生成所有警告信息 |
gdb调试器
gdb的背景
gdb全程是THE GNU Project Debugger,可用于调试多种编程语言,如C++/C,java,python等。
程序的发布方式
程序的发布方式有两种,分别是debug模式和release模式。
- release模式:生成产品用户使用的程序,也就是我们日常使用的程序
- debug模式:生成带有调试信息的程序,大小比release生成的程序大,可用gdb进行调试
gdb的常用参数
参数 | 作用 |
---|---|
list/l 行号 | 显示代码 |
list/l 函数 | 显示函数的代码 |
r/run | 运行程序 |
n/next | 单步执行 |
b/break | 设置断点 |
finish | 执行到当前函数返回,然后停下来等待命令 |
p/print 变量 | 打印变量值 |
c/continue | 单步进入 |
info/i breakpoints | 查看设置哪些断点 |
display 变量名 | 跟踪查看一个变量,每次停下来都显示它的值 |
until 行号 | 跳转至行号位置 |
![](https://i-blog.csdnimg.cn/blog_migrate/6978e059d51da817bf235e35f931e580.gif#pic_center)