好文档 - 专业文书写作范文服务资料分享网站

实验三

天下 分享 时间: 加入收藏 我要投稿 点赞

一 Vi 使用练习 1.实验目的

通过指定指令的Vi操作练习,使学生能够熟练使用 Vi中的常见操作,并且熟悉 Vi的 3种模式,如果能够熟练掌握实验内容中所要求的内容,则表明对 Vi的操作已经很熟练了。 2.实验内容

(1)在“/root”目录下建一个名为“/Vi”的目录。 (2)进入“/Vi”目录。

(3)将文件“/etc/inittab”复制到“/Vi”目录下。 (4)使用Vi打开“/Vi”目录下的inittab。

(5)设定行号,指出设定initdefault(类似于“id:5:initdefault”)的所在行号。 (6)将光标移到该行。 (7)复制该行内容。

(8)将光标移到最后一行行首。 (9)粘贴复制行的内容。 (10)撤销第9步的动作。

(11)将光标移动到最后一行的行尾。 (12)粘贴复制行的内容。

(13)光标移到“si::sysinit:/etc/rc.d/rc.sysinit”。 (14)删除该行。 (15)存盘但不退出。 (16)将光标移到首行。

(17)插入模式下输入“Hello,this is Vi world!”。 (18)返回命令行模式。

(19)向下查找字符串“0:wait”。 (20)再向上查找字符串“halt”。 (21)强制退出Vi,不存盘。

分别指出每个命令处于何种模式下? 3.实验步骤

(1)mkdir /root/Vi (2)cd /root/Vi (3)cp /etc/inittab ./ (4)Vi ./inittab

(5):set nu(底行模式)

(6)17(命令行模式) (7)yy (8)G (9)p (10)u (11)$ (12)p (13)21G (14)dd

(15):w(底行模式) (16)1G

(17)i 并输入“Hello,this is Vi world!”(插入模式) (18)Esc

(19)/0:wait(命令行模式) (20)?halt

(21):q!(底行模式) 4.实验结果

该实验最后的结果只对“/root/inittab”增加了一行复制的内容:“id:5:initdefault”。

二 用Gdb调试有问题的程序 1.实验目的

通过调试一个有问题的程序,使学生进一步熟练使用 Vi 操作,而且熟练掌握 Gcc 编译命令及Gdb的调试命令,通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力。这是一个很小的程序,只有35行,希望读者认真调试。 2.实验内容

(1)使用 Vi 编辑器,将以下代码输入到名为 greet.c 的文件中。此代码的原意为输出倒序 main函数中定义的字符串,但结果显示没有输出。代码如下所示:

#include

int display1(char *string); int display2(char *string);

int main () {

char string[] = \ display1 (string); display2 (string); }

int display1 (char *string) {

printf (\ }

int display2 (char *string1) {

char *string2; int size,i;

size = strlen (string1);

string2 = (char *) malloc (size + 1); for (i = 0; i < size; i++)

string2[size - i] = string1[i]; string2[size+1] = ' ';

printf(\ }

(2)使用Gcc编译这段代码,注意要加上“-g”选项以方便之后的调试。 (3)运行生成的可执行文件,观察运行结果。

(4)使用Gdb调试程序,通过设置断点、单步跟踪,一步步找出错误所在。 (5)纠正错误,更改源程序并得到正确的结果。 3.实验步骤

(1)在工作目录上新建文件greet.c,并用 Vi启动:vi greet.c。 (2)在Vi中输入以上代码。 (3)在Vi中保存并退出:wq。

(4)用Gcc编译:gcc -g greet.c -o greet。 (5)运行greet:./greet,输出为:

The original string is Embedded Linux The string afterward is

可见,该程序没有能够倒序输出。 (6)启动Gdb调试:gdb greet。 (7)查看源代码,使用命令“l”。

(8)在30行(for 循环处)设置断点,使用命令“b 30”。 (9)在33行(printf函数处)设置断点,使用命令“b 33”。 (10)查看断点设置情况,使用命令“info b”。 (11)运行代码,使用命令“r”。

(12)单步运行代码,使用命令“n”。

(13)查看暂停点变量值,使用命令“p string2[size - i]”。

(14)继续单步运行代码数次,并使用命令查看,发现 string2[size-1]的值正确。 (15)继续程序的运行,使用命令“c”。

(16)程序在printf前停止运行,此时依次查看string2[0]、string2[1]…,发现 string[0]没有被正确赋值,而后面的复制都是正确的,这时,定位程序第 31行,发现程序运行结果错误的原因在于“size-1”。由于i只能增到“size-1”,这样string2[0]就永远不能被赋值而保持NULL,故输不出任何结果。

(17)退出Gdb,使用命令q。

(18)重新编辑greet.c,把其中的“string2[size - i] = string1[i]”改为“string2[size – i - 1] = string1[i];”即可。

(19)使用Gcc重新编译:gcc -g greet.c -o greet。 (20)查看运行结果:./greet

The original string is Embedded Linux The string afterward is xuniL deddedbmE

这时,输入结果正确。 4.实验结果

将原来有错的程序经过Gdb调试,找出问题所在,并修改源代码,输出正确的倒序显示字符串的结果。

实验三

一Vi使用练习1.实验目的通过指定指令的Vi操作练习,使学生能够熟练使用Vi中的常见操作,并且熟悉Vi的3种模式,如果能够熟练掌握实验内容中所要求的内容,则表明对Vi的操作已经很熟练了。2.实验内容(1)在“/root”目录下建一个名为“/Vi”的目录。(2)进入“/Vi”目录。(3)将文件“/etc/initta
推荐度:
点击下载文档文档为doc格式
4v8aw6t1ca7b8vd538ce5nrap1rg8p00xfl
领取福利

微信扫码领取福利

微信扫码分享