61.linux系统上c程序的编译与调试

news2024/11/17 0:37:29

       

目录

1.检查GCC是否已经安装:​编辑

2.使用包管理器来安装gcc:

3.c程序执行需要经过四个步骤

4.make和makefile

5.gdb调试 

基础调试命令 

一些示例 


        对于在Linux系统上编译和调试C程序,首先,需要确保已经安装了合适的编译器。在大多数Linux发行版中,常用的C编译器是GCC。

1.检查GCC是否已经安装:

这里提供了有关系统上安装的 GCC(GNU 编译器集合)版本的信息。输出显示我的系统上安装了 GCC 版本 9.4.0,而这是在 Ubuntu 20.04.1 上。 

2.使用包管理器来安装gcc:

如果GCC未安装,您可以使用包管理器来安装它。例如,在Ubuntu上可以使用以下命令: 

sudo apt-get install build-essential

3.c程序执行需要经过四个步骤

(1) 预编译 :gcc -E main.c -o main.i
(2) 编译:  gcc -S main.i -o main.s
(3) 汇编:  gcc -c main.s -o main.o
(4) 链接:  gcc main.o -o main

也可以一步编译gcc -o main main.c 

4.make和makefile

管理工程 实现自动化编译 (和 vs 比较)示例:
对 main.c add.c max.c 三个文件进行编译(注意: gcc 前面必须是 table 键缩进,或者在上一行末尾敲换行,自动缩进到table键位上)
注:文件名必须是makefile

makefile文件

 main.c文件
extern 关键字,链接其他文件

add.c文件

 

max.c文件

 

执行make命令 

执行make clean命令 

 

5.gdb调试 

  • ​ gcc -o main main.c -g 切换debug
  •  gdb main 启动调试
  • (gdb)出现 启动调试成功 ,可以输入命令

此时就进入了debug模式下

基础调试命令 

1. l //显示 main 函数所在的文件的源代码
2. list 文件名:num //显示 filename 文件 num 行上下的源代码
3. b 行号 //给指定行添加断点
4. b 函数名 //给指点函数的第一有效行添加一个断点
5. info break //显示断点信息
6. delete 断点号 //删除指定断点
7. disable 断点号 //将断点设定为无效的,不加断点号,将所有断点设置为无效
8. enable 断点号 //将断点设定为有效的,不加断点号,将所有断点设置为有效
9. r(run) //运行程序
10. n(next) //单步执行
11. c ( continue) //继续执行,直接执行到下一个断点处
12. s //进入将要被调用的函数中执行
13. finish //跳出函数

14. q //退出调试
15. p val //打印变量 val 的值
16. p &val //打印变量 val 的地址
17. p a+b //打印表达式的值
18. p arr(数组名) //打印数组所有元素的值
19. p *parr@len //用指向数组的指针打印数组所有元素的值
20. display //自动显示,参数和 p 命令一样
21. info display //显示自动显示信息
22. undisplay + 编号 //删除指定的自动显示
23. ptype val //显示变量类型
24. bt //显示函数调用栈

一些示例 

 

 

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

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

相关文章

均匀性校准积分球光源

随着LED半导体照明技术的发展和LED半导体照明产业的不断壮大,合理有效的LED 灯具或芯片的光度、色度检测方法是支撑半导体照明产业发展的重要技术基础,同时也 为积分球内部照明产品的提升提供了重要的技术保障。 在物理世界中,存在着各种各样…

elementui tree 层级过多时,高亮状态无法选满整行

问题: 如上图所示,官方的tree组件,在层级很多时 elementui -tree 的高亮状态并没有选中整行。 (衍生库 vue-easy-tree 也会出现此问题) 原因: (没有查看源码,只是根据dom简单定位…

“亚马逊云科技创业加速器”首期聚焦AI,促进入营企业业务发展

生成式AI技术飞速发展,颠覆着人们的生活,正在掀起新一轮的科技革命。在生成式AI的浪潮中,亚马逊云科技旨在为中国的优秀初创企业提供全方位支持,助其抢占先机。 在6月底举办的亚马逊云科技中国峰会上,亚马逊云科技联合…

SingleCellExperiment and SummarizedExperiment

这里的两个是不一样的 http://home.cc.umanitoba.ca/~psgendb/birchhomedir/R/x86_64-redhat-linux-gnu-library/3.4/SummarizedExperiment/html/SummarizedExperiment-class.html创建SummarizedExperiment nrows <- 200; ncols <- 6 counts <- matrix(runif(nrows …

什么是模块化编程?如何在JavaScript中实现模块化?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 模块化编程⭐ CommonJS 模块导出模块导入模块 ⭐ ES6 模块导出模块导入模块 ⭐ AMD 和 RequireJSAMD 模块 ⭐ UMD&#xff08;Universal Module Definition&#xff09;⭐ 小结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开…

万物流动 万物永驻 ——C++ Core Guidelines的流动哲学

众所周知&#xff0c;C 是一门自由的语言&#xff0c;语言的设计哲学之一就是赋予程序员极大的自由度和灵活性&#xff0c;因此&#xff0c;使用C 完成一个任务时&#xff0c;不同的程序员往往会有不同的实现方法&#xff0c;这真正阐释了什么叫条条大路通罗马。不过&#xff0…

【SaaS】你知道什么是SaaS吗?

文章目录 前言一、云服务架构的三个概念1.1 PaaS1.2 IaaS1.3 SaaS 二、SaaS系统的两大特征三、SaaS服务与传统服务、互联网服务的区别3.1 SaaS服务3.2 传统软件3.3 互联网应用供应商 四、B2B2C五、SaaS系统的分类5.1 业务型SaaS5.2 效率型SaaS5.3 混合型SaaS 六、如何SaaS化七、…

读SQL学习指南(第3版)笔记07_分组和子查询

1. 数据通常以数据库用户所需的最低层级的粒度存储 2. 分组 2.1. 隐式分组 2.1.1. mysql -&#xff1e; SELECT MAX(amount) max_amt,-&#xff1e; MIN(amount) min_amt,-&#xff1e; AVG(amount) avg_amt,-&#xff1e; SUM(amount) tot_amt,-&#xff1e; COUN…

电脑桌面备忘录怎么设置?如何在电脑上同步使用手机备忘录?

在工作中&#xff0c;上班族们需要经常记下一些重要的事项&#xff0c;如开会时间、工作进度、待办事项等等。这些信息对于他们来说至关重要&#xff0c;因为一旦遗忘或错过了这些事项&#xff0c;就可能造成不必要的麻烦和负面影响。因此&#xff0c;一款便捷的备忘录软件成为…

ssm+vue高校实验室管理系统源码和论文

ssmvue高校实验室管理系统源码和论文081 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 一&#xff0e;毕业设计的内容 本高校实验室管理系统采用Java语言、MySQL数据库&#xff0c;基于SSM框架进行开发设计&…

Fooocus:一个简单且功能强大的Stable Diffusion webUI

Stable Diffusion是一个强大的图像生成AI模型&#xff0c;但它通常需要大量调整和提示工程。Fooocus的目标是改变这种状况。 Fooocus的创始人Lvmin Zhang&#xff08;也是 ControlNet论文的作者&#xff09;将这个项目描述为对“Stable Diffusion”和“ Midjourney”设计的重新…

【MySQL】MySQL里的用户账户和角色是什么?如何管理?

用户&#xff08;user&#xff09;验证和授权创建用户账户连接服务器查看用户账户设置 角色&#xff08;role&#xff09;创建角色 操作用户帐户和角色重命名删除 感谢 &#x1f496; 用户&#xff08;user&#xff09; 在MySQL中&#xff0c;用户是数据库访问的主要实体。每个…

新亮点!安防视频监控/视频集中存储/云存储平台EasyCVR平台六分屏功能展示

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Python爬虫(十六)_JSON模块与JsonPath

数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;它是的人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景&#xff0c;比如网站前台与后台之间的数据交互。 JSON和XML的比较可谓不相…

基于单片机的智能小车设计

一、项目介绍 随着科技的发展&#xff0c;智能机器人在日常生活中的应用越来越广泛。智能小车作为智能机器人的一种&#xff0c;具有便携性和多功能的特点&#xff0c;在教育、娱乐和工业等领域得到了广泛关注和应用。智能小车可以通过远程控制实现各种动作&#xff0c;如前进…

Matlab图像处理-水平镜像

镜像变换 镜像变换又常称为对称变换&#xff0c;它可以分为水平对称、垂直对称等多种变换。对称变换后&#xff0c;图像的宽和高不变。 图像的镜像分为两种垂直镜像和水平镜像。 水平镜像即将图像左半部分和右半部分以图像竖直中轴线为中心轴进行对换&#xff1b; 竖直镜像…

精读《算法题 - 地下城游戏》

今天我们看一道 leetcode hard 难度题目&#xff1a;地下城游戏。 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士…

LeetCode--HOT100题(45)

目录 题目描述&#xff1a;199. 二叉树的右视图&#xff08;中等&#xff09;题目接口解题思路 PS: 题目描述&#xff1a;199. 二叉树的右视图&#xff08;中等&#xff09; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序…

视频汇聚/视频云存储/视频监控管理平台EasyCVR视频平台添加萤火云设备的具体操作步骤

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

【TI毫米波雷达笔记】毫米波雷达芯片结构框架解析(以IWR6843AOP为例)

【TI毫米波雷达笔记】毫米波雷达芯片结构框架解析&#xff08;以IWR6843AOP为例&#xff09; 代码解读&#xff1a; blog.csdn.net/weixin_53403301/article/details/132565590芯片框架 IWR6843AOP可以分成三个主要部分及多个外设 BSS&#xff1a;雷达前端部分 MSS&#xff…