【深圳大学计算机系统2】实验一 实验环境配置与使用

一、 实验目标

熟悉Linux上C程序的编译和调试工具,包括以下内容:

1. 了解Linux操作系统及其常用命令

2. 掌握编译工具gcc的基本用法

3. 掌握使用gdb进行程序调试

二、实验环境与工件

1.个人电脑

2. Fedora 13 Linux 操作系统

3. gcc

4. gdb

三、实验内容与步骤

  1. 根据实验一:实验环境配置与使用.ppt熟悉Linux基本操作(P.1 – P.28),然后根据以下过程创建用户:用户名为学生名称加学号,如吴坤汉,学号2015170297,则该用户名为wukunhan_2015170297。按照1.1~1.3完成并截图,截图需要有运行的命令及其结果。另外:后面的题目必须在该新建用户下完成。(30分)

实验步骤:

1.1 首先切换为超级用户

$su

 

如果出现Authentication failure的情况,则可以用`sudo passwd root`来给root重设密码:

 

 

切换为超级用户

1.2 参考以下命令创建新用户, 设置新建用户的密码,注意:只有设置了密码才能激活用户,否则无法以该用户身份登录

#adduser   wukunhan_2015170297

1.3 注销当前用户,并以新建的用户身份登录,登录后运行 $ whoami,并进行截图;

2. 新建用户主目录下创建子目录:gdbdebug, 并进入gdbdebug 子目录。将过程和结果截图。(10分)

输入sudo mkdir gdbdebug,发现权限不足

输入su获取root权限,再次输入sudo mkdir gdbdebug后,用ls查看文件发现成功创建。

输入cd gdbdebug进入文件夹

3. 使用vi编辑以下两个文件并编译和运行,截图(30分)

3.1编辑reverse.h

创建并进入reverse.h

进行函数声明

按ESC退出编辑模式,并输入:wq保存退出

3.2 编辑reverse.c

创建并进入reverse.c文件

输入代码

保存退出

3.3 按以下步骤编译,如有警告信息,请修改代码至无警告信息

 $gcc –Wall reverse.c –o reverse

输入gcc -Wall reverse.c -o reverse,发现末尾提示权限不够

输入su获取root权限后再次输入gcc -Wall reverse.c -o reverse,发现编译成功。

分析警告信息,发现有如下错误:

    1. 使用strlen函数未添加头文件<string.h>。
    2. scanf输入的格式不应该为char*型,应该去掉&。
    3. reverse函数没有返回值。应该添加return 1; 。

修改代码

 

再次编译发现已无警告信息

3.4 运行程序

 $./reverse

输入1234,发现输出不是4321,仍然需要debug

 

4. 按照以下过程调试并修正reverse.c,请参考过程截图。(30分)

4.1 编译时加入调试信息

$gcc -g reverse.c -o reverse1

4.2 启用GDB调试

由于在windows的linux子系统中进行gdb调试时一直报错如下。

多次尝试无果后,决定换用VMware虚拟机的Ubuntu系统继续进行实验

4.3 键入list,查看源代码并根据行号/函数名设置断点(断点位置仅供参考,不需雷同)

 

4.4 观察变量值,并作分析,推测错误(过程仅供参考,不需雷同)

可以看出断点第15行有错误,因为最先改变的应该是第一个字符q,而不是第二个字符w。分析后发现*(str+1)应该改为*(str+i)。而且字符t并不存在于原始字符串中,说明该字符进行了加减位,分析发现*str+len-i-1应该改为*(str+len-i-1)。

同样可以看出断点第14也有加减位操作,因为第二轮操作中第二个字符从t变成了s,s同样不存在于原始字符串中,而s是变量c的值,所以c的赋值部分出错,分析后将第14行改为c=*(str+i); 。

输入q退出gdb调试并进入reverse.c修改

4.5 修正程序并运行

修改reverse.c

重新编译后运行程序,发现结果正确。

四、实验结果

通过vim编辑器和gdb调试,成功的进行debug并运行了reverse.c程序。

五、实验总结与体会

本次实验的实验内容虽然较为简单,但是完成实验配置的过程中缺出现了不少麻烦,耗费了大量的时间和精力。

起初我是在windows的linux子系统上进行实验的,前面本来都非常顺利,直到进行gdb调试时,添加断点后报错并且程序无法运行,查阅了各种资料并进行了大量尝试后仍然无果,个人怀疑是windows和linux系统不兼容的缘故,导致在运行像gdb这种较低层的程序极易出现错误。

最终不得已放弃在子系统上进行实验,转而在VMware的Ubuntu系统上进行实验。虽然中途也遇到各种问题,例如VMware安装后无法正常打开Unbutu并报错等等。尝试了各种VMware和Ubuntu的版本后以及各种解决方案后,万幸最终完成了实验。

通过本次实验,我学会了大量的linux指令例如vim,sudo等等,也了解怎么创建文件,编译文件,运行文件,调试文件。

(by 归忆)

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归忆_AC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值