`
simpleman7210
  • 浏览: 18120 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

为这个虚拟机写测试例子

阅读更多
应panqj_hust的需要,我举例说明如何为这个虚拟机写测试例子。我在开发这个虚拟机的过程中,为了检查是否正确,也写了好些测试Java类。这些例子很多,不在这里一一列举出来。我只是举一两个例子,说明怎么写测试例子。实际上不难写。

例子1:

class Ball extends Exception
{
}

class Pitcher {

private static Ball ball = new Ball();

public static void main(String[] args) {
main();
}

public static void main() {
playBall();
}

static void playBall() {
int i = 0;
for (;;) {
	try {
		if (i % 4 == 3) {
			throw ball;
		}
		++i;
	} catch (Ball b) {
		i = 0;
	}
}
}

}


这个例子我是摘自“深入Java虚拟机”,除了增加了main()方法,好让我的虚拟机可以执行外,其它没有什么改动。(注意,我的虚拟机版本暂时不支持main(String[])方法启动,只支持main()方法启动)

先用javac编译Ball和Pitcher。然后用g++编译我的虚拟机版本(编译命令参考下载包里面的compile.txt)。运行虚拟机,假设可执行程序名为JVMTest2.exe(Windows上),运行命令如下:
   JVMTest2.exe -d4 Pitcher
那么你就会看到详细的输出。可选参数-d4控制调试信息的输出详细程度。d4已经是很详细了,你也可以用d0,d1,d2,d3。如果d0的话,可能什么信息也没有输出,除了程序发生错误时的异常信息。

上面这个例子是一个“扔球游戏”,而且永远不会结束。这个例子正常运行起来,至少能说明:a.类的初始化方法<clinit>确实被调用了,在这里类的初始化,new了一个Ball的实例。b.异常抛出和处理确实执行了。因为这个例子不断地抛出和捕捉异常。d4参数会导致详细的信息输出来,如果你足够耐心,可以观看分析这些输出,细到每个指令的执行结果,都输出来了。(对于这个例子,因为是死循环,我在调试器里设置断点调试跟踪,就知道了虚拟机执行是否正确)

再举一个例子,这个例子请参考我前面的一篇文章:
[url]
http://simpleman7210.iteye.com/blog/1953969
[/url]


在这个例子中,有两个类Subclass和Superclass。运行这个例子:
   JVMTest2.exe -d4 Subclass
这个例子若被正确执行,至少能说明这样几点:invokespecial指令被正确执行了,invokevirtual指令被正确执行了。

倘若一个类有自己的包名,运行的时候要指出类的全名称,比如:
  JVMTest2.exe -d4 test/arithmetic/ClassTestArithmeticOperations
这里ClassTestArithmeticOperations是一个Java类,在包test/arithmetic下面。在我这个虚拟机中,包名之间用斜杠'/'而不是点号'.',这只是因为一时的方便,暂时没有支持点号。

ClassTestArithmeticOperations是我写的一个测试例子,用来检查加减乘除指令实现的正确性,其代码如下。
package test.arithmetic;

public class ClassTestArithmeticOperations
{
public static void main(String[] args) {
main();
}

public static void main() {
int i1 = 10;
int i2 = 20;
int i3 = i1 + i2;
int i4 = i1 - i2;
int i5 = i1 * i2;
int i6 = i1 / i2;
long l1 = 12345678901L;
long l2 = 10000L;
long l3 = l1 + l2;
long l4 = l1 - l2;
long l5 = l1 * l2;
long l6 = l1 / l2;
float f1 = 0.12345f;
float f2 = 0.00001f;
float f3 = f1 + f2;
float f4 = f1 - f2;
float f5 = f1 * f2;
float f6 = f1 / f2;
double d1 = 0.12345;
double d2 = 0.00001;
double d3 = d1 + d2;
double d4 = d1 - d2;
double d5 = d1 * d2;
double d6 = d1 / d2;
}

}


分享到:
评论
1 楼 panqj_hust 2013-11-10  
谢谢。我在您的“java虚拟机开发,刚刚走通执行了一段测试java代码”的博客里,看到了v02版本,里面有个测试代码ClassHasStaticMethod,正在对照学习。
在这篇博客,我看到了d4的调试方法,应该很强大,期待可以试验下。

相关推荐

    什么文件组成了虚拟机(vm) (转).docx

    一个虚拟机一般以一系列文件的形式储存在宿主机中,这些文件一般在由Workstation为虚拟机所创建的那个目录中。 这里列出了这些关键文件的扩展名。在这些例子中,表示你的虚拟机名字。 (举例格式) 扩展名 文件名 ...

    Java虚拟机中冷对象的研究_骆凡.caj

    虚拟机提供了一个强大的内存管理 功能,由于其中包括了垃圾回收功能, java 程序员不再需要像 c/c++ 程序员一样去进 行内存空间回收的处理。但也正是因为这样的原因,虚拟机扮演如此重要的角色,所 以虚拟机的优化...

    虚拟机Ubuntu系统下安装mpich-3.2.1

    本文详细介绍了VMWare虚拟机下Ubuntu系统中安装mpich-3.2.1的过程及测试mpich2自带的计算π的例子。

    虚拟化与云计算测试题.docx

    虚拟化与云计算测试题全文共1页,当前为第1页。虚拟化与云计算测试题全文共1页,当前为第1页。总分 150 分 时间90分钟 虚拟化与云计算测试题全文共1页,当前为第1页。 虚拟化与云计算测试题全文共1页,当前为第1页。...

    Examples:虚拟机示例

    创建一个测试文件,例如 hello.js : print ( 'hello world!' ) ; 然后运行它: /opt/vmbase/sdr4space.light -f ./hello.js -----------------------------------------------------------------------------...

    Linux操作系统:Linux系统的安装.pptx

    使用的程序,或者测试用的程序可以直接在虚拟机上运行。 ◆ 避免程序的重新安装,对于保密性要求比较高的程序,单 独创建一个环境运行。 ◆ 可以体验不同版本的操作系统,如Linux、Mac等。 虚拟机的创建 虚拟机的...

    jvm-core-learning-example:关于Java虚拟机核心知识点学习积累的例子,是初学者及虚拟机核心知识巩固的最佳实践

    作者与学习乐园原始码地址:我的作者:项目结构src目录Java虚拟机核心知识点学习代码并测试案例test目录(测试包名与src目录保持一致)对应学习代码包的详细测试案例包目录: ├── org.jvmcore.classloader// 类...

    基于MapReduce的简单倒排索引的建立

    基于MapReduce的简单倒排索引的建立

    VMWare 7.0.1 build-227600

    VMware工作站包含有将多个虚拟机指定为编队的能力,编队可以作为一个物体来开机、关机、挂起和恢复—这使VMware工作站在用于测试客户端-服务器环境时特别有用。  VMware公司新的企业级服务器和工具产品,正在使“将...

    使用JUnit对规则进行单元测试

    引言一个例子我们先看一个例子,以了解对”规则”做单元测试的特点。我们有一个性能调优工具WPA,它能够将与性能相关的参数的值进行评估并推荐最优值。它的评估和推荐最优值算法都是基于”规则”的。Java虚拟机的...

    icebox:虚拟机内省,跟踪和调试

    :测试多个功能的程序 :一堆例子 :将WinDBG连接到FDP的存根 :为FDP修补的VirtualBox源。 入门 一个完整的入门写在这里。 否则,请检查我们的示例文件夹。 在安装需求之后,可以使用这些指示信息来构建这些...

    postmark安装使用

    主要描述了Linux下postmark 安装 使用,具体的测试方案,例子

    Matlab解析XML文件.rar

    三个函数搞定一切 XML格式的问题现在很流行,它往往用作数据存储文件,或者是参数配置文件,我们需要做的有...Matlab自带了一个叫做 info.xml 的文件,就用下面这两个函数做个简单的测试。 xmlfile = fullfile(matlab

    服务器硬件性能.pptx

    物理机和虚拟机延时比较(4k随机写) 4k随机写测试IOPS fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=4k-rand-write \ --filename=benchmark.testing --bs=4k --iodepth=64 --size=4G --...

    x86x64体系探索及编程

    本书是对Intel手册所描述的处理器架构进行探索和论证,每个章节都有相应的测试实验,所运行的实验例子可以在真实的机器上执行。部分实验是不能在VMware虚拟机和bochs模拟器上进行的,必须要在真实机器上运行。例如:...

    锈学习:通过一些例子来学习锈

    防锈学习通过一些例子来学习生锈目标通过学习编写项目来加强rust的能力进度06_drivers_gpio_uart01准备工作通过hyper-v安装Ubuntu 20.04.1虚拟机设置虚拟机环境安装锈安装vscode安装docker下载代码测试环境使用...

    新版Android开发教程.rar

    Android 进一步推进了 " 随时随地为每个人提供信息 " 这一企 业 目标的实现。 � Open Handset Alliance 汇集了多家业界巨头。运营商如: China Mobile 、 NTT DoCoMo 、 Vodafone 、 T-M obile 等;设备制造商如 ...

    platform-tools(安卓调试工具包).zip

    platform-tools是很多刷机的朋友都会用到的工具包,Android SDK其中的platform-tools包可以对安卓设备进行调试,包括解锁、刷机等操作都可以使用这个工具包来进行,其中包含开发app的平台依赖的开发和调试工具,包括...

    vmware-vdiskmanager.exe 下载

    创建一个名称为myIdeDisk的大小为850Mb的IDE接口的在一个虚拟机文件中的可增长的磁盘 vmware-vdiskmanager -d myDisk.vmdk 对myDisk进行碎片整理 vmware-vdiskmanager -r sourceDisk.vmdk -t 0 destinationDisk....

Global site tag (gtag.js) - Google Analytics