【深大计算机系统(2)】实验一 实验环境配置与使用 附常用指令

news2024/9/22 5:26:51

目录

一、 实验目标:

二、实验环境与工件:

三、实验内容与步骤

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是编译后生成的可执行文件名。

*/

​​​​​​​

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

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

相关文章

亲测--linux下安装ffmpeg最新版本---详细教程

下载地址 Download FFmpeg 下载最新的https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.xz 上传到服务器 解压 tar xvf ffmpeg-7.0.1.tar.xz 编译 cd ffmpeg-7.0.1 ./configure --prefix=/usr/local/ffmpeg make && make install 报错: 解决:在后面加 跳过检测…

粉尘传感器助力面粉厂安全生产

在面粉加工行业中&#xff0c;粉尘问题一直是一个不容忽视的难题。从原料的破碎、研磨到成品的包装&#xff0c;整个生产流程中都会伴随着大量的粉尘产生。这些粉尘不仅影响生产环境&#xff0c;更对工作人员的健康、设备的安全运行以及环境保护构成严重威胁。因此&#xff0c;…

【Unity实战100例】Unity声音可视化多种显示效果

目录 一、技术背景 二、界面搭建 三、 实现 UIAudioVisualizer 基类 四、实现 AudioSampler 类 五、实现 IAudioSample 接口 六、实现MusicAudioVisualizer 七、实现 MicrophoneAudioManager 类 八、实现 MicrophoneAudioVisualizer 类 九、源码下载 Unity声音可视化四…

云计算数据中心(三)

目录 四、自动化管理&#xff08;一&#xff09;自动化管理的特征&#xff08;二&#xff09;自动化管理实现阶段&#xff08;三&#xff09;Facebook自动化管理 五、容灾备份&#xff08;一&#xff09;容灾系统的等级标准&#xff08;二&#xff09;容灾备份的关键技术&#…

基于图片中的表格检测与识别

1、项目介绍 本文将会使用Microsoft开源的表格检测模型table-transformer-detection来实现表格检测与入门。 以下将分三部分进行介绍&#xff1a; 表格检测&#xff1a;检测图片或PDF文件中的表格所在的区域表格结构识别&#xff1a;对于检测后的表格区域&#xff0c;再详细识…

Langchain[3]:Langchain架构演进与功能扩展:流式事件处理、事件过滤机制、回调传播策略及装饰器应用

Langchain[3]:Langchain架构演进与功能扩展&#xff1a;流式事件处理、事件过滤机制、回调传播策略及装饰器应用 1. Langchain的演变 v0.1: 初始版本&#xff0c;包含基本功能。 从0.1~0.2完成的特性&#xff1a; 通过事件流 API 提供更好的流式支持。标准化工具调用支持Tool…

全国区块链职业技能大赛国赛考题前端功能开发

任务3-1:区块链应用前端功能开发 1.请基于前端系统的开发模板,在登录组件login.js、组件管理文件components.js中添加对应的逻辑代码,实现对前端的角色选择功能,并测试功能完整性,示例页面如下: 具体要求如下: (1)有明确的提示,提示用户选择角色; (2)用户可看…

Java中静态代理和动态代理介绍和使用

前言 在Java中&#xff0c;代理模式是一种常用的设计模式&#xff0c;用于为其他对象提供一种代理以控制对这个对象的访问。代理模式主要有两种实现方式&#xff1a;静态代理和动态代理。 一、静态代理 静态代理是由程序员手动创建或指定代理类&#xff0c;代理类在程序运行…

【C语言】详解结构体(下)(位段)

文章目录 前言1. 位段的含义2. 位段的声明3. 位段的内存分配&#xff08;重点&#xff09;3.1 存储方向的问题3.2 剩余空间利用的问题 4. 位段的跨平台问题5. 位段的应用6. 总结 前言 相信大部分的读者在学校或者在自学时结构体的知识时&#xff0c;可能很少会听到甚至就根本没…

sip代理服务器、SIP用户代理服务器、sip服务器的区别和联系

一&#xff0e;SIP代理服务器&#xff08;SIP Proxy Server&#xff09;和SIP用户代理服务器&#xff08;SIP User Agent Server&#xff0c;简称SIP UAS&#xff09;的区别和联系。 1. 区别 1&#xff09;功能定位 SIP代理服务器&#xff1a;主要负责将SIP请求消息从发起方…

VBA技术资料MF175:利用文本框和列表框实现多列数据录入

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

学习周报:文献阅读+水动力学方程推导

目录 摘要 Abstract 文献阅读&#xff1a;物理信息神经网络学习自由表面流 文献摘要 讨论|结论 预备知识 浅水方程SWE&#xff08;Shallow Water Equations&#xff09; 质量守恒方程&#xff1a; 动量守恒方程&#xff1a; Godunov通量法&#xff1a; 基本原理&…

分布式会话拦截器

1.分布式会话拦截器-构建拦截器 背景&#xff1a;对于不同的用户进行权限拦截(基于token的判断) 实现过程&#xff1a;在api下构建包以及相关的文件&#xff0c;创建UserTokenInterceptor,实现implements handlerInterceptor.重写三种主要方法。 preHandle postHandle afterCo…

MongoDB文档整理

过往mongodb文档&#xff1a; https://blog.csdn.net/qq_46921028/article/details/123361633https://blog.csdn.net/qq_46921028/article/details/131136935https://blog.csdn.net/qq_46921028/article/details/139247847 1. MongoDB前瞻 1、MongoDB概述&#xff1a; MongoDB是…

【Rust日报】在 Linux 文件系统中使用 Rust 的讨论

SIMD 加速的迭代器 单指令流多数据流&#xff08;Single Instruction Multiple Data&#xff0c;缩写&#xff1a;SIMD&#xff09;是一种采用一个控制器来控制多个处理器&#xff0c;同时对一组数据&#xff08;又称"数据向量"&#xff09;中的每一个分别执行相同的…

PDF压缩软件电脑版 电脑pdf压缩怎么压缩文件

在数字化时代&#xff0c;pdf文件因其良好的兼容性和稳定性&#xff0c;已成为工作与生活中不可或缺的文件格式。然而&#xff0c;随着内容的增多&#xff0c;pdf文件的体积也随之增大&#xff0c;给文件的传输和存储带来了一定的困扰。本文将为你详细介绍如何在电脑上压缩pdf文…

【手撕数据结构】拿捏单链表

目录 单链表介绍链表的初始化打印链表增加节点尾插头插再给定位置之后插入在给定位置之前插入 删除节点尾删头删删除给定位置的节点删除给定位置之后的节点 查找节点 单链表介绍 单链表也叫做无头单向非循环链表&#xff0c;链表也是一种线性结构。他在逻辑结构上一定连续&…

昇思25天学习打卡营第10天 | FCN图像语义分割

学习心得&#xff1a;全卷积网络&#xff08;FCN&#xff09;在图像语义分割中的应用 图像语义分割作为计算机视觉领域的一个重要分支&#xff0c;对于理解图像内容提供了非常关键的技术支持。通过学习并实践全卷积网络&#xff08;FCN&#xff09;在图像语义分割的应用&#…

2024-07-19 Unity插件 Odin Inspector9 —— Validation Attributes

文章目录 1 说明2 验证特性2.1 AssetsOnly / SceneObjectsOnly2.2 ChildGameObjectsOnly2.3 DisallowModificationsIn2.4 FilePath2.5 FolderPath2.6 MaxValue / MinValue2.7 MinMaxSlider2.8 PropertyRange2.9 Required2.10 RequiredIn2.11 RequiredListLength2.12 ValidateIn…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(八)-无人机探测与避让(DAA)机制

目录 引言 5.6 探测与避让&#xff08;DAA&#xff09;机制 5.6.1 基于PC5的探测与避让&#xff08;DAA&#xff09;机制 引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Airc…