Added code change that will leave the debug session running even after the script...
[phpeclipse.git] / net.sourceforge.phpeclipse.debug.core / src / net / sourceforge / phpdt / internal / debug / core / model / PHPDebugTarget.java
index 36d415b..660623d 100644 (file)
@@ -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() {