17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test FieldMonitor.java
26 * @bug 7158988
27 * @key regression
28 * @summary verify jvm does not crash while debugging
29 * @run compile TestPostFieldModification.java
30 * @run main/othervm FieldMonitor
31 * @author axel.siebenborn@sap.com
32 */
33 import java.io.BufferedReader;
34 import java.io.IOException;
35 import java.io.InputStream;
36 import java.io.InputStreamReader;
37 import java.io.OutputStream;
38 import java.io.OutputStreamWriter;
39 import java.io.Reader;
40 import java.io.Writer;
41 import java.util.Iterator;
42 import java.util.List;
43 import java.util.Map;
44
45 import com.sun.jdi.Bootstrap;
46 import com.sun.jdi.Field;
47 import com.sun.jdi.ReferenceType;
48 import com.sun.jdi.VirtualMachine;
49 import com.sun.jdi.connect.Connector;
50 import com.sun.jdi.connect.IllegalConnectorArgumentsException;
51 import com.sun.jdi.connect.LaunchingConnector;
52 import com.sun.jdi.connect.VMStartException;
53 import com.sun.jdi.event.ClassPrepareEvent;
54 import com.sun.jdi.event.Event;
55 import com.sun.jdi.event.EventQueue;
56 import com.sun.jdi.event.EventSet;
57 import com.sun.jdi.event.ModificationWatchpointEvent;
58 import com.sun.jdi.event.VMDeathEvent;
59 import com.sun.jdi.event.VMDisconnectEvent;
60 import com.sun.jdi.request.ClassPrepareRequest;
61 import com.sun.jdi.request.EventRequest;
62 import com.sun.jdi.request.EventRequestManager;
63 import com.sun.jdi.request.ModificationWatchpointRequest;
64
65 public class FieldMonitor {
66
67 public static final String CLASS_NAME = "TestPostFieldModification";
68 public static final String FIELD_NAME = "value";
69 public static final String ARGUMENTS = "-Xshare:off -XX:+PrintGC";
70
71 public static void main(String[] args)
72 throws IOException, InterruptedException {
73
74 StringBuffer sb = new StringBuffer();
75
76 for (int i=0; i < args.length; i++) {
77 sb.append(' ');
78 sb.append(args[i]);
79 }
80 //VirtualMachine vm = launchTarget(sb.toString());
81 VirtualMachine vm = launchTarget(CLASS_NAME);
82
83 System.out.println("Vm launched");
84 // set watch field on already loaded classes
85 List<ReferenceType> referenceTypes = vm
86 .classesByName(CLASS_NAME);
87 for (ReferenceType refType : referenceTypes) {
88 addFieldWatch(vm, refType);
89 }
90 // watch for loaded classes
91 addClassWatch(vm);
92
93 // process events
94 EventQueue eventQueue = vm.eventQueue();
95 // resume the vm
96
97 Process process = vm.process();
98
99
100 // Copy target's output and error to our output and error.
101 Thread outThread = new StreamRedirectThread("out reader", process.getInputStream());
102 Thread errThread = new StreamRedirectThread("error reader", process.getErrorStream());
103
104 errThread.start();
105 outThread.start();
106
107
108 vm.resume();
109 boolean connected = true;
110 while (connected) {
111 EventSet eventSet = eventQueue.remove();
112 for (Event event : eventSet) {
113 if (event instanceof VMDeathEvent
114 || event instanceof VMDisconnectEvent) {
115 // exit
116 connected = false;
117 } else if (event instanceof ClassPrepareEvent) {
118 // watch field on loaded class
119 System.out.println("ClassPrepareEvent");
120 ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event;
121 ReferenceType refType = classPrepEvent
122 .referenceType();
123 addFieldWatch(vm, refType);
124 } else if (event instanceof ModificationWatchpointEvent) {
125 System.out.println("sleep for 500 ms");
126 Thread.sleep(500);
127 System.out.println("resume...");
128
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test FieldMonitor.java
26 * @bug 7158988
27 * @key regression
28 * @summary verify jvm does not crash while debugging
29 * @run compile TestPostFieldModification.java
30 * @run main/othervm FieldMonitor
31 * @author axel.siebenborn@sap.com
32 */
33 import java.io.BufferedReader;
34 import java.io.IOException;
35 import java.io.InputStream;
36 import java.io.InputStreamReader;
37 import java.util.Iterator;
38 import java.util.List;
39 import java.util.Map;
40
41 import com.sun.jdi.Bootstrap;
42 import com.sun.jdi.Field;
43 import com.sun.jdi.ReferenceType;
44 import com.sun.jdi.VirtualMachine;
45 import com.sun.jdi.connect.Connector;
46 import com.sun.jdi.connect.IllegalConnectorArgumentsException;
47 import com.sun.jdi.connect.LaunchingConnector;
48 import com.sun.jdi.connect.VMStartException;
49 import com.sun.jdi.event.ClassPrepareEvent;
50 import com.sun.jdi.event.Event;
51 import com.sun.jdi.event.EventQueue;
52 import com.sun.jdi.event.EventSet;
53 import com.sun.jdi.event.ModificationWatchpointEvent;
54 import com.sun.jdi.event.VMDeathEvent;
55 import com.sun.jdi.event.VMDisconnectEvent;
56 import com.sun.jdi.request.ClassPrepareRequest;
57 import com.sun.jdi.request.EventRequest;
58 import com.sun.jdi.request.EventRequestManager;
59 import com.sun.jdi.request.ModificationWatchpointRequest;
60
61 public class FieldMonitor {
62
63 public static final String CLASS_NAME = "TestPostFieldModification";
64 public static final String FIELD_NAME = "value";
65 public static final String ARGUMENTS = "-Xshare:off -XX:+PrintGC";
66
67 public static void main(String[] args)
68 throws IOException, InterruptedException {
69
70 //VirtualMachine vm = launchTarget(sb.toString());
71 VirtualMachine vm = launchTarget(CLASS_NAME);
72
73 System.out.println("Vm launched");
74
75 // watch for loaded classes
76 addClassWatch(vm);
77
78 // process events
79 EventQueue eventQueue = vm.eventQueue();
80 // resume the vm
81
82 Process process = vm.process();
83
84
85 // Copy target's output and error to our output and error.
86 Thread outThread = new StreamRedirectThread("out reader", process.getInputStream());
87 Thread errThread = new StreamRedirectThread("error reader", process.getErrorStream());
88
89 errThread.start();
90 outThread.start();
91
92 boolean connected = true;
93 while (connected) {
94 EventSet eventSet = eventQueue.remove();
95 for (Event event : eventSet) {
96 if (event instanceof VMDeathEvent
97 || event instanceof VMDisconnectEvent) {
98 // exit
99 connected = false;
100 } else if (event instanceof ClassPrepareEvent) {
101 // watch field on loaded class
102 System.out.println("ClassPrepareEvent");
103 ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event;
104 ReferenceType refType = classPrepEvent
105 .referenceType();
106 addFieldWatch(vm, refType);
107 } else if (event instanceof ModificationWatchpointEvent) {
108 System.out.println("sleep for 500 ms");
109 Thread.sleep(500);
110 System.out.println("resume...");
111
|