/** @return name of proces for given DebuggerInfo. */ public String getProcessName(DebuggerInfo info) { if (info instanceof RemoteDebuggerInfo) { if (((RemoteDebuggerInfo) info).getConnector().transport().name().equals("dt_shmem")) { Argument a = (Argument) ((RemoteDebuggerInfo) info).getArgs().get("name"); if (a == null) return "localhost:???"; else return "localhost:" + a.value(); } else if (((RemoteDebuggerInfo) info) .getConnector() .transport() .name() .equals("dt_socket")) { Argument name = (Argument) ((RemoteDebuggerInfo) info).getArgs().get("hostname"); Argument port = (Argument) ((RemoteDebuggerInfo) info).getArgs().get("port"); return ((name == null) ? "???:" : (name.value() + ":")) + ((port == null) ? "???" : (port.value())); } else return "???"; } else return (info.getStopClassName() != null) ? info.getStopClassName() : info.getClassName(); }
/** * Starts the debugger. The method stops the current debugging (if any) and takes information from * the provided info (containing the class to start and arguments to pass it and name of class to * stop debugging in) and starts new debugging session. * * @param info debugger info about class to start * @exception DebuggerException if an error occures during the start of the debugger */ public void startDebugger(DebuggerInfo info) throws DebuggerException { debuggerInfo = info; if (virtualMachine != null) finishDebugger(); stopOnMain = info.getStopClassName() != null; mainClassName = info .getClassName(); // S ystem.out.println ("JPDADebugger stop on " + info.getStopClassName // ()); // NOI18N // open output window ... super.startDebugger(info); // stop on main if (stopOnMain) { try { String stopClassName = debuggerInfo.getStopClassName(); AbstractDebugger d = (AbstractDebugger) TopManager.getDefault().getDebugger(); breakpointMain = new CoreBreakpoint[stopMethodNames.length]; for (int x = 0; x < breakpointMain.length; x++) { breakpointMain[x] = (CoreBreakpoint) d.createBreakpoint(true); breakpointMain[x].setClassName(""); // NOI18N breakpointMain[x].setMethodName(stopMethodNames[x]); // NOI18N CoreBreakpoint.Action[] a = breakpointMain[x].getActions(); int i, ii = a.length; for (i = 0; i < ii; i++) if (a[i] instanceof PrintAction) { ((PrintAction) a[i]).setPrintText(bundle.getString("CTL_Stop_On_Main_print_text")); } breakpointMain[x].setClassName(stopClassName); } addPropertyChangeListener( new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent ev) { if (ev.getPropertyName().equals(PROP_STATE)) { if ((((Integer) ev.getNewValue()).intValue() == DEBUGGER_STOPPED) || (((Integer) ev.getNewValue()).intValue() == DEBUGGER_NOT_RUNNING)) { if (breakpointMain != null) { for (int x = 0; x < breakpointMain.length; x++) breakpointMain[x].remove(); breakpointMain = null; } removePropertyChangeListener(this); } } } }); } catch (DebuggerException e) { e.printStackTrace(); } } // start & init remote debugger ............................................ boolean launch = false; if (info instanceof ReconnectDebuggerInfo) { virtualMachine = reconnect((ReconnectDebuggerInfo) info); } else if (info instanceof RemoteDebuggerInfo) { virtualMachine = connect((RemoteDebuggerInfo) info); } else { virtualMachine = launch(info); process = virtualMachine.process(); showOutput(process, STD_OUT, STD_OUT); connectInput(process); launch = true; } requestManager = virtualMachine.eventRequestManager(); operator = new Operator( virtualMachine, launch ? new Runnable() { public void run() { startDebugger(); } } : null, new Runnable() { public void run() { try { finishDebugger(); } catch (DebuggerException e) { } } }); operator.start(); if (!launch) startDebugger(); }