当前位置: 首页 > news >正文

【深大计算机系统(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.lryc.cn/news/403759.html

相关文章:

  • 目标检测经典模型之YOLOV5-detect.py源码解析(持续更新)
  • PF4J+SpringBoot
  • 设计模式11-原型模式
  • Tomcat长连接源码解析
  • C++编程:实现一个跨平台安全的定时器Timer模块
  • PyTorch的自动微分模块【含梯度基本数学原理详解】
  • AI 绘画|Midjourney设计Logo提示词
  • LeNet实验 四分类 与 四分类变为多个二分类
  • 【BUG】已解决:java.lang.reflect.InvocationTargetException
  • 配置kali 的apt命令在线安装包的源为国内源
  • JAVA 异步编程(线程安全)二
  • Golang | Leetcode Golang题解之第260题只出现一次的数字III
  • IDEA自带的Maven 3.9.x无法刷新http nexus私服
  • 56、本地数据库迁移到阿里云
  • 新时代多目标优化【数学建模】领域的极致探索——数学规划模型
  • 单例模式详解
  • WebGIS主流的客户端框架比较|OpenLayers|Leaflet|Cesium
  • 【LabVIEW作业篇 - 2】:分数判断、按钮控制while循环暂停、单击按钮获取book文本
  • Kafka架构详解之分区Partition
  • SSM之Mybatis
  • Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)
  • 2024年7月12日理发记录
  • 几种常用排序算法
  • Spring3(代理模式 Spring1案例补充 Aop 面试题)
  • Github报错:Kex_exchange_identification: Connection closed by remote host
  • LabVIEW在CRIO中串口通讯数据异常问题
  • ALTERA芯片解密FPGA、CPLD、PLD芯片解密解密
  • [RK3588-Android12] 关于如何取消usb-typec的pd充电功能
  • 分布式 I/O 系统 BL200 Modbus TCP 耦合器
  • Java面试题--JVM大厂篇之Serial GC在JVM中有哪些优点和局限性