X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.java b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.java index 36d415b..660623d 100644 --- a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.java +++ b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.java @@ -29,6 +29,7 @@ import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IMemoryBlock; import org.eclipse.debug.core.model.IProcess; +import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.core.model.IThread; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.model.IWorkbenchAdapter; @@ -105,6 +106,11 @@ public class PHPDebugTarget extends PHPDebugElement implements IPHPDebugTarget, fireChangeEvent(); fireThreadCreateEvent(phpThread); } + + public void updateThreads(PHPThread phpThread) { + fireChangeEvent(); + fireThreadCreateEvent(phpThread); + } private void fireChangeEvent() { DebugEvent ev = new DebugEvent(this, DebugEvent.CHANGE); @@ -148,6 +154,10 @@ public class PHPDebugTarget extends PHPDebugElement implements IPHPDebugTarget, return PHPDebugCorePlugin.PLUGIN_ID; } + public IStackFrame[] getStackFrames () throws DebugException { + return (IStackFrame[]) this.phpDBGProxy.getDBGInterface ().getStackList (); + } + public IDebugTarget getDebugTarget() { return this; } @@ -163,6 +173,17 @@ public class PHPDebugTarget extends PHPDebugElement implements IPHPDebugTarget, public synchronized boolean isTerminated() { return state.isTerminated(); } + + private synchronized void terminateThreads () { + int i; + + try { + for (i = 0; i < threads.length; i++) { + threads[i].terminate (); + } + } catch (DebugException e) { + } + } public synchronized void terminate() { // This method is synchronized to control a race condition between the @@ -173,6 +194,7 @@ public class PHPDebugTarget extends PHPDebugElement implements IPHPDebugTarget, return; state.setTerminated(true); phpDBGProxy.stop(); + terminateThreads (); this.threads = new PHPThread[0]; fireChangeEvent(); IBreakpointManager manager = DebugPlugin.getDefault() @@ -239,12 +261,12 @@ public class PHPDebugTarget extends PHPDebugElement implements IPHPDebugTarget, public void breakpointChanged (IBreakpoint breakpoint, IMarkerDelta arg1) { PHPLineBreakpoint bp; bp = (PHPLineBreakpoint) breakpoint; - + try { - if (breakpoint.isEnabled () && // Check if breakpoint state changed from disabled to enabled + if (breakpoint.isEnabled () && // Check if breakpoint state changed from disabled to enabled !arg1.getAttribute ("org.eclipse.debug.core.enabled", false)) { this.getPHPDBGProxy().addBreakpoint(breakpoint); - } + } else if (!breakpoint.isEnabled () && // Check if breakpoint state changed from enabled to disabled arg1.getAttribute ("org.eclipse.debug.core.enabled", true)) { this.getPHPDBGProxy().removeBreakpoint(breakpoint); @@ -255,7 +277,7 @@ public class PHPDebugTarget extends PHPDebugElement implements IPHPDebugTarget, this.getPHPDBGProxy().addBreakpoint(breakpoint); // and then we add again (else DBG would have two breakpoints!). } else { - this.getPHPDBGProxy().removeBreakpoint(breakpoint); + this.getPHPDBGProxy().removeBreakpoint(breakpoint); } } else { // All other cases will terminate the debugger @@ -319,7 +341,13 @@ public class PHPDebugTarget extends PHPDebugElement implements IPHPDebugTarget, } }; } - return null; + else { + if (arg0 == PHPDebugElement.class) { + return this; + } + + return super.getAdapter(arg0); + } } public IProcess getProcess() {