【深大计算机系统(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 的定义…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...