001: //
002: // Copyright (C) 2005 United States Government as represented by the
003: // Administrator of the National Aeronautics and Space Administration
004: // (NASA). All Rights Reserved.
005: //
006: // This software is distributed under the NASA Open Source Agreement
007: // (NOSA), version 1.3. The NOSA has been approved by the Open Source
008: // Initiative. See the file NOSA-1.3-JPF at the top of the distribution
009: // directory tree for the complete NOSA document.
010: //
011: // THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY
012: // KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
013: // LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
014: // SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
015: // A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT
016: // THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT
017: // DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE.
018: //
019:
020: package gov.nasa.jpf.embedded;
021:
022: import gov.nasa.jpf.Config;
023: import gov.nasa.jpf.VMListener;
024: import gov.nasa.jpf.VM;
025: import gov.nasa.jpf.JPF;
026: import gov.nasa.jpf.jvm.JVM;
027: import gov.nasa.jpf.jvm.ThreadInfo;
028: import gov.nasa.jpf.jvm.ElementInfo;
029:
030: /**
031: * TestVMListener - unit test of the VMListener interface
032: */
033: public class TestVMListener implements VMListener {
034:
035: /**
036: * VM has executed next instruction
037: * (can be used to analyze branches, monitor PUTFIELD / GETFIELD and
038: * INVOKExx / RETURN instructions)
039: */
040: public void instructionExecuted(VM vm) {
041: //JVM jvm = (JVM) vm;
042: //ThreadInfo ti = jvm.getLastThreadInfo();
043: //Instruction insn = jvm.getLastInstruction();
044: //System.out.println("Instruction executed: " + ti.getIndex() + " : " + insn);
045: }
046:
047: /**
048: * new class was loaded
049: */
050: public void classLoaded(VM vm) {
051: // TODO
052: }
053:
054: /**
055: * exception was thrown
056: */
057: public void exceptionThrown(VM vm) {
058: // TODO
059: }
060:
061: /**
062: * new object was created
063: */
064: public void objectCreated(VM vm) {
065: JVM jvm = (JVM) vm;
066: ThreadInfo ti = jvm.getLastThreadInfo();
067: ElementInfo ei = jvm.getLastElementInfo();
068: System.out.println("objectCreated: " + ti.getIndex() + ", "
069: + ei.getClassInfo().getName() + " = " + ei.getIndex());
070: }
071:
072: /**
073: * object was garbage collected (after potential finalization)
074: */
075: public void objectReleased(VM vm) {
076: JVM jvm = (JVM) vm;
077: ElementInfo ei = jvm.getLastElementInfo();
078: System.out.println("objectReleased: "
079: + ei.getClassInfo().getName() + " = " + ei.getIndex());
080: }
081:
082: public void gcBegin(VM vm) {
083: JVM jvm = (JVM) vm;
084: System.out.println("gcBegin");
085: }
086:
087: public void gcEnd(VM vm) {
088: JVM jvm = (JVM) vm;
089: System.out.println("gcEnd");
090: }
091:
092: /**
093: * new Thread entered run() method
094: */
095: public void threadStarted(VM vm) {
096: JVM jvm = (JVM) vm;
097: ThreadInfo ti = jvm.getLastThreadInfo();
098: System.out.println("threadStarted: " + ti.getIndex());
099: }
100:
101: /**
102: * Thread exited run() method
103: */
104: public void threadTerminated(VM vm) {
105: JVM jvm = (JVM) vm;
106: ThreadInfo ti = jvm.getLastThreadInfo();
107: System.out.println("threadTerminated: " + ti.getIndex());
108: }
109:
110: void filterArgs(String[] args) {
111: // we don't have any
112: }
113:
114: public static void main(String[] args) {
115: TestVMListener listener = new TestVMListener();
116: listener.filterArgs(args);
117:
118: Config conf = JPF.createConfig(args);
119: // here we can set our own params
120: JPF jpf = new JPF(conf);
121: jpf.getVM().addListener(listener);
122:
123: System.out.println("---------------- starting JPF on class: "
124: + args[0]);
125: jpf.run();
126: System.out.println("---------------- JPF terminated");
127: }
128:
129: }
|