Linux环境下的编译和调试

本文目录

  • 一、编译
    • 1. gcc/g++编译器
    • 2. gcc/g++安装
    • 3. 代码编译过程
    • 4. gcc编译
  • 二、调试
    • 1. 下载gdb调试器
    • 2. gdb 调试器使用步骤

  

一、编译

1. gcc/g++编译器

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

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 去执行文件。

4. gcc编译

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

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

二、调试

1. 下载gdb调试器

sudo yum install -y gdb

2. gdb 调试器使用步骤

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

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

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

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

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

  6. 退出调试:quit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

密文域可逆信息隐藏技术综述(上)

加密图像可逆信息隐藏是一种加密原始图像后,在密文图像中可逆地隐藏附加数据,并且在数据提取后,原始图像可以被无损重建的技术。RDH-EI的分类如图1所示。 按对图像的加密方法,现有RDH-EI算法可分为对称加密域和非对称(公钥)加密域…

form1弹出子窗体form2,拖动子窗体判断是否离开父窗体区域,含源码(学习笔记)

一、效果(进入和离开) 子窗体到达父窗体边缘时变色。 二、代码分析 判断父窗体的目的,可以控制子窗体要随父窗体走。上面代码需要加以处理。 如:this.Location new Point(parentPoint.X distanceFromEdge, this.Location.Ydis…

抖音上线“星绘”APP,它有着什么样的特殊之处?

抖音上线“星绘”APP 前言 就在4月25日,抖音在App Store上线了一款名为“星绘”的App。该App以妙鸭相机为对标产品,拥有着强大的AI生图能力,而产品中的“AI分身”也十分有特色,那么这款“星绘”App究竟如何呢?我们接着…

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包

本文来自:2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包 - 源码1688 应用介绍 简介: 2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包 自行检查后门,最好是部署智能合约后用合约地址来授权 包含转账支付页面盗U授…

Dokcer容器分布式搭建LNMP+wordpress论坛

目录 引言 一、架构环境 二、搭建容器 (一)自定义网络 (二)搭建nginx容器 1.文件准备 2.查看与编辑文件 3.生成镜像 4.创建容器 (三)搭建MySQL容器 1.文件准备 2.查看与编辑文件 3.生成镜像 …

python自动化操作docx

使用Python自动化处理Word文档 在日常工作中,我们经常需要处理大量的Word文档,这时自动化脚本就显得尤为重要。本文将介绍如何使用Python中的python-docx库来创建和修改Word文档。 安装python-docx库 在开始之前,确保你已经安装了python-d…

LabVIEW自动剪板机控制系统

LabVIEW自动剪板机控制系统 随着工业自动化的快速发展,钣金加工行业面临着生产效率和加工精度的双重挑战。传统的手动或脚踏式剪板机已无法满足现代生产的高效率和高精度要求,因此,自动剪板机控制系统的研究与开发成为了行业发展的必然趋势。…

解决Uncaught TypeError: Cannot read properties of null (reading ‘getAttribute‘)

问题: 用了element ui 的echart ,初始化时候找不到指定id的元素,导致的问题,如下 浏览器控制台输出的错误信息如下 Echars echarts.min.js:22 Uncaught TypeError: Cannot read properties of null (reading getAttribute)at echarts.min.…

动手学深度学习——从零实现softmax分类模型

1. 数据集 fashion mnist是一个由10个类别图像组成的服装分类数据集,共包含60000张训练集图像和10000张测试集图像, 前者用于训练模型参数,后者用于评估模型性能。 2.1 数据集下载 先进行依赖库导入: %matplotlib inline …

图像识别应用技术

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

Akamai 分布式“云+边缘”,打造下一代数字化基座

当下,数字化基础设施正逐步向分布式部署演化,云计算与边缘计算正在成为两大技术支柱。Gartner 数据显示,云服务占 IT 整体支出比例连年上涨,在过去一年已增长至12.1%;IDC 报告显示,截至2021年已有超过500亿…

Grafana页面嵌入自建Web应用页面

目录 一、应用场景 二、实现方式 1、修改Grafana配置文件 2、获取监控页面url 3、隐藏左侧和顶部菜单 一、应用场景 需要将Grafana监控页面嵌入自建Web应用页面,使Grafana监控页面成为自建Web应用的一部分。 二、实现方式 总体思路:修改Grafana配…

C++之STL-list+模拟实现

目录 一、list的介绍和基本使用的方法 1.1 list的介绍 1.2 list的基本使用方法 1.2.1 构造方法 1.2.2 迭代器 1.2.3 容量相关的接口 1.2.4 增删查改的相关接口 1.3 关于list迭代器失效的问题 二、模拟实现list 2.1 节点类 2.2 迭代器类 2.3 主类list类 2.3.1 成员变…

多线程同步

1.多线程并发 1).多线程并发引例 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <pthread.h>int wg0; void *fun(void *arg) {for(int i0;i<1000;i){wg;printf("wg%d\n",wg);} } in…

tp6.0 rabbitmq死信队列

rabbitMq交换机&#xff0c;队列情况&#xff0c;先手动创建 1. 创建普通交换机exchange&#xff0c;普通队列order_queue_expire&#xff0c;队列设置属性&#xff1a; 消息过期时间&#xff1a;60000毫秒&#xff0c;过期绑定dead_exchange交换机&#xff0c;routing_key:de…

web前端学习笔记2

2. 网页穿上美丽外衣 2.0 代码地址 https://gitee.com/qiangge95243611/java118/tree/master/web/day02 2.1 什么是CSS CSS (Cascading Style Sheets,层叠样式表),是一种用来为结构化文档(如 HTML 文档或 XML 应用)添加样式(字体、间距和颜色等)的计算机语言,CSS 文…

文件系统学习

软连接&#xff1a;可以跨不同的磁盘块&#xff0c;创建出不同的inode节点 应连接&#xff1a;相同的inode节点&#xff0c;不同的文件名字记录在父亲节点目录中 分区(fdisk)&#xff0c;格式化(mkfs)&#xff0c;挂载(mount)&#xff0c;大于2T分区&#xff08;parted&#…

FSNotes for Mac v6.7.1中文激活版:强大的笔记管理工具

FSNotes for Mac是一款功能强大的文本处理与笔记管理工具&#xff0c;为Mac用户提供了一个直观、高效的笔记记录和整理平台。 FSNotes for Mac v6.7.1中文激活版下载 FSNotes支持Markdown语法&#xff0c;使用户能够轻松设置笔记格式并添加链接、图像等元素&#xff0c;实现笔记…

基于H.264的RTP打包中的组合封包以及分片封包结构图简介及抓包分析;FU-A FU-B STAP-A STAP-B简介;

H.264视频流的RTP封装类型分析&#xff1a; 前言&#xff1a; 1.RTP打包原则&#xff1a; RTP的包长度必须要小于MTU(最大传输单元)&#xff0c;IP协议中MTU的最大长度为1500字节。除去IP报头&#xff08;20字节&#xff09;、UDP报头&#xff08;8字节&#xff09;、RTP头&a…

C#编程模式之装饰模式

创作背景&#xff1a;朋友们&#xff0c;我们继续C#编程模式的学习&#xff0c;本文我们将一起探讨装饰模式。装饰模式也是一种结构型设计模式&#xff0c;它允许你通过在运行时向对象添加额外的功能&#xff0c;从而动态的修改对象的行为。装饰模式本质上还是继承的一种替换方…