test/runtime/7158988/FieldMonitor.java
Print this page
*** 32,45 ****
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.io.Reader;
- import java.io.Writer;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.sun.jdi.Bootstrap;
--- 32,41 ----
*** 54,63 ****
--- 50,60 ----
import com.sun.jdi.event.Event;
import com.sun.jdi.event.EventQueue;
import com.sun.jdi.event.EventSet;
import com.sun.jdi.event.ModificationWatchpointEvent;
import com.sun.jdi.event.VMDeathEvent;
+ import com.sun.jdi.event.VMStartEvent;
import com.sun.jdi.event.VMDisconnectEvent;
import com.sun.jdi.request.ClassPrepareRequest;
import com.sun.jdi.request.EventRequest;
import com.sun.jdi.request.EventRequestManager;
import com.sun.jdi.request.ModificationWatchpointRequest;
*** 69,96 ****
public static final String ARGUMENTS = "-Xshare:off -XX:+PrintGC";
public static void main(String[] args)
throws IOException, InterruptedException {
- StringBuffer sb = new StringBuffer();
-
- for (int i=0; i < args.length; i++) {
- sb.append(' ');
- sb.append(args[i]);
- }
//VirtualMachine vm = launchTarget(sb.toString());
VirtualMachine vm = launchTarget(CLASS_NAME);
System.out.println("Vm launched");
- // set watch field on already loaded classes
- List<ReferenceType> referenceTypes = vm
- .classesByName(CLASS_NAME);
- for (ReferenceType refType : referenceTypes) {
- addFieldWatch(vm, refType);
- }
- // watch for loaded classes
- addClassWatch(vm);
// process events
EventQueue eventQueue = vm.eventQueue();
// resume the vm
--- 66,79 ----
*** 102,118 ****
Thread errThread = new StreamRedirectThread("error reader", process.getErrorStream());
errThread.start();
outThread.start();
-
- vm.resume();
boolean connected = true;
while (connected) {
EventSet eventSet = eventQueue.remove();
for (Event event : eventSet) {
! if (event instanceof VMDeathEvent
|| event instanceof VMDisconnectEvent) {
// exit
connected = false;
} else if (event instanceof ClassPrepareEvent) {
// watch field on loaded class
--- 85,103 ----
Thread errThread = new StreamRedirectThread("error reader", process.getErrorStream());
errThread.start();
outThread.start();
boolean connected = true;
+ int watched = 0;
while (connected) {
EventSet eventSet = eventQueue.remove();
for (Event event : eventSet) {
! System.out.println("FieldMonitor-main receives: "+event);
! if (event instanceof VMStartEvent) {
! addClassWatch(vm);
! } else if (event instanceof VMDeathEvent
|| event instanceof VMDisconnectEvent) {
// exit
connected = false;
} else if (event instanceof ClassPrepareEvent) {
// watch field on loaded class
*** 120,149 ****
ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event;
ReferenceType refType = classPrepEvent
.referenceType();
addFieldWatch(vm, refType);
} else if (event instanceof ModificationWatchpointEvent) {
System.out.println("sleep for 500 ms");
Thread.sleep(500);
- System.out.println("resume...");
ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event;
System.out.println("old="
+ modEvent.valueCurrent());
System.out.println("new=" + modEvent.valueToBe());
- System.out.println();
}
}
eventSet.resume();
}
// Shutdown begins when event thread terminates
try {
errThread.join(); // Make sure output is forwarded
outThread.join();
} catch (InterruptedException exc) {
// we don't interrupt
}
}
/**
* Find a com.sun.jdi.CommandLineLaunch connector
*/
--- 105,138 ----
ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event;
ReferenceType refType = classPrepEvent
.referenceType();
addFieldWatch(vm, refType);
} else if (event instanceof ModificationWatchpointEvent) {
+ watched++;
System.out.println("sleep for 500 ms");
Thread.sleep(500);
ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event;
System.out.println("old="
+ modEvent.valueCurrent());
System.out.println("new=" + modEvent.valueToBe());
}
}
+ System.out.println("resume...");
eventSet.resume();
}
// Shutdown begins when event thread terminates
try {
errThread.join(); // Make sure output is forwarded
outThread.join();
} catch (InterruptedException exc) {
// we don't interrupt
}
+
+ if (watched != 11) { // init + 10 modifications in TestPostFieldModification class
+ throw new Error("Espected to receive 11 times ModificationWatchpointEvent, but got "+watched);
+ }
}
/**
* Find a com.sun.jdi.CommandLineLaunch connector
*/