Name: tb29552 Date: 01/19/2001
/*
If a debugger calls com.sun.tools.jdi.VirtualMachineImpl.allClasses()
while the debugee is actively running (and causing more classes to
be loaded) you will sometimes get:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.TreeMap$Iterator.next(TreeMap.java:1020)
at java.util.AbstractCollection.toArray(AbstractCollection.java:173)
at java.util.ArrayList.<init>(ArrayList.java:126)
at
com.sun.tools.jdi.VirtualMachineImpl.allClasses(VirtualMachineImpl.java:245)
at ClassesByName2.runTests(ClassesByName2.java:55)
at JDIScaffold.startTests(JDIScaffold.java:185)
at ClassesByName2.main(ClassesByName2.java:46)
*/
/**
* @test @(#)ClassesByName2.java 1.1 01/01/19
* @bug 4406439
* @author Tim Bell (based on ClassesByName by Robert Field)
*
* @run build JDIScaffold VMConnection
* @run build ClassesByName2
*
* @summary ClassesByName2 verifies that all the classes in the
* loaded class list can be found with classesByName..
*
* @run main/othervm ClassesByName2 ClassesByName2Debugee
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
import com.sun.jdi.request.*;
import java.util.List;
import java.util.Iterator;
class ClassesByName2Debugee {
private static final String name = "ClassesByName2Debugee: ";
public static void main(String args[]) {
/*
* Do something that will cause a lot
* more classes to be loaded...
*/
System.out.print (name);
System.out.println(" starting...");
java.awt.Toolkit.getDefaultToolkit();
System.out.print (name);
System.out.println(" finished...");
}
}
public class ClassesByName2 extends JDIScaffold {
final String[] args;
ClassesByName2(String args[]) throws Exception {
super();
this.args = args;
}
public static void main(String args[]) throws Exception {
new ClassesByName2(args).startTests();
}
protected void runTests() throws Exception {
connect(args);
waitForVMStart();
vm().resume();
List all = vm().allClasses();
for (Iterator it = all.iterator(); it.hasNext(); ) {
ReferenceType cls = (ReferenceType)it.next();
String name = cls.name();
List found = vm().classesByName(name);
if (found.contains(cls)) {
System.out.println("Found class: " + name);
} else {
System.out.println("CLASS NOT FOUND: " + name);
throw new Exception("CLASS NOT FOUND (by classesByName): " +
name);
}
}
// Allow application to complete
resumeToVMDeath();
}
}
======================================================================