首页 > 其他分享 >GCC 编译器 与 GDB 调试器的基本操作

GCC 编译器 与 GDB 调试器的基本操作

时间:2024-10-15 14:01:02浏览次数:7  
标签:gcc gdb filename 编译 编译器 GCC 基本操作 调试 调试器

一、GCC 编译器

1. 什么是 GCC

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

2. GCC 编译流程

2.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

2.2 方法二: 单步完成编译

gcc filename.c -o filename

2.3 运行

./filename

2.4 GCC 总体选项列表

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

标签:gcc,gdb,filename,编译,编译器,GCC,基本操作,调试,调试器
From: https://www.cnblogs.com/whbg/p/18467195

相关文章

  • DAPLINK 之仿真调试器介绍
    目录前言1协议1.1JTAG协议1.2SWD协议2调试仿真器2.1ST-Link仿真器2.2ULink仿真器2.3J-Link仿真器2.4DAPLINK仿真器3LINKer搭配CLion的使用3.1ST-Link+CLion+STM32F103RCT63.2DAPLINK+CLion+STM32F103RCT6参考前言本文算是DAPLINK学习的一个引子......
  • 交叉编译器的命名规则是什么?
    交叉编译器(cross-compiler)是用来编译可在与编译器运行环境不同的架构或操作系统上运行的代码的工具。交叉编译器的命名通常遵循一个约定,以便能够描述编译器的目标平台。这个命名规则主要包含以下几个组成部分,通常顺序为:目标架构(TargetArchitecture):表示编译器生成代码的目标处......
  • JavaScript中的DOM和Timer(简单易用的基本操作)
    JavaScript中的DOM和Timer基本操作DOM操作传统的选择器选择器idvarelements=document.getElementById(id的名称);例如:varelements=document.getElementById("test");选择id为test的标签选择器classvarelements=document.getElementsByClassName(class的名称);......
  • linux入门到实操-2 linux桌面、终端基本操作,文件系统、目录结构、挂载点
     教程来源:B站视频BV1WY4y1H7d33天搞定Linux,1天搞定Shell,清华学神带你通关_哔哩哔哩_bilibili整理汇总的课程内容笔记和课程资料,供大家学习交流下载:夸克网盘分享本文内容为完整笔记的基础篇的1、2、3内容目录1.桌面和终端基本操作类似的图形化界面操作(省略)切换到终端页面2.Linux文......
  • 5.3 C#数组的基本操作与排序(数组赋值、最大最小值、冒泡排序、选择排序、Array类排序)
    文章目录5.3.1C#数组对象的赋值例5-5:通过循环给一维数组赋值例5-6:通过键盘输入给数组赋值5.3.2C#数组对象的输出例5-7:不同类型数组的输出5.3.3C#求数组中的最大(小)元素值例5-8:求数组中的最大值和最小值5.3.4C#数组排序1.使用Array类排序(例5-9)2.冒泡排序(例5-......
  • Linux基本操作
    Linux基本操作什么是操作系统操作系统是一款管理软件,对下管理软硬件资源(手段),对上提供良好(稳定,安全,高效)的运行环境(目的)Linux下基本指令写指令等同于在Windos下学习基本操作,图形化界面和命令行在操作系统看来没有任何区别pwd#显示当前用户所在的路径ls#显示当前路......
  • GCC编译器CFLAGS、LDFLAGS详解
    目录CFLAGSLDFLAGS在编译C/C++程序时,可以使用CFLAGS和LDFLAGS环境变量来设置编译器和链接器的选项。下面对CFLAGS和LDFLAGS进行详解:CFLAGSCFLAGS是用于设置C/C++编译器选项的环境变量。它可以用来指定编译过程中的各种选项,如优化级别、警告级别、头文件包含路......
  • Python字符串基本操作
    目录一、字符串的创建1.1转义字符1.2原始字符串二、字符串的访问与切片2.1字符访问2.2切片(Slicing)三、字符串的连接与重复四、字符串的格式化4.1百分号格式化4.2 str.format() 方法4.3f-字符串(Python3.6及以上)五、字符串的方法5.1大小写转换5.2去除空......
  • 7-1单链表的基本操作
    题目:7-1单链表基本操作分数20作者朱允刚单位吉林大学请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。输入格式:输入第1行为1个正整数n,表示当前单链表长度;第2行为n个......
  • winforms基本操作-将datagridview内容保存为excel文件
    这里记录一下将winforms展示的datagridview,导出或保存为excel文件。这里说一下环境、版本信息:win系统:win11框架:winforms依赖:Microsoft.Office.Interop.Excel.net:8.0.401.netframework:4.8DataGridView对象为dataGridView1,然后添加一个按钮,绑定事件btnConfirm即可。priva......