【深大计算机系统(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是编译后生成的可执行文件名。*/

​​​​​​​

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

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

相关文章

Golang | Leetcode Golang题解之第241题为运算表达式设计优先级

题目&#xff1a; 题解&#xff1a; const addition, subtraction, multiplication -1, -2, -3func diffWaysToCompute(expression string) []int {ops : []int{}for i, n : 0, len(expression); i < n; {if unicode.IsDigit(rune(expression[i])) {x : 0for ; i < n &…

C语言——详解结构体内字符型数据定义与初始化

在C语言中&#xff0c;结构体内的字符型数据可以通过多种方式进行定义&#xff0c;并且每种定义方式都有其对应的初始化方法。这些定义方式包括直接定义字符数组、使用字符指针以及结合结构体的不同定义风格。理解这些定义方式及其初始化方法对于编写高效、可维护的C语言程序至…

leetcode日记(47)螺旋矩阵Ⅱ

这题思路不难&#xff0c;就是找规律太难了。 我首先的思路是一行一行来&#xff0c;根据规律填入下一行的数组&#xff0c;第i行是由前i个数字&#xff08;n-2*i&#xff09;个增序数列后i个数字组成&#xff0c;后来觉得太难找规律了就换了一种思路。 思路大致是先计算出需…

googleTest 源码主线框架性分析

TDD&#xff0c;测试驱动开发&#xff0c;英文全称Test-Driven Development&#xff0c;简称TDD&#xff0c;是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码&#xff0c;然后只编写使测试通过的功能代码&#xff0c;通过测试来推…

Apache Commons技术详解

文章目录 简介官网链接原理基础使用Commons LangCommons Collections 高级使用Commons IOCommons Math 优缺点优点缺点 总结 简介 Apache Commons 是 Apache 软件基金会下的一个项目&#xff0c;旨在提供可重用的Java组件。这些组件覆盖了广泛的编程任务&#xff0c;从字符串处…

Vue路由守卫详解及其应用场景分析

随着前端技术的不断发展,vue作为一款开发框架也越来越受到开发者们的欢迎。而vue的路由机制也是vue框架中不可或缺的一部分。路由系统能够帮助开发人员构建复杂的单页应用,同时也提供了一种灵活的方式来管理页面状态和用户导航。在这种情况下,vue路由守卫便成为一个必须要掌…

《刚毕业的计算机大学生如何找到满意工作》

《刚毕业的计算机大学生如何找到满意工作》 对于刚刚毕业的计算机专业大学生来说&#xff0c;踏入职场、找到一份满意的工作是人生的一个重要转折点。然而&#xff0c;在竞争激烈的就业市场中&#xff0c;如何才能脱颖而出&#xff0c;实现自己的职业目标呢&#xff1f;以下是…

如何看待LabVIEW数据清洗的重要性?

数据清洗&#xff0c;即对原始数据进行预处理和整理&#xff0c;是数据分析过程中必不可少的一步。它的主要目的是提高数据的质量&#xff0c;确保后续数据分析和处理的准确性和可靠性。在使用LabVIEW进行数据采集和分析时&#xff0c;数据清洗的重要性体现在以下几个方面&…

React——useEffect和自定义useUpdateEffect

useEffect 是React的一个内置Hook&#xff0c;用于在组件渲染后执行副作用&#xff08;例如数据获取、订阅或手动更改DOM&#xff09;。它将在第一次渲染后和每次更新后都会执行。 useEffect(() > {// 这里的代码将在组件挂载和更新时执行。 }, [dependencies]); // depend…

go语言day16 runtime包 临界资源 sync包

深入理解Java虚拟机到底是什么_java虚拟机是什么-CSDN博客 Golang-100-Days/Day16-20(Go语言基础进阶)/day17_Go语言并发Goroutine.md at master rubyhan1314/Golang-100-Days GitHub runtime 类似jvm&#xff0c;runtime包也提供了垃圾回收功能&#xff0c;不同的是runtime…

Sleuth(Micrometer) +ZipKin分布式链路追踪的解析以及使用

1、用另一种场景来类比Sleuth和Zipkin的作用 我们来设想一个快递公司的物流追踪系统。设你在网上购买了一本书&#xff0c;当你的订单提交后&#xff0c;后台系统会生成一个唯一的订单号&#xff0c;这个订单号就相当于Sleuth中的Trace ID。你的订单会经过几个主要的处理阶段&…

3.5 查找和排序算法

大纲 算法基础 常用的表示算法的方法 算法的复杂度 查找 顺序查找、二分查找 哈希查找 真题 排序 插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 排序算法总结

梯度提升回归树模型

梯度提升回归树&#xff08;Gradient Boosting Regression Trees, GBRT&#xff09;是一种集成学习方法&#xff0c;通过结合多个弱学习器&#xff08;通常是决策树&#xff09;的预测结果来提高整体模型的性能。GBRT特别擅长处理回归问题和分类问题&#xff0c;具有较高的预测…

黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day4 重置版 全网最全最快

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会…

UniCAVE实现融合输出或多屏输出

介绍 CAVE沉浸式系统包含单主机多屏和多主机多屏两种系统架构。此文档主要介绍融合输出与单机多屏输出&#xff0c;这两种方式都属于单主机多屏。均以使用UniCAVE输出到前左右下为例。引用的Package为UniCAVE2019。 融合输出 实现原理 &#xff08;猜测&#xff09;是将多块…

2024春秋杯网络安全联赛夏季赛Crypto(AK)解题思路及用到的软件

2024春秋杯网络安全联赛夏季赛Crypto(AK) 2024春秋杯网络安全联赛夏季赛Crypto解题思路以及用到的软件 所有题用到的软件 1.vm(虚拟机kali)和Ubuntu&#xff0c;正常配置即可B站有很多。 2.Visual Studio Code(里面要配置python&#xff0c;crypto库和Sagemath数学软件系统S…

Mono.fromRunnable 和 Mono.zip 的详细解释和示例

Mono.fromRunnable Mono.fromRunnable 是一种创建 Mono 的方式&#xff0c;它接受一个 Runnable 作为参数。当 Mono 订阅者订阅时&#xff0c;Runnable 会被执行。Mono.fromRunnable 不会发出任何值&#xff0c;只会执行 Runnable 的逻辑&#xff0c;并在完成后发出一个完成信…

基于微信小程序+SpringBoot+Vue的青少年科普教学系统平台(带1w+文档)

基于微信小程序SpringBootVue的青少年科普教学系统平台(带1w文档) 基于微信小程序SpringBootVue的青少年科普教学系统平台(带1w文档) 这个工具就是解决上述问题的最好的解决方案。它不仅可以实时完成信息处理&#xff0c;还缩短高校教师成果信息管理流程&#xff0c;使其系统化…

LINUX之MMC子系统分析

目录 1. 概念1.1 MMC卡1.2 SD卡1.3 SDIO 2. 总线协议2.1 协议2.2 一般协议2.3 写数据2.4 读数据2.5 卡模式2.5.1 SD卡模式2.5.2 eMMC模式 2.6 命令2.6.1 命令类2.6.2 详细命令 2.7 应答2.8 寄存器2.8.1 OCR2.8.2 CID2.8.3 CSD2.8.4 RCA2.8.5 扩展CSD 3. 关键结构3.1 struct sdh…

数学建模(7)——Logistic模型

一、马尔萨斯人口模型 import numpy as np import matplotlib.pyplot as plt# 初始人口 N0 100 # 人口增长率 r 0.02 # 时间段&#xff08;年&#xff09; t np.linspace(0, 200, 200)# 马尔萨斯人口模型 N N0 * np.exp(r * t)# 绘图 plt.plot(t, N, labelPopulation) plt.…