package jde.debugger; import java.util.Iterator; import java.util.List; import com.sun.jdi.Bootstrap; import com.sun.jdi.VirtualMachine; import com.sun.jdi.connect.Connector; import com.sun.jdi.VMDisconnectedException; /** * Contains a couple of static functions that simplify managing * virtual machines. Some kind of rearrangement between this class and * the {@link Debugger} class should probably be made - this class * doesn't feel so meaningful at the moment, whereas the methods for * launching/attaching/listening to VMs in the Debugger class are * messy. Something for the future. * *
* Created: Tue Jan 08 18:49:28 2002
*
* @author Petter Måhlén
* @version 1.0
*/
public class VMUtil {
private static List s_connectors = Bootstrap.virtualMachineManager().allConnectors();
private VMUtil() {
}
/**
* Gets a connector.
*
* @param type connector class name
*
*/
public static final Connector getConnector(String name) {
Iterator iter = s_connectors.iterator();
while (iter.hasNext()) {
Connector connector = (Connector)iter.next();
if (connector.name().equals(name)) {
return connector;
}
}
return null;
}
/**
* Shut down the indicated virtual machine.
*
* @param vm a VirtualMachine
value
*/
public static void shutdown(VirtualMachine vm) {
/*
* taken from the original (Amit Kumar) DebuggeeProcess.shutdown()
*
* XXX
* As far as I can understand, vm.dispose() doesn't terminate the process
* that is being debugged. It seems to me as if doing so would be necessary
* (otherwise the VM process should be orphaned), so this needs to be
* analysed. / Petter
*/
// isolate the process first
Process process = null;
if (vm != null) {
try {
process = vm.process();
vm.dispose();
}
catch (VMDisconnectedException e) {
// If it's already disconnected, no problem, so just ignore it.
}
}
if (process != null) {
process.destroy();
// XXX sun's jdb implementation works a lot to make sure
// the stderr and stdout are dumped before killing
// things. i'm not sure how important it is, or even how
// well it works (given i can't test it)
// sooo, if the reader finds bugs with the output handling
// on finish, lemme know. (comment by Amit Kumar)
}
}
}// VMUtil