当前位置: 首页 > article >正文

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调试工作流程

相关文章:

gcc编译与gdb使用

一、GCC介绍1.1 GNU工具集GNU 工具集是由自由软件基金会发起的 GNU 项目孕育而生,始于20世纪80年代初,旨在构建完全自由的操作系统,其核心原则强调用户自由使用、修改和分发软件的权利,极大推动了自由软件运动和开源生态系统发展&…...

OpenClaw镜像体验:在星图GPU平台快速试用SecGPT-14B安全分析

OpenClaw镜像体验:在星图GPU平台快速试用SecGPT-14B安全分析 1. 为什么选择云平台体验OpenClaw 第一次接触OpenClaw时,我被它的自动化能力吸引,但本地安装过程让我望而却步。作为一个经常需要评估各种AI工具的安全工程师,我发现…...

使用cv_unet_image-colorization增强电商商品图像的实践

使用cv_unet_image-colorization增强电商商品图像的实践 电商平台中,商品图像的质量直接影响消费者的购买决策。本文将分享如何利用cv_unet_image-colorization模型,为老商品图上色、提升低质图像质量,从而显著改善商品展示效果。 1. 电商图像…...

从需求到代码:基于快马平台ai生成spring boot电商系统实战项目

从需求到代码:基于快马平台AI生成Spring Boot电商系统实战项目 最近在做一个电商订单处理系统的项目,正好尝试了用InsCode(快马)平台来快速生成Spring Boot代码。整个过程比我预想的要顺畅很多,特别是对于这种包含多个模块的中型项目&#x…...

当plc编程遇见ai助手:用快马智能分析需求并生成优化控制方案

作为一名工业自动化领域的工程师,我最近尝试用AI辅助完成PLC编程工作,发现InsCode(快马)平台的智能对话功能特别适合处理复杂控制逻辑的开发。这种"人类描述需求AI分析生成"的协作模式,让传统PLC开发效率提升了至少三倍。 需求分析…...

让AI当你的面试官:基于快马平台打造智能前端面试辅导助手

最近在准备前端面试时,我发现很多题目看似简单,但真要回答得全面深入并不容易。比如经典的"深拷贝"问题,不仅要写出代码,还得考虑循环引用、性能优化等细节。这时候如果能有个AI助手帮忙分析题目、提供思路,…...

新手福音:通过快马ccswitch模型轻松生成你的第一个博客页面代码

作为一名刚接触编程的新手,想要搭建个人博客主页却不知从何下手,这确实是个常见难题。最近我在InsCode(快马)平台尝试了ccswitch模型,发现它特别适合零基础学习者快速入门。下面分享我的实践过程,希望能帮到同样想入门前端开发的朋…...

JIT加速不生效?你漏掉了这4个强制启用开关,3.14新增--enable-jit-unsafe-mode正在被92%团队忽略

第一章:JIT加速不生效?你漏掉了这4个强制启用开关,3.14新增--enable-jit-unsafe-mode正在被92%团队忽略Go 3.14 引入了激进的 JIT 编译优化路径,但默认关闭全部 JIT 后端。大量团队在升级后观察到 GOMAXPROCS8 下 CPU 利用率未提升…...

SDXL-Turbo在虚拟现实内容创作中的应用

SDXL-Turbo在虚拟现实内容创作中的应用 1. 引言 虚拟现实内容开发一直面临着一个核心痛点:高质量素材的制作既耗时又费力。传统的VR环境创建需要美术人员手动绘制纹理、设计贴图,一个简单的场景可能就需要数天甚至数周的工作量。 想象一下这样的场景&…...

5个突破点:解锁时空数据金矿的ST-DBSCAN实战指南

5个突破点:解锁时空数据金矿的ST-DBSCAN实战指南 【免费下载链接】st_dbscan ST-DBSCAN: Simple and effective tool for spatial-temporal clustering 项目地址: https://gitcode.com/gh_mirrors/st/st_dbscan 问题发现:被忽视的时空关联密码 为…...

告别驱动噩梦:在 Ubuntu 22.04 上为 RTX 5070 显卡手动编译安装驱动的完整心路历程

告别驱动噩梦:在 Ubuntu 22.04 上为 RTX 5070 显卡手动编译安装驱动的完整心路历程 1. 缘起:当官方驱动安装成为一场噩梦 那是一个普通的周末早晨,我满怀期待地拆开了刚到的RTX 5070显卡。作为一名长期使用Ubuntu进行深度学习开发的工程师&…...

大模型评测、质量保证、datasets数据集等

文章目录示例代码datasetsdatasets和自建考题哪个好?常见的数据集有哪些?数据集-1. 数学与逻辑推理类 (你的主战场)数据集-2. 综合知识与学术能力类 (全能学霸)数据集-3. 编程与代码能力类 (程序员助手)数据集-4. 语言理解与指令遵循类 (听话程度)self-refine和sel…...

《数字图像处理》实战:从傅里叶到小波,解锁图像变换的时空密码

1. 图像变换的时空密码:从傅里叶到小波 当你用手机拍摄一张照片时,是否想过这张看似简单的图片背后隐藏着怎样的数学奥秘?图像处理领域的变换技术就像是一把钥匙,能够解开图像中隐藏的时空密码。在众多变换方法中,傅里…...

避坑指南:UE5 VaRest插件处理JSON数组和嵌套对象的几个常见错误

UE5 VaRest插件处理JSON数组和嵌套对象的避坑指南 在UE5开发中,VaRest插件因其便捷的HTTP请求和JSON处理能力而广受欢迎。然而,当面对复杂的JSON数据结构时,许多开发者会遇到各种"坑"。本文将深入剖析VaRest在处理JSON数组和嵌套对…...

突破数据瓶颈:6大创新方法让时间序列模型性能提升150%

突破数据瓶颈:6大创新方法让时间序列模型性能提升150% 【免费下载链接】Time-Series-Library A Library for Advanced Deep Time Series Models for General Time Series Analysis. 项目地址: https://gitcode.com/GitHub_Trending/ti/Time-Series-Library 在…...

7个硬核级调校技巧:Citra模拟器全方位优化指南

7个硬核级调校技巧:Citra模拟器全方位优化指南 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/gh_mirrors/cit/citra Citra作为开源的任天堂3DS模拟器,凭借其跨平台特性和持续优化,已成为玩家在PC上体…...

解锁专利数据价值:Google Patents Public Data全流程应用指南

解锁专利数据价值:Google Patents Public Data全流程应用指南 【免费下载链接】patents-public-data Patent analysis using the Google Patents Public Datasets on BigQuery 项目地址: https://gitcode.com/gh_mirrors/pa/patents-public-data 企业如何突破…...

拆解RTX4090 24G GPU服务器,一文摸清硬件搭配逻辑

RTX4090 24G GPU凭借NVIDIA Ada Lovelace架构优势,以16384个CUDA核心、24GB GDDR6X显存、1008GB/s显存带宽的核心参数,成为个人开发者、中小企业、科研机构的首选算力核心,广泛应用于大模型训练、AI推理、工业仿真、视频渲染等场景。据IDC 20…...

GLM-4-9B-Chat-1M保姆级教程:Windows WSL2环境下CUDA+PyTorch+vLLM全栈部署

GLM-4-9B-Chat-1M保姆级教程:Windows WSL2环境下CUDAPyTorchvLLM全栈部署 1. 开篇:为什么选择这个超长文本模型? 如果你正在找一个能在单张显卡上运行,却能处理超长文档的AI模型,GLM-4-9B-Chat-1M可能就是你要的答案…...

Arduino红外遥控库:让硬件设备听懂遥控器的语言

Arduino红外遥控库:让硬件设备听懂遥控器的语言 【免费下载链接】Arduino-IRremote Infrared remote library for Arduino: send and receive infrared signals with multiple protocols 项目地址: https://gitcode.com/gh_mirrors/ar/Arduino-IRremote 你是…...

(新)IEEE Access论文投稿全流程实战解析

1. IEEE Access投稿前的准备工作 第一次投稿到IEEE Access这种国际期刊,很多人都会感到无从下手。作为一个审过稿也投过稿的老手,我完全理解这种忐忑。别担心,跟着我的步骤走,保证你能顺利完成整个投稿流程。 首先得明确一点&…...

别再傻等下载了!用ISO镜像装VS2015,教你手动复制packages文件夹绕过报错

突破VS2015离线安装困境:手动复制packages文件夹的终极指南 当你在一个网络受限的环境中尝试安装Visual Studio 2015时,可能会遇到一个令人沮丧的问题——安装程序反复提示"安装包丢失或损坏"。这种情况尤其常见于使用ISO镜像文件进行离线安装…...

Elsevier Tracker:科研作者的审稿状态监控利器

Elsevier Tracker:科研作者的审稿状态监控利器 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 还在为Elsevier期刊审稿进度而焦虑吗?每天手动刷新页面、等待邮件通知的日子已经结束。Elsevie…...

用快马ai快速生成github入门演示项目,十分钟搞定代码托管原型

今天想和大家分享一个快速上手GitHub的小技巧——用InsCode(快马)平台的AI辅助功能,十分钟就能做出一个交互式GitHub入门演示项目。这个项目特别适合刚接触代码托管的新手,通过可视化操作理解Git核心概念。 项目设计思路 这个演示项目的核心是"学以…...

[开源工具]问题解决指南:Axure本地化方案的效率提升实践

[开源工具]问题解决指南:Axure本地化方案的效率提升实践 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 作为原型设计…...

终极图像纹理合成工具:GIMP Resynthesizer 完整使用指南

终极图像纹理合成工具:GIMP Resynthesizer 完整使用指南 【免费下载链接】resynthesizer Suite of gimp plugins for texture synthesis 项目地址: https://gitcode.com/gh_mirrors/re/resynthesizer GIMP Resynthesizer 是一套功能强大的 GIMP 纹理合成插件…...

新手开发者的第一课:用快马打造零基础的mc指令学习助手

作为一个刚接触《我的世界》指令系统的玩家,我最初完全搞不懂那些复杂的斜杠命令。直到自己动手做了一个指令查询工具,才发现原来理解指令可以这么简单。今天就来分享如何用InsCode(快马)平台快速打造一个零基础友好的MC指令助手。 为什么需要专门的指令…...

3dsconv终极指南:一键将3DS游戏转换为CIA格式的完整教程

3dsconv终极指南:一键将3DS游戏转换为CIA格式的完整教程 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 你是否…...

5步快速掌握CodeCombat:游戏化编程学习的终极指南

5步快速掌握CodeCombat:游戏化编程学习的终极指南 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat CodeCombat是一款创新的游戏化编程学习平台,通过将编程学习融入冒险游戏…...

3DGS内存优化新思路:拆解Scaffold-GS与Normal-GS中的锚点与共享IDIV设计

3DGS内存优化新思路:拆解Scaffold-GS与Normal-GS中的锚点与共享IDIV设计 在实时3D渲染领域,3D Gaussian Splatting(3DGS)技术正面临内存效率的严峻挑战。当我们将3DGS模型部署到移动设备或边缘计算节点时,显存限制往往…...