24 /* |
24 /* |
25 * @test FieldMonitor.java |
25 * @test FieldMonitor.java |
26 * @bug 7158988 |
26 * @bug 7158988 |
27 * @key regression |
27 * @key regression |
28 * @summary verify jvm does not crash while debugging |
28 * @summary verify jvm does not crash while debugging |
29 * @ignore 8055145 |
|
30 * @run compile TestPostFieldModification.java |
29 * @run compile TestPostFieldModification.java |
31 * @run main/othervm FieldMonitor |
30 * @run main/othervm FieldMonitor |
32 * @author axel.siebenborn@sap.com |
31 * @author axel.siebenborn@sap.com |
33 */ |
32 */ |
34 import java.io.BufferedReader; |
33 import java.io.BufferedReader; |
89 outThread.start(); |
88 outThread.start(); |
90 |
89 |
91 boolean connected = true; |
90 boolean connected = true; |
92 int watched = 0; |
91 int watched = 0; |
93 while (connected) { |
92 while (connected) { |
94 EventSet eventSet = eventQueue.remove(); |
93 try { |
95 for (Event event : eventSet) { |
94 EventSet eventSet = eventQueue.remove(); |
96 System.out.println("FieldMonitor-main receives: "+event); |
95 for (Event event : eventSet) { |
97 if (event instanceof VMStartEvent) { |
96 System.out.println("FieldMonitor-main receives: "+event); |
98 addClassWatch(vm); |
97 if (event instanceof VMStartEvent) { |
99 } else if (event instanceof VMDeathEvent |
98 addClassWatch(vm); |
100 || event instanceof VMDisconnectEvent) { |
99 } else if (event instanceof VMDeathEvent |
101 // exit |
100 || event instanceof VMDisconnectEvent) { |
102 connected = false; |
101 // exit |
103 } else if (event instanceof ClassPrepareEvent) { |
102 connected = false; |
104 // watch field on loaded class |
103 } else if (event instanceof ClassPrepareEvent) { |
105 System.out.println("ClassPrepareEvent"); |
104 // watch field on loaded class |
106 ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event; |
105 System.out.println("ClassPrepareEvent"); |
107 ReferenceType refType = classPrepEvent |
106 ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event; |
108 .referenceType(); |
107 ReferenceType refType = classPrepEvent |
109 addFieldWatch(vm, refType); |
108 .referenceType(); |
110 } else if (event instanceof ModificationWatchpointEvent) { |
109 addFieldWatch(vm, refType); |
111 watched++; |
110 } else if (event instanceof ModificationWatchpointEvent) { |
112 System.out.println("sleep for 500 ms"); |
111 watched++; |
113 Thread.sleep(500); |
112 System.out.println("sleep for 500 ms"); |
114 |
113 Thread.sleep(500); |
115 ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event; |
114 |
116 System.out.println("old=" |
115 ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event; |
117 + modEvent.valueCurrent()); |
116 System.out.println("old=" |
118 System.out.println("new=" + modEvent.valueToBe()); |
117 + modEvent.valueCurrent()); |
|
118 System.out.println("new=" + modEvent.valueToBe()); |
|
119 } |
|
120 } |
|
121 System.out.println("resume..."); |
|
122 eventSet.resume(); |
|
123 } catch (com.sun.jdi.VMDisconnectedException exc) { |
|
124 // Guess this means it's not connected anymore, |
|
125 // sometimes this happens and everything else hangs, just return. |
|
126 return; |
119 } |
127 } |
120 } |
|
121 System.out.println("resume..."); |
|
122 eventSet.resume(); |
|
123 } |
128 } |
124 // Shutdown begins when event thread terminates |
129 // Shutdown begins when event thread terminates |
125 try { |
130 try { |
126 errThread.join(); // Make sure output is forwarded |
131 errThread.join(); // Make sure output is forwarded |
127 outThread.join(); |
132 outThread.join(); |