From: Stephan R. <ste...@us...> - 2004-04-03 20:54:56
|
Update of /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9007/src/org/epic/debug Modified Files: PerlDB.java DebugTarget.java PerlLaunchConfigurationConstants.java PerlDebugPlugin.java Target.java Log Message: Proxy(STDIO,STERR) for remote debugging added Logging mechanism for plugin added Index: DebugTarget.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/DebugTarget.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- DebugTarget.java 29 Mar 2004 18:18:50 -0000 1.6 +++ DebugTarget.java 3 Apr 2004 20:42:34 -0000 1.7 @@ -96,7 +96,7 @@ * @see org.eclipse.debug.core.model.ITerminate#canTerminate() */ public boolean canTerminate() { - return true; + return ! isTerminated(); } /** Index: PerlDB.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/PerlDB.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- PerlDB.java 29 Mar 2004 18:18:50 -0000 1.12 +++ PerlDB.java 3 Apr 2004 20:42:33 -0000 1.13 @@ -9,8 +9,8 @@ import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IDebugTarget; +import org.eclipse.debug.core.model.ITerminate; import org.eclipse.debug.core.model.IThread; -import org.eclipse.core.resources.IProject; import java.net.*; import java.io.*; import gnu.regexp.*; @@ -22,9 +22,10 @@ import org.eclipse.core.runtime.IPath; import java.util.*; import org.eclipse.debug.core.model.IVariable; +import org.epic.debug.util.DebuggerProxy; import org.epic.debug.util.PathMapperCygwin; +import org.epic.debug.util.RemotePort; import org.epic.debug.varparser.*; -import org.epic.perleditor.editors.util.PerlExecutableUtilities; import org.epic.perleditor.PerlEditorPlugin; @@ -38,15 +39,14 @@ * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ -public class PerlDB implements IDebugElement { +public class PerlDB implements IDebugElement, ITerminate { /*****************CGI-Test*************************/ private boolean debug_cgi = false; /*************************************************/ private Target mTarget; private CommandThread mCommandThread; - private ServerSocket mServerSocket; - private Socket mClientSocket; + private RemotePort mRemotePort; private Process mProcess; private int mCurrentCommand; /* NO debugging meassages are created for sub-commands*/ @@ -126,6 +126,7 @@ } + private class IP_Position { int IP_Line; @@ -171,7 +172,7 @@ } } - + public PerlDB(DebugTarget fTarget) throws InstantiationException { @@ -212,36 +213,12 @@ mReEnterFrame = new RE("^\\s*entering",0, RESyntax.RE_SYNTAX_PERL5); mReExitFrame = new RE("^\\s*exited",0, RESyntax.RE_SYNTAX_PERL5); } catch (REException e){ new InstantiationException("Couldn't RegEX");}; - String env[] = new String[1]; + + + mRemotePort = new RemotePort(4444); + mRemotePort.startConnect(); - mServerSocket = null ; - try { - mServerSocket = new ServerSocket(4444); - } catch (IOException e) { - throw new InstantiationException("Couldn't listen to Debug-Port"); - } - - mClientSocket = null; - - Thread connect = - new Thread() - { - public void run() - { - try { - System.out.println("Trying to Accept"); - mClientSocket = mServerSocket.accept(); - System.out.println("Accept !!!!!!!\n"); - } catch (IOException e) { - System.out.println("Accept failed: 4444"); - } - } - }; - - connect.start(); - String nix[] = PerlDebugPlugin.getDebugEnv(); - try{ //Runtime.getRuntime(). // exec("perl -d "+startfile,PerlDebugPlugin.getDebugEnv(), new File(mWorkingDir.toString())); @@ -255,6 +232,7 @@ { mProcess= mTarget.startPerlProcess(); + mWorkingDir = mTarget.getWorkingDir(); } @@ -266,29 +244,19 @@ //DebugPlugin.newProcess(getLaunch(),mProcess,"Echo-Process"); ((PerlDebugPlugin)PerlDebugPlugin.getDefault()).registerDebugger(this); - try{ - synchronized(this) - { - for( int x=0; ((x < 100) || debug_cgi) && (mClientSocket == null) ; ++x) - { - System.out.println("Waiting for connect (Try "+x+" of 100)\n"); - wait(100); - } - } - - if( mClientSocket == null) + + + + if( ! mRemotePort.waitForConnect(true) ) { shutdown(); throw new InstantiationException("Couldn't connect to Debugger"); } - mDebugIn = new PrintWriter(mClientSocket.getOutputStream(), true); - mDebugOut = new BufferedReader( - new InputStreamReader( mClientSocket.getInputStream()) - ); - }catch(IOException e){throw new InstantiationException("Failing establish Communication with Debug Process !!!");} - catch(InterruptedException e){throw new InstantiationException("Failing establish Communication with Debug Process !!!");} + mDebugIn = mRemotePort.getWriteStream(); + mDebugOut = mRemotePort.getReadStream(); + mPathMapper = null; String interpreterType = PerlEditorPlugin.getDefault().getPreferenceStore().getString( @@ -299,16 +267,27 @@ mPathMapper = new PathMapperCygwin(); } + startCommand(mCommandClearOutput,null,false, this); + if( ! isTerminated(this) ) { startCommand(mCommandExecuteCode,mDBinitPerl,false, this); +// /****************test only*****/ +// getLaunch().setAttribute(PerlLaunchConfigurationConstants.ATTR_DEBUG_IO_PORT,"4041"); +// getLaunch().setAttribute(PerlLaunchConfigurationConstants.ATTR_DEBUG_ERROR_PORT,"4042"); +// DebuggerProxy p = new DebuggerProxy(this, "Proxy"); +// getLaunch().addProcess(p); +// mTarget.setProcess(p); + /***********************************/ PerlDebugPlugin.getPerlBreakPointmanager().addDebugger(this); + updateStackFrames(null); generateDebugInitEvent(); } else - generateDebugTermEvent(); + generateDebugTermEvent(); + } /* (non-Javadoc) @@ -384,14 +363,28 @@ startCommand(mCommandStepReturn, fDest); } - public boolean canTerminate(Object fDest) { - return true; + public boolean canTerminate() + { + return canTerminate(null); + } + + public boolean canTerminate(Object fDest) { + return ! isTerminated(); } + public boolean isTerminated() { + return isTerminated(null); + } public boolean isTerminated(Object fDest) { return (mProcess == null); } + + public void terminate() + { + terminate(null); + } + public void terminate(Object fDest) { abortSession(); @@ -518,14 +511,10 @@ void shutdown(boolean fUnregister) { - try{ - if( mDebugIn != null) mDebugIn.close(); - if( mDebugOut != null) mDebugOut.close(); - if( mProcess != null) mProcess.destroy(); - if( mServerSocket != null) mServerSocket.close(); - }catch( Exception e){}; + mRemotePort.shutdown(); mProcess.destroy(); mProcess = null; + generateTargetTermEvent(); if( fUnregister ) ((PerlDebugPlugin)PerlDebugPlugin.getDefault()).unregisterDebugger(this); } @@ -617,6 +606,15 @@ DebugPlugin.getDefault().fireDebugEventSet(debugEvents); } + public void generateTargetTermEvent() + { + DebugEvent event = null; + + event = new DebugEvent(mTarget, DebugEvent.TERMINATE, DebugEvent.STEP_END); + DebugEvent debugEvents[] = new DebugEvent[1]; + debugEvents[0]=event; + DebugPlugin.getDefault().fireDebugEventSet(debugEvents); + } private boolean waitForCommandToFinish() @@ -791,7 +789,7 @@ return mThreads; } - public Process getProcess() + public Process getDebugProcess() { return mProcess; } @@ -1200,5 +1198,54 @@ shutdown(); super.finalize(); } + +public void redirectIO(int fPort) +{ + String ip= null; + + try { + ip = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + String command = + "require IO::Socket; {my $OUT;"+ "$OUT = new IO::Socket::INET("+ + "Timeout => \'10\',"+ + "PeerAddr => \'"+ip+":"+fPort+"\',"+ + "Proto => 'tcp',);"+ + "STDOUT->fdopen($OUT,\"w\");"+ + "STDIN->fdopen($OUT,\"r\");}"; + + startCommand(mCommandExecuteCode,command,false, this); + + + +} + +public void redirectError(int fPort) +{ + String ip= null; + + try { + ip = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + String command = + "require IO::Socket; {my $OUT;"+ + "$OUT = new IO::Socket::INET("+ + "Timeout => \'10\',"+ + "PeerAddr => \'"+ip+":"+fPort+"\',"+ + "Proto => 'tcp',);"+ + "STDERR->fdopen($OUT,\"w\");}"; + + startCommand(mCommandExecuteCode,command,false, this); + +} + +} -} \ No newline at end of file Index: Target.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/Target.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Target.java 31 Mar 2004 19:43:13 -0000 1.2 +++ Target.java 3 Apr 2004 20:42:34 -0000 1.3 @@ -55,6 +55,10 @@ return mProcess; } + public void setProcess( IProcess fProcess) + { + mProcess = fProcess; + } @@ -64,6 +68,7 @@ * @see org.eclipse.debug.core.model.IDebugTarget#getName() */ public String getName() throws DebugException { + return (mProcessName); } @@ -142,6 +147,10 @@ } // if( ! isTerminated()) + + + + /**************org***/ mProcess = DebugPlugin.newProcess(mLaunch,mJavaProcess,mProcessName); return(mJavaProcess); @@ -151,4 +160,5 @@ IPath getWorkingDir() { return mWorkinkDir;} + } \ No newline at end of file Index: PerlDebugPlugin.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/PerlDebugPlugin.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- PerlDebugPlugin.java 27 Mar 2004 10:29:41 -0000 1.8 +++ PerlDebugPlugin.java 3 Apr 2004 20:42:34 -0000 1.9 @@ -10,6 +10,7 @@ import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.debug.core.DebugPlugin ; +import org.epic.debug.util.LogWriter; import org.epic.perleditor.editors.util.PerlExecutableUtilities; @@ -18,6 +19,10 @@ * The main plugin class to be used in the desktop. */ public class PerlDebugPlugin extends AbstractUIPlugin { + + final private static int mScreenLogLevel = 0; + final private static int mLogLevel = Status.WARNING; + //The shared instance. private static PerlDebugPlugin plugin; //Resource bundle. @@ -44,9 +49,66 @@ createEnvArrays(); mBreakPointmanager = new PerlBreakpointManager( DebugPlugin.getDefault()); mDebugger = new ArrayList(); + + getLog().addLogListener(new LogWriter( new File(getStateLocation()+File.separator+".log"),mLogLevel)); + getLog().addLogListener(new LogWriter(System.err, mScreenLogLevel)); + // log(new Status(IStatus.INFO, getUniqueIdentifier(), 150, "Plugin Started", null)); + // log(new Status(IStatus.WARNING, getUniqueIdentifier(), 150, "Plugin Started", null)); } - + public void logOK(String fText, Exception fException) + { + log(IStatus.OK,fText,fException); + } + + public void logOK(String fText) + { + log(IStatus.OK,fText,null); + } + + public void logInfo(String fText, Exception fException) + { + log(IStatus.INFO,fText,fException); + } + + public void logInfo(String fText) + { + log(IStatus.INFO,fText,null); + } + + + + public void logWarning(String fText, Exception fException) + { + log(IStatus.WARNING,fText,fException); + } + + public void logWarning(String fText) + { + log(IStatus.WARNING,fText,null); + } + + + + public void logError(String fText, Exception fException) + { + log(IStatus.ERROR,fText,fException); + } + + public void loglogError(String fText) + { + log(IStatus.ERROR,fText,null); + } + + + + + + + private void log(int fSeverity, String fText, Exception fException) + { + log(new Status(fSeverity, getUniqueIdentifier(), 0, fText, fException)); + } void createEnvArrays() { Process proc = null; @@ -65,7 +127,7 @@ while ((count = in.read(buffer)) > 0) { content.append(new String(buffer)); } - + env = content.toString(); in.close(); } catch(Exception e){}; @@ -131,8 +193,11 @@ * * @param status status to log */ - public static void log(IStatus status) { + private static void log(IStatus status) { getDefault().getLog().log(status); + Throwable e = status.getException(); + if(e != null) + e.printStackTrace(); } /** @@ -158,7 +223,7 @@ } public static void log(Throwable e) { - log(new Status(IStatus.ERROR, getUniqueIdentifier(), 150, "Internal Error", e)); //$NON-NLS-1$ + log(new Status(IStatus.ERROR, getUniqueIdentifier(), 0, "Debug Error", e)); //$NON-NLS-1$ } public static void errorDialog(String message, IStatus status) { Index: PerlLaunchConfigurationConstants.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/PerlLaunchConfigurationConstants.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- PerlLaunchConfigurationConstants.java 31 Mar 2004 19:43:13 -0000 1.5 +++ PerlLaunchConfigurationConstants.java 3 Apr 2004 20:42:34 -0000 1.6 @@ -21,4 +21,9 @@ public final static String ATTR_START_LOCAL = "ATTR_START_LOCAL"; public final static String ATTR_START_REMOTE = "ATTR_START_REMOTE"; public final static String ATTR_PROGRAM_PARAMETERS = "ATTR_PROGRAM_PARAMETERS"; +public final static String ATTR_DEBUG_HOST = "ATTR_DEBUG_HOST"; +public final static String ATTR_DEBUG_PORT = "ATTR_DEBUG_PORT"; +public final static String ATTR_DEBUG_IO_PORT = "ATTR_DEBUG_IO_PORT"; +public final static String ATTR_DEBUG_ERROR_PORT = "ATTR_DEBUG_ERROR_PORT"; + } |