Linux环境下的编译和调试

server/2024/9/20 3:53:19/ 标签: linux, 编译, gcc, gdb

本文目录


  

一、编译

gccg_6">1. gcc/g++编译

对于.c 格式的 C 文件,可以采用 gcc 或 g++编译
对于.cc、.cpp 格式的 C++文件,应该采用 g++进行编译

gccg_9">2. gcc/g++安装

  build-essential是一个包含编译软件所需要的基本包集合的元包。安装GCC、G++、Make等基本工具,这些工具是编译大部分源代码所必需的。

sudo apt-get install build-essential

3. 代码编译过程

在这里插入图片描述

假设我们两个源文件名称为test.ctrain.c

(1)预处理: 预处理器将对源文件中包含的头文件和宏定义进行展开。
使用gcc -E test.c -o test.i,这里test.i就是预处理后的文件。train.c文件同理。

(2)编译: 将预处理后的源文件编译成汇编文件。
使用gcc -S test.i -o test.s,对预处理后的文件编译为汇编文件。train.c文件同理。

(3)汇编: as 将汇编文件编译成目标文件(二进制机器码文件)。
使用as test.s -o test.o,将汇编文件转为了二进制机器码。train.c文件同理。

(4)链接: 将所有的目标文件(二进制文件)进行链接,得到一个可执行二进制文件。
  使用gcc test.o train.o -o exefile,将所有的二进制文件进行链接,得到可执行文件exefile (文件名自定)。连接完成后,我们就可以使用命令 ./exefile 去执行文件。

gcc_31">4. gcc编译

  上述中的gcc编译过程内容,只是为了清晰的看到gcc整个编译流程。在实际使用中,如果一条一条代码去执行编译过程会非常繁琐,这里我们只需要使用一行代码就可以完成上述所有流程。

假设源文件还是test.ctrain.c
这里我们直接使用gcc test.c train.c -o exefile,就可以直接生成最终的可执行文件。

二、调试

gdb_38">1. 下载gdb调试器

sudo yum install -y gdb

gdb__45">2. gdb 调试器使用步骤

  1. 编译程序:gcc -g test.c -o exefile ,使用-g选项在目标文件中产生调试信息,用于 gdb 调试。

  2. 启动gdbgdb exefile ,运行调试器并打开调试文件。

  3. 显示源码:l 1,按回车一直显示完所有代码。

  4. 打断点:使用break 函数名,在函数入口处打断点。或者break 行号,在某行打断点。或者break 文件名:行号,在某个文件的行号处打断点
    (1)显示所有断点信息:info break
    在这里插入图片描述
    (2)删除断点:d 断点号。假设删除断点2。
    在这里插入图片描述
    (3)开启/关闭断点。关闭断点:disable 断点号。开启断点:enable 断点号
    在这里插入图片描述
    在这里插入图片描述

  5. 运行程序:使用run ,或者直接输入 r。
    在这里插入图片描述

  6. 退出调试:quit


http://www.ppmy.cn/server/25013.html

相关文章

网安云许可合规中心全新上线!一键免费获取许可合规状态

开源软件通过开源许可证明确授权,将复制、传播、修改等诸多权利授予传播者和接受者,同时也声明了关于源代码专利、商标、著作权、商业机密等方面的法律保护。 相比于闭源软件,开源软件的所有权和使用权分离,如果对许可合规条款不…

LeetCode45:跳跃游戏Ⅱ

题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n …

【Python】深入理解Pandas中的连续变量与分类变量以提升模型训练效果

你啊你&#xff0c;是自在如风的少年 飞在天地间&#xff0c;比梦还遥远 你啊你&#xff0c;飞过了流转的时间 归来的时候&#xff0c;是否还有青春的容颜 &#x1f3b5; 好妹妹《你飞到城市另一边》 引言&#xff1a; 在使用Python进行数据科学和机器学…

简记在arduino安装esp32开发板包

主要参考来源&#xff1a;http://t.csdnimg.cn/Fuqg9&#xff0c;感谢原博主的文章&#xff0c;原文我有不够详细的地方本文会给出说明。 废话&#xff0c;不用看&#x1f447; 本人安装时常大概2小时&#xff0c;按理说有离线文件了应该很快&#xff0c;我这2小时属实有点慢了…

nodejs 中间件

一、是什么 Node.js 中的中间件&#xff0c;特别是针对 Web 开发框架&#xff08;如 Express、Koa、Hapi 等&#xff09;的中间件&#xff0c;其核心功能是用来对 HTTP 请求生命周期进行拦截、处理和传递的。 中间件这一概念是 Web 开发框架为了实现请求处理流程的模块化、可…

数据结构——时间复杂度与空间复杂度

文章目录 一、算法效率算法的复杂度 二、时间复杂度1.时间复杂度的概念2.大O的渐进表示法3.例子 三、空间复杂度1.空间复杂度概念2.例子 四、常见复杂度对比 一、算法效率 算法的复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。 因此…

排序算法:插入、希尔、选择、推排、冒泡、快速、归并排序

排序算法 目录 前言 一、排序的概念 1.1排序的概念 1.2 常见的排序算法 二、常见排序算法的实现 2.1 插入排序 2.2 希尔排序 2.3 选择排序 2.4 堆排序 2.5 冒泡排序 2.6 快速排序 2.6.1 hoare版本 2.6.2 前后指针版本 2.6.3 非递归版本 2.7 归并排序 归并排序 2.8 计数排序 三、…

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现 MobileNetV4 - Universal Models for the Mobile Ecosystem PDF: https://arxiv.org/pdf/2404.10518.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: ht…

MongoDB基础操作

文章目录 一、什么是MongoDB二、MongoDB 与关系型数据库对比三、数据类型四、部署MongoDB1、下载二进制包2、下载安装包并解压3、创建用于存放数据和日志的目录&#xff0c;并修改权限4、启动MongoDB4.1前台启动4.2后台启动4.3、配置文件启动服务4.4、配置systemd服务4.5、syst…

uniapp 使用地图

可以使用 map | uni-app官网 uniapp中的map标签&#xff0c;也可以自己引入地图的js 如下图 使用 uniapp中的map标签 需要注意要配置key

每天五分钟计算机视觉:基于YOLO算法精确分类定位图片中的对象

滑动窗口的卷积的问题 滑动窗口的卷积实现效率很高,但是它依然不能够输出最精准的边界框,比如下面所示: 我们可以看到蓝色框不论在什么位置都不能很好的确定车的位置,有一个算法是YOLO 算法它能够帮助我们解决这个问题。 YOLO 算法 比如我们的输入图像是100*100,我们会…

煤矿综合自动化智能监控系统

系统概述 建设煤矿井上下工业环网、工业数据集成平台、排水、供电、运输、通风、压风、瓦斯抽放、采掘、智能洗煤厂等智能自动化控制系统&#xff0c;利用多种软硬件接口(OPC协议、驱动通讯、数据库、文本文件、DDE/NETDDE、子网等)&#xff0c;构建全矿井统一、稳定、高效的数…

spring cache(一)介绍

一、介绍 1、背景 项目中使用最多的缓存技术就是Redis,用Redis就可以实现了&#xff0c;为什么需要使用spring cache&#xff1f; 先看下我们使用缓存步骤: &#xff08;1&#xff09;查寻缓存中是否存在数据&#xff0c;如果存在则直接返回结果 &#xff08;2&#xff09…

动态规划:0/1背包问题

01背包问题是一个经典的动态规划问题&#xff0c;它询问在给定的物品和背包容量下&#xff0c;如何选择物品使得背包中的物品总价值最大&#xff0c;同时保证不超过背包的容量限制。物品不能分割&#xff0c;每个物品只能选择放入或不放入背包。 问题定义 输入&#xff1a; 物…

HarmonyOS-Next开源三方库 MPChart:打造出色的图表体验

点击下载源码https://download.csdn.net/download/liuhaikang/89228765 简介 随着移动应用的不断发展&#xff0c;数据可视化成为提高用户体验和数据交流的重要手段之一。在 OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;应用开发中&#xff0c;一个强大而…

大语言模型在专业领域的应用——医疗场景下的大语言模型

大语言模型在专业领域的应用——医疗场景下的大语言模型 构建面向医疗的大语言模型数据资源总结医疗是与人类生活密切相关的重要领域之一。由于具有较强的通用任务解决能力,大语言模型被广泛用于辅助医生处理各种相关医疗任务,例如医疗诊断、临床报告生成、医学语言翻译、心理…

编译工具各版本与操作系统版本号兼容性冷知识 : JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号的兼容情况

编译工具各版本与操作系统版本号兼容性冷知识 &#x1f9e0;: JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号的兼容情况 文章目录 编译工具各版本与操作系统版本号兼容性冷知识 &#x1f9e0;: JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号…

站群SEO优化策略及其遭遇DDoS攻击时的应对方法

一、站群SEO优化策略 站群优化主要是指通过合理布局和内容优化提升一系列网站在搜索引擎中的整体排名表现。以下是一些关键步骤与相关代码示例&#xff08;以WordPress为例&#xff09;&#xff1a; 差异化内容建设&#xff1a; 每个站点的内容必须具有独立性和价值性&#x…

asyncio异步编程(三)

1.异步迭代器 迭代器&#xff1a;内部实现__iter__()和__next__()方法的对象。 可迭代对象&#xff1a;内部实现__iter__()方法&#xff0c;并且可以返回迭代器的对象。 异步迭代器&#xff1a;实现__aiter__()和__anext__()方法的对象。 异步可迭代对象&#xff1a;内部实…

未来已来:深入探索LLAMA3驱动的人工智能革命

大家好&#xff01;相信大家对于AI&#xff08;人工智能&#xff09;的发展已经有了一定的了解&#xff0c;但你是否意识到&#xff0c;到了2024年&#xff0c;AI已经变得如此强大和普及&#xff0c;带来了我们从未想象过的便利和创新呢&#xff1f;让我们一起来看看AI在这个时…