package jde.debugger; import com.sun.jdi.connect.Connector; import com.sun.jdi.connect.LaunchingConnector; import com.sun.jdi.Bootstrap; import com.sun.jdi.VirtualMachine; import com.sun.jdi.connect.VMStartException; import com.sun.jdi.connect.IllegalConnectorArgumentsException; import com.sun.jdi.connect.AttachingConnector; import com.sun.jdi.connect.ListeningConnector; import java.io.BufferedReader; import java.io.PrintWriter; import java.util.Map; import java.util.Collection; import java.io.IOException; import java.util.List; import java.io.InputStreamReader; import java.util.HashMap; import java.util.HashSet; import java.util.Collections; import java.util.ArrayList; import java.util.Iterator; import jde.debugger.command.DebugCommandFactory; /** * Class of JDEbug debuggers. *

* This class defines methods for communicating with the JDE. It * maintains a list of active applications. It passes application * commands to the apps specified by the commands. *

* See {@link Protocol Protocol class} for command/response formats and * {@link EventHandler EventHandler} for event set formats. *

* JDEbug responds to every command with either a result or error * message. *

* * @author Amit Kumar * @since 0.1 * @author Paul Kinnucan * @since 1.3 */ public class Jdebug extends Thread implements Protocol { /******************************************************************** * CONSTRUCTORS * ********************************************************************/ protected Jdebug() {} public void init() throws IOException { jde.init(); } /******************************************************************** * METHODS * ********************************************************************/ /** * Runs the debugger thread. This method reads and executes commands * from the JDE. */ public void run() { List command = JDE.getJDE().nextCommand(); while (command != null) { final Integer proc_id = Integer.valueOf(command.get(0).toString()); final Integer cmd_id = Integer.valueOf(command.get(1).toString()); final String cmd_name = command.get(2).toString().toLowerCase(); final List arguments = command.subList(3, command.size()); try { Thread cmd = DebugCommandFactory.theFactory.createCommand(proc_id, cmd_id, cmd_name, arguments); cmd.start(); } catch (JDEException ex) { jde.signal(proc_id, ERROR, "Error occurred while executing " + cmd_name + ". Error: " + ex); } command = JDE.getJDE().nextCommand(); } } public static Jdebug getTheDebugger() { return theDebugger; } /******************************************************************** * FIELDS * ********************************************************************/ /** * The ID of jdebug. This is used by jde when issuing commands that * are not specific to any particular vm, for instance, 'quit', or * the command used to launch new application/vms.
* It is the Integer -1. */ public static final Integer debuggerID = new Integer(-1); public static Jdebug theDebugger = new Jdebug(); private JDE jde = JDE.getJDE(); private ProcessRegistry procRegistry = ProcessRegistry.getRegistry(); } // Jdebug /* * $Log: Jdebug.java,v $ * Revision 1.10 2001/08/14 05:15:01 paulk * Miscellaneous updates. * * Revision 1.9 2001/03/24 05:36:48 paulk * Updated to reflect reorganization of debuggee code. * * Revision 1.8 2000/10/20 04:18:29 paulk * *** empty log message *** * * Revision 1.7 2000/07/28 06:26:31 paulk * Committing all modified files. * * Revision 1.6 2000/02/14 06:25:34 paulk * Implemented workaround for JPDA bug that prevented setting of * breakpoints in inner classes. * * Revision 1.5 2000/01/31 12:41:39 paulk * * Continue converting commands from functional to OO implementation. * * Revision 1.4 2000/01/30 12:47:40 paulk * Changed to a singleton class. Implemented support for object-oriented * commands created by DebugCommandFactory. Reimplemented launch and * listen commands as object-oriented commands. * * Revision 1.3 2000/01/28 04:24:55 paulk * Threaded listen commands. Moved launch, attach, and listen commands * from Application to Jdebug class. Did general cleanup of Jdebug and * Application class, including using more specific names for some * variables, moving fields to the end of files, rewriting comments. * */ // End of Jdebug.java