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

*/

​​​​​​​

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值