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.mfbz.cn/a/584531.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第一个Cython程序-helloworld

Cython是Python的一个模块,可以将python语言“翻译”成C语言。 如何安装? python -m pip install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple/ 新建两个文件helloworld.pyx和setup.py。 helloworld.pyx print("hello world")setu…

【学习vue 3.x】(五)VueRouter路由与Vuex状态管理

文章目录 章节介绍本章学习目标 路由的基本搭建与嵌套路由模式vue路由的搭建嵌套路由模式 动态路由模式与编程式路由模式动态路由模式编程式路由 命名路由与命名视图与路由元信息命名路由命名视图路由元信息 路由传递参数的多种方式及应用场景路由传参 详解route对象与router对…

ubuntu开启message文件

环境:ubuntu 20.04 1、首先需要修改 /etc/rsyslog.d/50-default.conf 文件;源文件中message被注释,如下图: 2、打开注释: 3、重启服务 systemctl restart rsyslog.service 如此即可!

OFDM802.11a的FPGA实现(五)卷积编码器的FPGA实现与验证(含verilog代码和matlab代码)

目录 1.前言2.卷积编码2.1卷积编码基本概念2.2 802.11a卷积编码器2.3 卷积编码模块设计2.4 Matlab设计与ModelSim仿真验证 1.前言 前面一节完成了扰码器的FPGA设计与Matlab验证,这节继续对卷积编码器进行实现和验证。 2.卷积编码 2.1卷积编码基本概念 卷积码编码器…

Aiseesoft Data Recovery for Mac:专业数据恢复软件

Aiseesoft Data Recovery for Mac是一款高效且专业的数据恢复软件,专为Mac用户量身打造。 Aiseesoft Data Recovery for Mac v1.8.22激活版下载 无论是由于误删、格式化还是系统崩溃等原因导致的数据丢失,Aiseesoft都能帮助您快速找回。 它采用先进的扫描…

Windows下Git安装

目录 一、下载二、安装三、查看 Git 安装路径 一、下载 下载链接:https://git-scm.com/ 二、安装 双击安装包,按提示一步步进行操作: 三、查看 Git 安装路径 where git D:\Program Files\Git\cmd\git.exe

什么是DDoS攻击?怎么防御DDoS攻击?

在网络安全领域,DDoS攻击一直是热门话题,随着网络技术的不断发展和网络环境的复杂化演变,DDoS攻击变得愈加频繁、更具破坏性。根据2023年网络安全态势研判分析年度综合报告,全年全网网络层的DDoS攻击次数达2.51亿次!本…

卷积通用模型的剪枝、蒸馏---蒸馏篇--KD蒸馏(以deeplabv3+为例)

上篇文章介绍了剪枝篇,本文以上篇的剪枝模型为学生模型,以剪枝之前的模型为教师模型,进行KD逻辑蒸馏,之后会尝试特征蒸馏和关系蒸馏等。 一、KD逻辑蒸馏 1.1 大致过程 逻辑蒸馏,是基于分类问题设计的,因此非常适用于语义分割。模型最后会有一个softmax层,其输出值对应了…

React正式更新!开始学习React 19!

本文为原创文章,原文链接:J实验室,未经授权请勿转载 今年2月份,React 发布消息确认今年发布 v19 版本,尘封两年的版本号终于要更新了(详情点击:React 19 发布在即,抢先学习一下新特性…

x2600君正 ubi文件系统的编译和烧录

使用平台:君正x2600 ubi文件系统使用问题 1.ubi文件和ubifs文件 2 方法:mkfs.ubifs和ubinize两步打包ubi文件系统 mkfs.ubifs工具 mkfs.ubifs命令用于制作ubifs文件系统,命令示例如下: mkfs.ubifs -x lzo -m 2KiB -e 124KiB -c 3…

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

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

【软考高项】第十二章 项目质量管理

目录 12.1管理基础 12.1.1质量与项目质量 12.1.2质量管理 12.1.3质量管理标准体系 12.1.4管理新实践 12.2项目质量管理过程 12.2.1过程概述 12.2.2裁剪考虑因素 12.2.3敏捷与适应方法 12.3规划质量管理 12.3.1输入 12.3.2工具与技术 12.3.3输出 12.4管理质量 12…

最小K个数(力扣面试题17.14)

本文采用的是大堆排序求最小的K个值。需要有堆的数据结构基础哦。 代码展示: /*** Note: The returned array must be malloced, assume caller calls free().*/ void AdjustDown(int* parr,int n,int root)//向下调整 {int parentroot;int child parent*21;while…

opencv_23_高斯模糊

void ColorInvert::gaussian_blur(Mat& image) { Mat dst; GaussianBlur(image, dst, Size(0, 0), 15); // Size(2, 2), imshow("图像模糊2", dst); }

代码随想录算法训练营DAY42|C++动态规划Part4|0-1背包理论基础(一)、0-1背包理论基础之滚动数组(二)、416.分割等和子集

文章目录 0-1背包理论基础(一)前置知识01背包动态规划:01背包二维dp数组 CPP代码再论01背包的遍历顺序 0-1背包理论基础(二)一维dp数组如何初始化一维dp数组遍历顺序举例推导dp数组CPP代码 416.分割等和子集思路将题目抽象成0-1背包问题 CPP代码 0-1背包理论基础(一…

2013NOIP普及组真题 4. 车站分级

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1964 核心思想: 1、原文中提到 “如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠”,如果设停靠站为A&…

ansible-playbook离线升级centos内核

目录 概述实践ansible目录结构关键代码执行效果 结束 概述 内核离线包官网下载地址如下: 地址 实践 ansible目录结构 如对 ansible 不熟悉,离线包下载有问题,请至此地址下载,按本文操作可直接使用。 相关文章链接如下 文章地…

如何在iPhone上恢复出厂设置后恢复数据

你不想让这种情况发生,但它确实发生了。您必须将iPhone恢复出厂设置。当您的 iPhone 上出现软件问题且无法修复时,可能会发生这种情况。相反,在更新期间,或者您的iPhone遇到问题时,iPhone上的数据不再存在。 不过不用…

goget配置多个golang 运行环境

一台主机安装多个golang 运行环境 本环境 windows10 为 基础 mac linux也可以按照此方法操作 背景 开发不同的运维工具会用到不同版本的golang,但是开发者不能一直进行重装来处理 ,因此 需要一个工具进行golang版本的管理 go管理工具介绍 gvm (Go V…

android webview检测屏幕

1&#xff09;清单文件配置&#xff1a; 配置权限&#xff1a; <uses-permission android:name"android.permission.INTERNET" /> 注册activity&#xff1a; <activityandroid:name".TouchWebViewActivity"android:exported"true"&…
最新文章