From: Jan P. <jp...@us...> - 2006-09-25 06:19:35
|
Update of /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv21662/src/org/epic/debug Modified Files: PerlDB.java StackFrame.java Log Message: Implemented RFE [ 1564860 ] Keep debugger from suspending at first statement. Index: PerlDB.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/PerlDB.java,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- PerlDB.java 16 Sep 2006 17:56:17 -0000 1.50 +++ PerlDB.java 25 Sep 2006 06:19:32 -0000 1.51 @@ -10,19 +10,12 @@ import java.io.PrintWriter; import java.net.InetAddress; import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.StringTokenizer; +import java.util.*; import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.ui.progress.UIJob; -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.*; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.ITerminate; @@ -123,9 +116,14 @@ private String mVarGlobalString; private VarUpdateJob mVarUpdateJob; private StackFrame mStackFrameOrg; + + private final IDebugEventSetListener mAutoResume = new AutoResumeOnStart(); public PerlDB(DebugTarget fTarget) throws CoreException { + if (!PerlEditorPlugin.getDefault().getSuspendAtFirstPreference()) + PerlDebugPlugin.getDefault().registerDebugEventListener(mAutoResume); + mTarget = fTarget; mWorkingDir = mTarget.getLocalWorkingDir(); mCurrentCommand = mCommandNone; @@ -182,7 +180,7 @@ command = mDBinitPerl_5_8; } startCommand(mCommandExecuteCode, command, false, this); - startCommand(mCommandExecuteCode, mDBinitFlush, false, this); + startCommand(mCommandExecuteCode, mDBinitFlush, false, this); // /****************test only*****/ // getLaunch().setAttribute(PerlLaunchConfigurationConstants.ATTR_DEBUG_IO_PORT,"4041"); @@ -198,12 +196,11 @@ generateDebugInitEvent(); if (isBreakPointReached()) { - DebugEvent event = new DebugEvent(mThreads[0], DebugEvent.BREAKPOINT, DebugEvent.BREAKPOINT); DebugEvent debugEvents[] = new DebugEvent[1]; debugEvents[0] = event; - DebugPlugin.getDefault().fireDebugEventSet(debugEvents); + DebugPlugin.getDefault().fireDebugEventSet(debugEvents); } } else @@ -212,6 +209,8 @@ // if (mTarget == null || ! (mTarget instanceof CGITarget)) generateDebugTermEvent(); } + +// startCommand(mCommandResume, mThreads[0]); } /* @@ -1104,8 +1103,6 @@ mVarUpdateJob = new VarUpdateJob("Retrieving Variables", fOutputString); mVarUpdateJob.setPriority(Job.SHORT); mVarUpdateJob.schedule(); - ; - } private IPPosition getCurrent_IP_Position() @@ -1220,7 +1217,7 @@ private void setVarList(StackFrame fFrame) { - ArrayList lVarList = null; + List lVarList = null; if (fFrame == null) return; if (mStopVarUpdate == true) return; @@ -1238,8 +1235,11 @@ if (lVarList != null) mVarParser.parseVars(mVarGlobalString, PerlDebugVar.IS_GLOBAL_SCOPE, lVarList); - else lVarList = mVarParser.parseVars(mVarGlobalString, - PerlDebugVar.IS_GLOBAL_SCOPE); + else if (mVarGlobalString != null) + lVarList = mVarParser.parseVars( + mVarGlobalString, + PerlDebugVar.IS_GLOBAL_SCOPE); + else lVarList = Collections.EMPTY_LIST; if (mStopVarUpdate == true) if (mStopVarUpdate == true) { @@ -1625,7 +1625,11 @@ + mIsCommandFinished); return (Status.OK_STATUS ); } - setVarList(frame); +try { setVarList(frame);} +catch (Throwable t) +{ + t.printStackTrace(); +} // System.err.println("Time needed for parsing vars: // "+(start-System.currentTimeMillis())+"\n"); // start = System.currentTimeMillis(); @@ -1728,4 +1732,42 @@ return path + ":" + line; } } -} + + /** + * Responsible for resuming the execution immediately after + * the initial suspend state is reached (if a user-defined + * preference says so). + */ + private class AutoResumeOnStart implements IDebugEventSetListener + { + public void handleDebugEvents(DebugEvent[] events) + { + boolean unregister = false; + for (int i = 0; i < events.length; i++) + { + if (events[i].getKind() == DebugEvent.SUSPEND && + !isBreakPointReached()) + { + UIJob job = new UIJob("PerlDB.AutoResumeOnStart") { + public IStatus runInUIThread(IProgressMonitor monitor) + { + startCommand(mCommandResume, mThreads[0]); + return Status.OK_STATUS; + } + }; + job.setPriority(Job.SHORT); + job.schedule(); + unregister = true; + break; + } + else if (events[i].getKind() == DebugEvent.TERMINATE) + { + unregister = true; + break; + } + } + if (unregister) + PerlDebugPlugin.getDefault().unregisterDebugEventListener(this); + } + } +} \ No newline at end of file Index: StackFrame.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.debug/src/org/epic/debug/StackFrame.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- StackFrame.java 7 Mar 2006 19:39:12 -0000 1.12 +++ StackFrame.java 25 Sep 2006 06:19:32 -0000 1.13 @@ -1,9 +1,6 @@ package org.epic.debug; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.ResourceBundle; +import java.util.*; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.DebugException; @@ -34,7 +31,7 @@ private PerlDebugThread mThread; private int mIP_Line; private IPath mIP_Path; - private ArrayList mVarsOrg; + private List mVarsOrg; static HashMap mPerlInternalVars; static{ @@ -75,7 +72,7 @@ } public void updateVars() { - ArrayList vars= (ArrayList) mVarsOrg.clone(); + List vars= new ArrayList(mVarsOrg); String lVarname = null; PerlDebugVar var = null; @@ -130,7 +127,7 @@ mVars = fVars; } - public void setVariables(ArrayList fVars) throws DebugException { + public void setVariables(List fVars) throws DebugException { mVarsOrg = fVars; updateVars(); } |