gcc编译与gdb使用
一、GCC介绍1.1 GNU工具集GNU 工具集是由自由软件基金会发起的 GNU 项目孕育而生始于20世纪80年代初旨在构建完全自由的操作系统其核心原则强调用户自由使用、修改和分发软件的权利极大推动了自由软件运动和开源生态系统发展工具类别工具名称主要功能应用场景编译器gcc/g将 C/C 源代码转换为可执行程序各类 C/C 项目开发调试工具gdb设置断点、查看变量、分析内存辅助代码调试软件开发调试阶段排查程序错误项目构建工具make依据 Makefile 自动处理编译依赖源文件多、依赖关系复杂的项目目标文件分析工具objdump反汇编目标文件查看二进制文件内容分析程序底层实现排查目标文件相关问题链接工具ld合并多个目标文件及库文件为可执行文件编译流程最后阶段处理目标文件链接静态库管理工具ar创建、修改和操作 .a 静态库文件大型项目中复用通用代码模块1.2 GCC介绍定义GCCGNU Compiler Collection即 GNU 编译器集合开源。起初用于编译 C 语言现支持C、Java 等多种语言是 GNU 工具链核心可跨平台编译。它遵循 GNU 通用公共许可证(GPL)保障用户自由使用、修改、分发软件的权利;作用核心是将源代码转换为可执行文件同时支持跨平台编译方便在不同系统环境下进行软件开发应用场景在日常软件开发中应用广泛无论是编写小游戏、工具软件还是大型系统程序都需要借助 GCC 将代码编译成可执行程序安装在 Linux 系统中GCC 一般为预装软件。若未安装可通过包管理器安装 build - essential 包该包通常包含 GCC 及其他相关编译工具安装命令为sudo apt install build-essential安装前先执行sudo apt update安装完成后可使用 gcc --version命令来查看 GCC 的版本信息GCCGNU Compiler Collection是一款功能强大的交叉平台编译器支持几乎所有主流 CPU 处理器平台。它能够将 C、C 等源文件转换为可在特定硬件上运行的目标代码在 Linux 系统中应用广泛文件后缀文件类型含义说明.c源代码文件采用 C 语言编写的源代码文件.cpp源代码文件使用 C 语言编写的源代码文件.h头文件源程序中包含的头文件用于声明函数、变量等.o目标文件源代码经过编译但尚未链接的中间文件.a库文件由目标文件构成的静态库文件.so库文件动态库文件Shared Object二、gcc编译过程2.1 编译模式编译模式语法格式核心特点适用场景默认模式gcc 源文件自动生成a.out可执行文件便捷快速代码快速验证、临时编译指定输出模式gcc 源文件 -o 输出文件名清晰可控便于版本管理和团队协作规范项目开发、多源文件项目源文件中可以不加头文件场景注意事项默认模式多次编译会覆盖旧的a.out文件生产环境统一生成a.out难以区分程序功能不便版本管理很少使用2.2 编译四步骤阶段语法格式操作说明产出文件核心要点预处理gcc -E 源文件 -o 文件.i处理#include、#define等预处理指令插入头文件内容替换宏定义.i文件1. 展开头文件2. 删除注释3. 替换宏纯文本替换4. 宏分支条件编译根据宏定义值保留/剔除代码编译gcc -S 文件.i -o 文件.s将预处理后的文件转为汇编语言代码进行语法、语义分析及优化.s汇编文件生成汇编代码汇编gcc -c 文件.s -o 文件.o将汇编代码转换为目标机器码.o目标文件生成二进制目标文件链接gcc 文件.o -o 可执行文件将目标文件与所需库文件链接解决函数和变量引用问题可执行文件1. 多个目标文件链接成可执行文件2. 链接库文件3. 链接函数执行文件./特点说明流程清晰将编译过程细化为四个步骤每个步骤功能明确便于理解和排查问题灵活可控借助不同编译选项-E、-S、-c可按需控制每个步骤的执行2.3 gcc常用选项选项功能语法格式应用场景-o指定编译输出文件的名称gcc 源文件 -o 输出文件名日常开发中明确输出文件名称便于管理-c只进行编译和汇编不进行链接生成目标文件gcc -c 源文件生成目标文件用于后续链接或单独分析目标文件-E仅对源文件进行预处理输出预处理后的代码gcc -E 源文件 -o 预处理后文件名检查预处理指令执行情况-S将源文件编译为汇编代码gcc -S 源文件分析编译器生成的汇编代码学习汇编语言-g生成调试信息供调试器如 gdb调试gcc -g 源文件程序调试阶段排查问题-Wall开启大部分常见警告信息gcc -Wall 源文件发现代码中潜在问题提高代码质量-std指定编程语言标准gcc -std标准 源文件确保代码按特定标准编译增强兼容性和可移植性三、GDB介绍先导GDB是GNU 项目下的一个功能强大的调试工具主要用于调试 C/C/Go等编程语言编写的程序核心功能动态检查程序运行状态变量值、内存布局、寄存器内容等等跟踪代码执行流程单步执行、断点设置、函数调用等等支持多线程调试查看线程状态、切换线程上下文等等准备工作要使用 GDB 调试程序需要在编译时使用-g选项为可执行文件添加调试信息如gcc -g -o program program.c这里的-g选项告诉 GCC 在生成的可执行文件program中包含调试信息以便 GDB 能够识别变量名、函数名和行号等信息启动和退出GDB启动在终端中输入gdb 加上有调试信息的可执行文件名即可启动 GDB 并加载相应的可执行文件退出在 GDB 命令行中输入quit或q然后按回车键即可退出 GDB3.1 gdb调试命令分类命令简写功能说明示例程序运行runr运行程序直到遇到断点或结束rcontinuec继续运行到下一个断点或结束c代码查看listl列出源代码l或l main断点操作breakb在指定行或函数设置断点b 10或b maininfo breakinfo b查看所有断点信息info bdeleted删除指定编号的断点d 2调试方式nextn逐过程不进入函数内部nsteps单步调试进入函数内部s变量查看printp查看变量当前值p ndisplay无每次停止时自动显示变量值display n3.2 GDB调试工作流程
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2478731.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!