【深大计算机系统(2)】实验一 实验环境配置与使用 附常用指令
目录
一、 实验目标:
二、实验环境与工件:
三、实验内容与步骤
1. 学习并熟悉Linux基本操作,按照要求创建用户。(30分)
2.新建用户主目录下创建子目录:gdbdebug,并进入gdbdebug子目录。将过程和结果截图。(10分)
3. 用vi编辑以下两个文件并编译和运行,截图(30分)
4. 调试并修正reverse.c文件。(30分)
四、实验结果
五、实验总结与体会
附:虚拟机常用指令
写在前面:
上交的实验报告需要包含账户的姓名全拼以及学号,本报告的相应部分已经打码处理,请在自己的环境中完成实验!
一、 实验目标:
1. 了解Linux操作系统及其常用命令
2. 掌握编译工具gcc的基本用法
3. 掌握使用gdb进行程序调试
二、实验环境与工件:
1.个人电脑
2. Linux操作系统
3. gcc编译器
4. gdb调试工具
三、实验内容与步骤
1. 学习并熟悉Linux基本操作,按照要求创建用户。(30分)
1.1. 首先使用命令$ su切换为超级用户(此处的密码不会显示,照常输入并回车即可)
图:切换为超级用户
1.2. 使用命令# adduser 姓名_学号 创建新用户, 设置新建用户的密码,此处由于最开始的用户名就已经设置正确,故提示用户已经存在。
图:尝试创建新用户
1.3. 注销当前用户,并以新建的用户身份登录,登录后输入命令$ whoami,并进行截图。
2.新建用户主目录下创建子目录:gdbdebug,并进入gdbdebug子目录。将过程和结果截图。(10分)
图:尝试创建gdbdebug子目录
由图可知,由于目录已经存在,无法执行再次创建命令。
接下来使用指令$ ls查看所有已存在的目录,可见gdbdebug目录已存在。再使用指令$ cd gdbdebug进入子目录
图:进入gdbdebug子目录
3. 用vi编辑以下两个文件并编译和运行,截图(30分)
3.1. 编辑reverse.h文件:
输入命令$ vi reverse.h创建reverse.h文件,编辑完成后按“esc”退出,并输入“:wq”用于保存代码。
图:reverse.h文件的创建与编辑
3.2. 编辑reverse.c文件
输入命令$ vi reverse.c创建reverse.c文件,并写入要求内容:
图:编辑reverse.c文件
接着退出编辑模式并保存。
3.3. 编译并修改代码:
输入指令 $ gcc -Wall reverse.c -o reverse 对reverse.c进行编译,接着出现报错:
图:编译报错
接下来对错误进行分析与解决:
①strlen()函数位于<string.h>头文件中,而代码中并没有包含,需要在头文件部分加上#include <string.h>。
②在使用scanf()函数时,不需要为str添加&,因为str已经是一个数组,它本身就是一个地址。去掉&符号即可。
③原先给出的指令有误,应该是由于符号错误引起的。
将以上错误修改,再次进行编译,结果如下:
图:第二次编译结果
警告来自于没有返回值的int型函数,加上语句return 0;即可。
再次进行编译,发现没有报错或者警告信息,说明此阶段任务完成。
图:编译成功
3.4. 运行程序:
输入命令$./reverse运行编译完成的代码:
图:运行结果
4. 调试并修正reverse.c文件。(30分)
4.1. 编译时加入调试信息
使用命令:gcc -g reverse.c -o reverse1进行编译,同时生成调试信息并且输出一个名为reverse1的可执行文件。
4.2. 启用GDB调试
输入命令:gdb ./reverse1
图:调试信息
4.3. 键入list,查看源代码并根据行号、函数名设置断点:
图:查看代码以及对应行号
图:设置断点并查看断点信息
4.4. 观察变量值,并作分析,推测错误:
图:调试过程(前半)
图:调试过程(后半)
由图可知,在运行第15行语句时,变量str出现了错误的改变,语句*str + len - i – 1并没有正确表示目的位置的字符,而是表示了错误位置的字符经过加减后得到的字符,应当修改为(*str + len - i – 1),同理,14行的*str + i应当修改为(*str + i)。
4.5. 修正程序并运行:
根据以上分析,重新打开代码文件,对相应部分作出修改,结果如下:
图:修改后的代码
修改后重新进行编译与运行,可见结果正确:
图:运行结果
四、实验结果
运行修改完成后的代码,得到的正确结果如图所示:
图:运行结果
五、实验总结与体会
实验总结:本实验首先完成了VMware软件的下载与安装,在软件中配置了ubuntu虚拟机环境,并在此Linux虚拟机环境中配置了gcc编译器。
在完成以上基础环境的配置后,完成了新建账户、新建目录、新建代码文件并对其进行编译的操作。接着对编译结果进行改错、实现代码的运行。然后进行了断点的设置、代码的调试与修改,并最终得到了正确的结果。
实验体会:本次实验是第一次使用Linux环境,期间遇到了不少环境操作上的问题;在代码相关操作上与熟悉的Windows环境也有诸多不同。经过了查阅资料与相关知识的学习,我对Linux环境有了一定的了解,学会了初步的操作,并能完成此环境下c++的编程任务,解决了上述问题。
尾注
本实验是本课程的第一次实验,难度较低。
如有疑问欢迎讨论,如有好的建议与意见欢迎提出,如有发现错误则恳请指正!
附:虚拟机常用指令
实验一:/*首先需要进入root:su直接输入密码(不会有显示)进入gdbdebug目录:cd gdbdebug打开reverse.h:vi reverse.h打开reverse.c:vi reverse.c编译reverse.c(*):gcc -Wall reverse.c -o reverse运行:./reverse编译时加入调试信息:gcc -g reverse.c -o reverse1启用GDB调试:gdb ./reverse1调试语句:设置断点:break 行号删除断点:delete行号删除所有断点:delete查看所有断点信息:info break开始运行:run或r继续运行:continue或c结束运行:quit或q(*)解释gcc -Wall reverse.c -o reverse :-Wall:意为"开启所有警告"。reverse.c:是要编译文件。-o reverse:-o是指定输出文件的选项,reverse是编译后生成的可执行文件名。*/
相关文章:
【深大计算机系统(2)】实验一 实验环境配置与使用 附常用指令
目录 一、 实验目标: 二、实验环境与工件: 三、实验内容与步骤 1. 学习并熟悉Linux基本操作,按照要求创建用户。(30分) 2.新建用户主目录下创建子目录:gdbdebug,并进入gdbdebug子目录。将过程和…...
目标检测经典模型之YOLOV5-detect.py源码解析(持续更新)
detect文件框架 一、导入模块包二、定义run函数1. 归一化操作代码解析uint8精度转换归一化 2. 扩展维度为什么扩展维度?代码解释 3. 对检测结果类别计数检查是否有检测结果统计每个类别的出现次数构建描述性字符串 三、定义命令行参数四、主函数 本帖是YOLOV5推理部…...
PF4J+SpringBoot
plugin-common pom.xml相关配置 <groupId>pub.qingyun</groupId> <artifactId>plugin-common</artifactId> <version>0.0.1-SNAPSHOT</version> <description>插件配置类</description><dependency><groupId>or…...
设计模式11-原型模式
设计模式11-原型模式 写在前面对象创建模式典型模式原型模式动机结构代码推导应用特点要点总结 原型模式与工厂方法模式对比工厂方法模式原型模式什么时候用什么模式 写在前面 对象创建模式 通过对象创建模式绕开动态内存分配来避免创建过程中所导致的耦合过紧的问题。从而支…...
Tomcat长连接源码解析
长连接: 客户端发送Http请求至服务端,请求发送完之后socket连接不断开,可以继续接收下一个Http请求并且解析返回。接手并解析这些Http请求的时候socket连接不断开,这种过程被称为长连接。 需要注意的点就在于,在满足什么条件的情况…...
C++编程:实现一个跨平台安全的定时器Timer模块
文章目录 0. 概要1. 设计目标2. SafeTimer 类的实现2.1 头文件 safe_timer.h源文件 safe_timer.cpp 3. 工作流程图4. 单元测试 0. 概要 对于C应用编程,定时器模块是一个至关重要的组件。为了确保系统的可靠性和功能安全,我们需要设计一个高效、稳定的定…...
PyTorch的自动微分模块【含梯度基本数学原理详解】
文章目录 1、简介1.1、基本概念1.2、基本原理1.2.1、自动微分1.2.2、梯度1.2.3、梯度求导1.2.4、梯度下降法1.2.5、张量梯度举例 1.3、Autograd的高级功能 2、梯度基本计算2.1、单标量梯度2.2、单向量梯度的计算2.3、多标量梯度计算2.4、多向量梯度计算 3、控制梯度计算4、累计…...
AI 绘画|Midjourney设计Logo提示词
你是否已经看过许多别人分享的 MJ 咒语,却仍无法按照自己的想法画图?通过学习 MJ 的提示词逻辑后,你将能够更好地理解并创作自己的“咒语”。本文将详细拆解使用 MJ 设计 Logo 的逻辑,让你在阅读后即可轻松上手,制作出…...
LeNet实验 四分类 与 四分类变为多个二分类
目录 1. 划分二分类 2. 训练独立的二分类模型 3. 二分类预测结果代码 4. 二分类预测结果 5 改进训练模型 6 优化后 预测结果代码 7 优化后预测结果 8 训练四分类模型 9 预测结果代码 10 四分类结果识别 1. 划分二分类 可以根据不同的类别进行多个划分,以…...
【BUG】已解决:java.lang.reflect.InvocationTargetException
已解决:java.lang.reflect.InvocationTargetException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发…...
配置kali 的apt命令在线安装包的源为国内源
目录 一、安装VMware Tools 二、配置apt国内源 一、安装VMware Tools 点击安装 VMware Tools 后,会加载一个虚拟光驱,里面包含 VMware Tools 的安装包 鼠标右键单击 VMware Tools 的安装包,点击复制到 点击 主目录,再点击选择…...
JAVA 异步编程(线程安全)二
1、线程安全 线程安全是指你的代码所在的进程中有多个线程同时运行,而这些线程可能会同时运行这段代码,如果每次运行的代码结果和单线程运行的结果是一样的,且其他变量的值和预期的也是一样的,那么就是线程安全的。 一个类或者程序…...
Golang | Leetcode Golang题解之第260题只出现一次的数字III
题目: 题解: func singleNumber(nums []int) []int {xorSum : 0for _, num : range nums {xorSum ^ num}lsb : xorSum & -xorSumtype1, type2 : 0, 0for _, num : range nums {if num&lsb > 0 {type1 ^ num} else {type2 ^ num}}return []in…...
IDEA自带的Maven 3.9.x无法刷新http nexus私服
问题: 自建的私服,配置了域名,使用http协议,在IDEA中或本地Maven 3.9.x会出现报错,提示http被blocked,原因是Maven 3.8.1开始,Maven默认禁止使用HTTP仓库地址,只允许使用HTTPS仓库地…...
56、本地数据库迁移到阿里云
现有需求,本地数据库迁移到阿里云上。 库名xy102表 test01test02test01 test023条数据。1、登录阿里云界面创建免费试用ECS实列。 阿里云登录页 (aliyun.com)](https://account.aliyun.com/login/login.htm?oauth_callbackhttps%3A%2F%2Fusercenter2.aliyun.com%…...
新时代多目标优化【数学建模】领域的极致探索——数学规划模型
目录 例1 1.问题重述 2.基本模型 变量定义: 目标函数: 约束条件: 3.模型分析与假设 4.模型求解 5.LINGO代码实现 6.结果解释 编辑 7.敏感性分析 8.结果解释 例2 奶制品的销售计划 1.问题重述 编辑 2.基本模型 3.模…...
单例模式详解
文章目录 一、概述1.单例模式2.单例模式的特点3.单例模式的实现方法 二、单例模式的实现1. 饿汉式2. 懒汉式3. 双重校验锁4. 静态内部类5. 枚举 三、总结 一、概述 1.单例模式 单例模式(Singleton Pattern)是一种创建型设计模式,确保一个类…...
WebGIS主流的客户端框架比较|OpenLayers|Leaflet|Cesium
实现 WebGIS 应用的主流前端框架主要包括 OpenLayers、Leaflet、Mapbox GL JS 和 Cesium 等。每个框架都有其独特的功能和优势,适合不同的应用场景。 WebGIS主流前端框架的优缺点 前 端 框架优点缺点OpenLayers较重量级的开源库,二维GIS功能最丰富全面…...
【LabVIEW作业篇 - 2】:分数判断、按钮控制while循环暂停、单击按钮获取book文本
文章目录 分数判断按钮控制while循环暂停按钮控制单个while循环暂停 按钮控制多个while循环暂停单击按钮获取book文本 分数判断 限定整型数值输入控件值得输入范围,范围在0-100之间,判断整型数值输入控件的输入值。 输入范围在0-59之间,显示…...
Kafka架构详解之分区Partition
目录 一、简介二、架构三、分区Partition1.分区概念2.Offsets(偏移量)和消息的顺序3.分区如何为Kafka提供扩展能力4.producer写入策略5.consumer消费机制 一、简介 Apache Kafka 是分布式发布 - 订阅消息系统,在 kafka 官网上对 kafka 的定义…...
SSM之Mybatis
SSM之Mybatis 一、MyBatis简介1、MyBatis特性2、MyBatis的下载3、MyBatis和其他持久化层技术对比 二、MyBatis框架搭建三、MyBatis基础功能1、MyBatis核心配置文件2、MyBatis映射文件3、MyBatis实现增删改查4、MyBatis获取参数值的两种方式5、MyBatis查询功能6、MyBatis自定义映…...
Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)
Python list comprehension {列表推导式 - 列表解析式 - 列表生成式} 1. Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)2. Example3. ExampleReferences Python 中的列表解析式并不是用来解决全新的问题,只是为解决已有问题提供新的语法。 列…...
2024年7月12日理发记录
上周五天气还算好,不太热,晚上下班打车回家后,将目的地设置成日常去的那个理发店。 下车走到门口,熟悉的托尼帅哥正在抽烟,他一眼看到了我,马上掐灭烟头,从怀里拿出口香糖,咀嚼起来&…...
几种常用排序算法
1 基本概念 排序是处理数据的一种最常见的操作,所谓排序就是将数据按某字段规律排列,所谓的字段就是数据节点的其中一个属性。比如一个班级的学生,其字段就有学号、姓名、班级、分数等等,我们既可以针对学号排序,也可…...
Spring3(代理模式 Spring1案例补充 Aop 面试题)
一、代理模式 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能,这种类型的设计模式属于结构型模式。 代理模式通过引入一个代理对象来控制对原对象的访问。代理对象在客户端和目标对象之间充当中介,负责将客户端…...
Github报错:Kex_exchange_identification: Connection closed by remote host
文章目录 1. 背景介绍2. 排查和解决方案 1. 背景介绍 Github提交或者拉取代码时,报错如下: Kex_exchange_identification: Connection closed by remote host fatal: Could not read from remote repository.Please make sure you have the correct ac…...
LabVIEW在CRIO中串口通讯数据异常问题
排查与解决步骤 检查硬件连接: 确保CRIO的串口模块正确连接,并且电缆无损坏。 确认串口模块在CRIO中被正确识别和配置。 验证串口配置: 在LabVIEW项目中,检查CRIO目标下的串口配置,确保波特率、数据位、停止位和校验…...
ALTERA芯片解密FPGA、CPLD、PLD芯片解密解密
Altera是世界一流的FPGA、CPLD和ASIC半导体生产商,所提供的解决方案与传统DSP、ASSP和ASIC解决方案相比,缩短了产品面市时间,提高了性能和效能,降低了系统成本。针对Altera芯片解密,益臻芯片解密中心经过多年的芯片解…...
[RK3588-Android12] 关于如何取消usb-typec的pd充电功能
问题描述 RK3588取消usb-typec的pd充电功能 解决方案: 在dts中fusb302节点下usb_con: connector子节点下添加如下熟悉: 打上如下2个补丁 diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index c8a4e57c9f9b..173f8cb7…...
分布式 I/O 系统 BL200 Modbus TCP 耦合器
BL200 耦合器是一个数据采集和控制系统,基于强大的 32 位微处理器设计,采用 Linux 操作系统,支持 Modbus 协议,可以快速接入现场 PLC、SCADA 以及 ERP 系统, 内置逻辑控制、边缘计算应用,适用于 IIoT 和工业…...
招聘网站怎么做seo/seo搜索引擎优化书籍
选择“项目”菜单->项目属性->配置属性->常规->字符集,改为“未设置”即可。 <div class"person-messagebox"><div class"left-message"><a href"https://blog.csdn.net/hellowording"><img src&qu…...
如何建网站教程/郑州最好的建站公司
说明:蓝色命令名称浅绿命令参数浅蓝选项紫色目录系统环境:CentOS 5.5 x86_64python版本:Python 2.7.3最近很多网站被屏蔽了,感觉很不方便,研究研究了paramiko的代码写了一个小的代理工具。(bug很多改进中&…...
作文网站源码/百度的人工客服
近日荣耀手机CEO赵明在对于荣耀手机是否采用鸿蒙系统一事,做出了回应“荣耀会持续关注鸿蒙生态的发展,并且从消费者体验的角度选择最好的产品和解决方案”,媒体分析认为这意味着荣耀手机暂时不会考虑采用鸿蒙系统,而技术成熟、生态…...
wordpress搜索小工具/lol今日赛事直播
需求:点击某个标签,紧随其后的ul列表展开或者关闭并有transition效果。 难点:ul 里面的 li 数量未知,ul 高度不定,需要获取 li 数量乘以 li 高度然后计算出 ul 高度。 直接上代码: // 属性型指令࿰…...
政府网网站一般谁做的/济南最新消息今天
ylbtech-Arithmetic:Console-算法-求0—7所能组成的奇数个数1.A,Demo(案例)【程序83】题目:求0—7所能组成的奇数个数。1.程序分析: 1.B,Solution(解决方案) 【不是明白是如何构思的】using System;namespace ConsoleApplication1…...
怎么做网站滑动图片部分h5/免费做网站网站的软件
https://zhidao.baidu.com/question/1494951482361210539.html转载于:https://www.cnblogs.com/SEC-fsq/p/7602426.html...