X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugThread.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugThread.java index 4581ee5..366badf 100644 --- a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugThread.java +++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugThread.java @@ -21,20 +21,16 @@ import org.eclipse.debug.core.model.IThread; * Window - Preferences - Java - Code Style - Code Templates */ public class XDebugThread extends XDebugElement implements IThread, IDebugEventSetListener { - - /** - * Breakpoints this thread is suspended at or null - * if none. - */ - - private IStackFrame[] fStackFrames=null; + private IStackFrame[] fStackFrames; private IBreakpoint[] fBreakpoints; - /** - * Whether this thread is stepping - */ + /* Whether this thread is stepping */ private boolean fStepping = false; + private boolean fTerminated = false; + + private int fStepCount = 0; + private int fCurrentStepCount = 0; /** * Constructs a new thread for the given target @@ -44,36 +40,66 @@ public class XDebugThread extends XDebugElement implements IThread, IDebugEventS public XDebugThread(XDebugTarget target) { super(target); DebugPlugin.getDefault().addDebugEventListener(this); + fStackFrames = null; + } + + public void incrementStepCounter() { + fStepCount++; } - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IThread#getStackFrames() - */ public IStackFrame[] getStackFrames() throws DebugException { - if (isSuspended()) { - if (fStackFrames==null) - { -// XDebugCorePlugin.log(IStatus.INFO,"vor getStackFrames"); - fStackFrames=((XDebugTarget) getDebugTarget()).getStackFrames(); -// XDebugCorePlugin.log(IStatus.INFO,"nach getStackFrames"); + IStackFrame[] newStackFrames = null; + + if (isSuspended()) { + if (fStepCount > fCurrentStepCount) { + newStackFrames = ((XDebugTarget) getDebugTarget()).getStackFrames(); + + for (int i = 0; i < newStackFrames.length; i++) { + ((XDebugStackFrame)newStackFrames[i]).getVariables(); + } + + if (fStackFrames != null) { + if (newStackFrames.length >= fStackFrames.length) { + int delta = newStackFrames.length - fStackFrames.length + 1; + + for (int i = fStackFrames.length - 1; i >= 0; i--) { + if (((XDebugStackFrame) fStackFrames[i]).equals(((XDebugStackFrame) newStackFrames[newStackFrames.length - delta]))) { + int b = 2; b++; + //((XDebugStackFrame) newStackFrames[newStackFrames.length - delta]).evaluateChange((XDebugStackFrame) fStackFrames[i]); + } else if (((XDebugStackFrame) fStackFrames[i]).isSameStackFrame(newStackFrames[newStackFrames.length - delta])) { + //((XDebugStackFrame) newStackFrames[newStackFrames.length - delta]).evaluateChange((XDebugStackFrame) fStackFrames[i]); + } + + delta ++; + } + } else { + } + } + + fCurrentStepCount++; + + fStackFrames = newStackFrames; } return fStackFrames; } else { return new IStackFrame[0]; } } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IThread#hasStackFrames() */ public boolean hasStackFrames() throws DebugException { return isSuspended(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IThread#getPriority() */ public int getPriority() throws DebugException { return 0; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IThread#getTopStackFrame() */ @@ -82,17 +108,17 @@ public class XDebugThread extends XDebugElement implements IThread, IDebugEventS if (frames.length > 0) { return frames[0]; } + return null; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IThread#getName() */ public String getName() throws DebugException { -// if (fStackFrames!=null) -// return fStackFrames[0].getName(); -// else - return "Thread[1]"; + return "Thread[1]"; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IThread#getBreakpoints() */ @@ -102,6 +128,7 @@ public class XDebugThread extends XDebugElement implements IThread, IDebugEventS } return fBreakpoints; } + /** * Sets the breakpoints this thread is suspended at, or null * if none. @@ -112,109 +139,125 @@ public class XDebugThread extends XDebugElement implements IThread, IDebugEventS protected void setBreakpoints(IBreakpoint[] breakpoints) { fBreakpoints = breakpoints; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#canResume() */ public boolean canResume() { return isSuspended(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend() */ public boolean canSuspend() { - return !isSuspended(); + return !isTerminated() && !isSuspended(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#isSuspended() */ public boolean isSuspended() { - return getDebugTarget().isSuspended(); + return fTarget.isSuspended(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#resume() */ public void resume() throws DebugException { - fStackFrames=null; fBreakpoints=null; - getDebugTarget().resume(); + fTarget.resume(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#suspend() */ public void suspend() throws DebugException { - getDebugTarget().suspend(); + fTarget.suspend(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#canStepInto() */ public boolean canStepInto() { return isSuspended(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#canStepOver() */ public boolean canStepOver() { return isSuspended(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#canStepReturn() */ public boolean canStepReturn() { - if (fStackFrames!=null) - return (fStackFrames.length>1); - else + if (fStackFrames != null) { + return (fStackFrames.length > 1); + } else { return false; + } } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#isStepping() */ public boolean isStepping() { return fStepping; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#stepInto() */ public void stepInto() throws DebugException { - fStackFrames=null; fBreakpoints=null; - ((XDebugTarget)getDebugTarget()).step_into(); + fTarget.step_into(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#stepOver() */ public void stepOver() throws DebugException { - fStackFrames=null; fBreakpoints=null; - ((XDebugTarget)getDebugTarget()).step_over(); + fTarget.step_over(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IStep#stepReturn() */ public void stepReturn() throws DebugException { - fStackFrames=null; fBreakpoints=null; - ((XDebugTarget)getDebugTarget()).step_out(); - + fTarget.step_out(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ITerminate#canTerminate() */ public boolean canTerminate() { return !isTerminated(); } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ITerminate#isTerminated() */ public boolean isTerminated() { - return getDebugTarget().isTerminated(); + return fTerminated; } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.ITerminate#terminate() */ public void terminate() throws DebugException { - getDebugTarget().terminate(); + fTarget.getDebugConnection().stop(); + fTerminated = true; } + public void terminated() throws DebugException { + fTerminated = true; + } + /** * Sets whether this thread is stepping * @@ -225,13 +268,11 @@ public class XDebugThread extends XDebugElement implements IThread, IDebugEventS } public void handleDebugEvents(DebugEvent[] events) { - DebugEvent de=events[0]; - System.out.println(de.toString()); - + DebugEvent de = events[0]; + System.out.println(de.toString()); } public void removeEventListeners() { DebugPlugin.getDefault().removeDebugEventListener(this); - } -} +} \ No newline at end of file