当前位置:文档之家› 实验环境的使用实验报告

实验环境的使用实验报告

操作系统实验报告
哈尔滨工程大学
计算机科学与技术学院
实验环境的使用
一.实验概述
1.实验名称:实验环境的使用
2.实验目的:
1)熟悉操作系统集成实验环境OS Lab的基本使用方法;
2)练习编译、调试EOS操作系统内核以及EOS应用程序。

3.实验类型:验证
4.实验内容:
1)准备实验,启动OS Lab;
2)学习OS Lab的基本使用方法;
3)EOS内核项目的生成和调试;
4)EOS应用程序项目的生成和调试;
5)退出OS Lab;
6)保存EOS内核项目
二.实验环境
操作系统:windows XP
编译器:Tevalaton OS Lab
语言:C++
三.实验过程
1.实验过程:
1)启动OS Lab,在启动后弹出的对话框中填入学号、姓名;
2)学习OS Lab的基本使用方法,使用OS Lab编写一个windows控制应用台应用程序,熟悉OS Lab的基本使用方法(主要包括新建项目、生成项目、调试项目等);
在“文件”菜单中选择新建项目,并选择项目模板“控制台应用程序”。

3)点击F5生成项目,并对结果中的问题进行修改。

如果源代码中存在语法错误,“输出”窗口会输出相应的错误信息(包括错误所在文件的路径,错误在文件中的位置,以及错误原因),并在最后提示生成失败。

此时在“输出”窗口中双击错误信息所在的行,OS Lab 会使用源代码编辑器打开错误所在的文件,并自动定位到错误对应的代码行。

可以在源代码文件中故意输入一些错误的代码(例如删除一个代码行结尾的分号),然后再次生成项目,然后在“输出”窗口中双击错误信息来定位存在错误的代码行,将代码修改正确后再生成项目。

4)执行项目,在OS Lab 中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的Windows 控制台应用程序。

启动执行后会弹出一个Windows 控制台窗口,显示控制台应用程序输出的内容。

按任意键即可关闭此Windows 控制台窗口。

5)调试项目,点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”,文件中的函数如下所示。

int test1(int n){
n++;
return n;}
6)将主函数进行修改。

7)使用断点中断执行,在main函数中定义变量n的代码行添加一个断点,在“调试”菜单中选择“启动调试”,Windows 控制台应用程序开始执行,随后OS Lab 窗口被自动激活,并且在刚刚添加断点的代码行左侧空白中显示一个黄色箭头,表示程序已经在此行代码处中断执行(也就是说下一个要执行的就是此行代码)。

此时查看控制台应用程序的窗口,可以看到窗口中没有输出n的值。

8)选择逐过程调试,可以看到控制台应用程序窗口,已经打印了n的值,结束调试。

9)再次启动程序,程序依旧会在断点处中断,此时采用逐语句进行调试,可以发现黄色箭头指向了test1中的函数,选择“跳出”,会跳出test1函数,返回到上级函数中继续调试;
10)查看变量的值,将鼠标移动到源代码编辑器中变量n 的名称上,此时会弹出一个窗口显示出变量n 当前的值(由于此时还没有给变量n 赋值,所以是一个随机值)。

在源代码编辑器中变量n 的名称上点击鼠标右键,在弹出的快捷菜单中选择“快速监视”,可以使用“快速监视”对话框查看变量n 的值。

然后,可以点击“关闭”按钮关闭“快速监视”对话框。

11)调用堆栈,启动调试,会在之前设置的断点处中断,选择“调试”菜单“窗口”中的“调用堆栈”,激活“调用堆栈”窗口。

可以看到当前“调用堆栈”窗口中只有一个main 函数(显示的内容还包括了参数值和函数地址)。

采用逐过程调试,直到进入到test1函数,查看“调用堆栈”窗口可以发现在堆栈上有两个函数test1和main。

其中当前正在调试的test1函数在栈顶位置,main 函数在栈底位置。

说明是在main 函数中调用了test1函数。

在“调用堆栈”窗口中双击main 函数所在的行,会有一个绿色箭头指向main 函数所在的行,表示此函数是当前调用堆栈中的活动函数。

同时,会将main 函数所在的源代码文件打开,并也使用一个绿色箭头指向test1函数返回后的位置。

反复双击“调用堆栈”窗口中Func函数和main函数所在的行,查看“监视”窗口中变量n的值,可以看到在不同的堆栈帧被激活时,OS Lab 调试器会自动更新“监视”窗口中的数据,显示出对应于当前活动堆栈帧的信息。

结束调试。

12)新建项目,选择项目模板“EOS Kernel”。

13)生成项目,打开C:\eos\debug 文件夹,查看生成的对象文件和目标文件。

找到boot.bin、loader.bin 和kernel.dll 三个二进制文件,这三个文件就是EOS 操作系统在运行时需要的可执行文件。

OS Lab 每次启动运行EOS 操作系统之前,都会将这三个文件写入一个软盘镜像文件中,然后让虚拟机运行这个软盘镜像中的EOS(相当于将写有这三个二进制文件的软盘放入一个物理机的软盘驱动器中,然后按下开机按钮)。

找到libkernel.a 文件,此文件是EOS 内核文件kernel.dll 对应的导入库文件。

14)在“项目管理器”窗口的文件夹中找到start.c文件节点,双击此文件节点使用源代码编辑器打开start.c文件。

在start.c 文件中KiSystemStartup函数的“KiInitializePic();”语句所在行添加一个断点,继续调试,熟悉各种调试功能的使用方法。

15)查看软盘镜像文件的内容,在“项目管理器”窗口中双击软盘镜像文件Floppy.img,就会使用FloppyImageEditor 工具打开此文件。

在FloppyImageEditor 工具的文件列表中可以找到loader.bin 文件和kernel.dll 文件,这两个文件都是在启动调
试时被写入软盘镜像文件的(可以查看这两个文件的修改日期)。

boot.bin 文件在启动调试时被写入了软盘镜像的引导扇区中,不受软盘文件系统的管理,所以在文件列表中找不到此文件。

关闭FloppyImageEditor工具。

16)点击OS Lab 工具栏上的“项目配置”下拉列表,选择下拉列表中的“Release”
项目配置,“Release”项目配置被设置为新的活动项目配置,生成项目。

17)SDK 文件夹中提供了开发EOS 应用程序需要的所有文件。

打开SDK 文件夹中的bin 文件夹,可以看到有两个名称分别为debug 和release 的文件夹。

debug 文件夹是在使用debug 配置生成项目时生成的,其中存放了调试版本的EOS 二进制文件。

release 文件夹是在使用release 配置生成项目时生成的,其中存放了发布版本的EOS 二进制文件(不包含调试信息)。

分别打开这两个文件夹查看其中包含的文件。

18)新建EOS应用程序项目,生成项目,打开C:\eosapp\debug 文件夹,查看生成的对象文件和目标文件。

其中的EOSApp.exe 就是EOS 应用程序的可执行文件。

OS Lab 每次启动执行EOS 应用程序时,都会将EOS 应用程序的可执行文件写入软盘镜像,并且会将SDK 文件夹中对应配置(Debug 或Release)的二进制文件写入软盘镜像,然后让虚拟机运行软盘镜像中的EOS,待EOS 启动后再自动执行EOS 应用程序。

19)调试项目,启动调试,。

OS Lab 会弹出一个调试异常对话框,选择“是”调试异常,EOS 应用程序会中断执行,黄色箭头指向下一个要执行的代码行,在EOSApp.c 的printf("Hello world!\n"); 代码行添加一个断点,继续调试,查看虚拟机窗口,EOS应用程序执行完毕。

20)将EOSApp文件重命名为MyApp,在“调试”菜单中“删除所有断点”,忽略异常,激活虚拟机窗口,可以到自动执行的可执行文件的名称为MyApp.exe。

21)退出OS Lab,在关闭时会弹出一个保存数据的对话框,核对学号和姓名后点击“保存”,OS Lab关闭。

四.实验体会
本次实验为初步了解实验平台的使用,通过一步步的操作,加深了在操作系统上对程序创建、调试程序的掌握,但对OS的相关知识还不是很了解。

在让输出框显示的过程中,由于没有引入合适的标准库,编写代码时产生错误,最后通过添加#include<stdlib.h>完成对输出框的暂停显示。

.。

相关主题