X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugTarget.java b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugTarget.java index 9f31828..43f7c9c 100644 --- a/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugTarget.java +++ b/net.sourceforge.phpeclipse.xdebug.core/src/net/sourceforge/phpeclipse/xdebug/php/model/XDebugTarget.java @@ -5,10 +5,10 @@ package net.sourceforge.phpeclipse.xdebug.php.model; import java.util.List; -import net.sourceforge.phpeclipse.xdebug.core.AbstractDebugConnection; -import net.sourceforge.phpeclipse.xdebug.core.IDebugConnection; import net.sourceforge.phpeclipse.xdebug.core.IPHPDebugEvent; import net.sourceforge.phpeclipse.xdebug.core.IProxyEventListener; +import net.sourceforge.phpeclipse.xdebug.core.IXDebugPreferenceConstants; +import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils; import net.sourceforge.phpeclipse.xdebug.core.PathMapItem; import net.sourceforge.phpeclipse.xdebug.core.XDebugCorePlugin; import net.sourceforge.phpeclipse.xdebug.core.XDebugProxy; @@ -24,66 +24,43 @@ import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IDebugEventSetListener; import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchListener; - import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.core.model.IDebugTarget; +import org.eclipse.debug.core.model.ILineBreakpoint; 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.debug.core.model.IValue; -import org.eclipse.debug.core.model.IVariable; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; -import net.sourceforge.phpeclipse.xdebug.core.xdebug.ResponseListener.DebugResponse; +import net.sourceforge.phpeclipse.xdebug.core.xdebug.ResponseListener; +import net.sourceforge.phpeclipse.xdebug.core.xdebug.XDebugConnection; +import net.sourceforge.phpeclipse.xdebug.core.xdebug.ResponseListener.XDebugResponse; /** * @author Christian * */ -public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunchListener, IDebugEventSetListener, IProxyEventListener{ - // associated system process (VM) +public class XDebugTarget extends XDebugElement implements IDebugTarget, IDebugEventSetListener, IProxyEventListener { private IProcess fProcess; - // containing launch object private ILaunch fLaunch; - // debugPort private int fDebugPort; - // suspend state private boolean fSuspended = false; - // terminated state private boolean fTerminated = false; - // threads private XDebugThread fThread; private IThread[] fThreads; - private AbstractDebugConnection fDebugConnection; + private XDebugConnection fDebugConnection; - private String fIdeKey; + private ResponseListener fResponseListener; + private String fIdeKey; - public XDebugTarget() { - super(null); - } - - /** - * Constructs a new debug target in the given launch and waits until - * someone with the ideKey connects to the Debugproxy - * - * - * @param launch containing launch - * @param process process of the interpreter - * @param ideKey - * @exception CoreException if unable to connect to host - */ - - public XDebugTarget(ILaunch launch, IProcess process, String ideKey) throws CoreException { - init(launch, process, ideKey); - } /** * Constructs a new debug target in the given launch and waits until @@ -95,30 +72,19 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch * @param ideKey * @param pathMap Pathmap for the debug session * @exception CoreException if unable to connect to host - */ - - /*public XDebugTarget(ILaunch launch, IProcess process, String ideKey, List pathMap) throws CoreException { - super(null); - init(launch, process, ideKey,pathMap); - }*/ - - private void init(ILaunch launch, IProcess process, String ideKey/*,List pathMap*/) { + */ + public XDebugTarget(ILaunch launch, IProcess process, String ideKey) throws CoreException { fLaunch = launch; fProcess = process; - fTarget = this; fDebugConnection = null; fThread = null; fThreads = new IThread[0]; fIdeKey = ideKey; - XDebugProxy proxy = XDebugCorePlugin.getDefault().getXDebugProxy(); - proxy.addProxyEventListener(this,ideKey); - if (!proxy.isRunning()) - proxy.start(); - - proxy.setTarget(this); - - fDebugPort = proxy.getProxyPort(); + fDebugPort = XDebugCorePlugin.getDefault().getPreferenceStore().getInt(IXDebugPreferenceConstants.DEBUGPORT_PREFERENCE); + if (fDebugPort == 0) { + fDebugPort = IXDebugPreferenceConstants.DEFAULT_DEBUGPORT; + } DebugPlugin.getDefault().getBreakpointManager().addBreakpointListener(this); DebugPlugin.getDefault().addDebugEventListener(this); @@ -142,7 +108,7 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch * @see org.eclipse.debug.core.model.IDebugTarget#hasThreads() */ public boolean hasThreads() throws DebugException { - return (fThreads.length>0); + return (fThreads.length > 0); } /* (non-Javadoc) @@ -197,27 +163,31 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch * @see org.eclipse.debug.core.model.ITerminate#terminate() */ public void terminate() throws DebugException { - //IThread t = fThreads.length(); - //fTerminated=true; - XDebugProxy proxy=XDebugCorePlugin.getDefault().getXDebugProxy(); - proxy.stop(); - proxy.removeProxyEventListener(this,fIdeKey); - System.out.println("XDebug.Target: ProxyEventlistener removed"); - fTerminated = true; - //fDisconnected = true; - fSuspended = false; - XDebugCorePlugin.getBreakpointManager().removeBreakpointListener(this); - fireTerminateEvent(); - DebugPlugin.getDefault().removeDebugEventListener(this); - if (fThread!=null) - fThread.removeEventListeners(); + if(fTerminated) { + return; + } + + if (XDebugCorePlugin.getDefault() != null) { + XDebugProxy proxy = XDebugCorePlugin.getDefault().getXDebugProxy(); + proxy.removeProxyEventListener(this, fIdeKey); + + System.out.println("XDebug.Target: ProxyEventlistener removed"); + + fTerminated = true; + fSuspended = false; + + XDebugCorePlugin.getBreakpointManager().removeBreakpointListener(this); + fireTerminateEvent(); + DebugPlugin.getDefault().removeDebugEventListener(this); + /*if (fThread!=null) + fThread.removeEventListeners();*/ + } } /* (non-Javadoc) * @see org.eclipse.debug.core.model.ISuspendResume#canResume() */ public boolean canResume() { -// return !isTerminated() && isSuspended(); return false; } @@ -225,7 +195,6 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend() */ public boolean canSuspend() { -// return !isTerminated() && !isSuspended(); return false; } @@ -287,24 +256,38 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch e2.printStackTrace(); } + if (fDebugConnection != null) if (!fDebugConnection.isClosed()) { if (fProcess == null) { PathMapItem pmi = null; for (int i = 0; i < pathMap.size(); i++) { pmi = new PathMapItem((String) pathMap.get(i)); IPath local = (IPath)pmi.getLocalPath().clone(); - local = local./*removeFirstSegments(1).*/makeAbsolute(); + local = local.makeAbsolute(); int matchedSegments = local.segmentCount(); if (local.matchingFirstSegments(cp) == matchedSegments) { IPath newPath = pmi.getRemotePath(); - //newPath = newPath.removeFirstSegments(1); newPath = newPath.append(path.removeFirstSegments(matchedSegments)); newPath = newPath.makeAbsolute(); if (supportsBreakpoint(breakpoint)) { try { - fDebugConnection.addBreakpoint(breakpoint, newPath); + if (breakpoint.isEnabled()) { + if (marker != null) { + //XDebugResponse dr = fDebugConnection.breakpointSet(newPath.toString(), ((ILineBreakpoint)breakpoint).getLineNumber()); + + int id = fDebugConnection.breakpointSet(newPath.toString(), ((ILineBreakpoint)breakpoint).getLineNumber(), marker.getAttribute(XDebugBreakpoint.HIT_COUNT,-1)); + XDebugResponse dr = getResponse(id); + + String bpid = dr.getAttributeValue("id"); + + if (!"".equals(bpid)) + marker.setAttribute(XDebugLineBreakpoint.BREAKPOINT_ID,Integer.parseInt(bpid)); + } + } } catch (DebugException e) { e.printStackTrace(); + } catch (CoreException e) { + e.printStackTrace(); } } } @@ -312,9 +295,20 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch } else { if (supportsBreakpoint(breakpoint)) { try { - fDebugConnection.addBreakpoint(breakpoint, path); + if (breakpoint.isEnabled()) { + if (marker != null) { + int id = fDebugConnection.breakpointSet(path.toString(), ((ILineBreakpoint)breakpoint).getLineNumber(), marker.getAttribute(XDebugBreakpoint.HIT_COUNT,-1)); + XDebugResponse dr = getResponse(id); + String bpid = dr.getAttributeValue("id"); + + if (!"".equals(bpid)) + marker.setAttribute(XDebugLineBreakpoint.BREAKPOINT_ID,Integer.parseInt(bpid)); + } + } } catch (DebugException e) { e.printStackTrace(); + } catch (CoreException e) { + e.printStackTrace(); } } } @@ -327,7 +321,9 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) { if (supportsBreakpoint(breakpoint)) { try { - fDebugConnection.removeBreakpoint(breakpoint); + int id =((XDebugLineBreakpoint)breakpoint).getID(); + if (id >0) + fDebugConnection.breakpointRemove(id); } catch (CoreException e) { } } @@ -366,7 +362,8 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch * @see org.eclipse.debug.core.model.IDisconnect#isDisconnected() */ public boolean isDisconnected() { - return (fDebugConnection==null); + return (false); +// return (fDebugConnection==null); } /* (non-Javadoc) @@ -391,26 +388,34 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch fThread.setBreakpoints(null); fThread.setStepping(false); - /*boolean CanDisconnect =*/ Integer.parseInt(fDebugConnection.featureGet("detach").getValue()) /*!= 0*/; + int id = fDebugConnection.featureGet("detach"); + + XDebugResponse response = getResponse(id); + Integer.parseInt(response.getValue()); System.out.println("in Target.started()"); - DebugResponse response = fDebugConnection.featureGet("max_children"); + /*XDebugResponse response = fDebugConnection.featureGet("max_children"); String a1 = response.getValue(); System.out.println("max children:"+a1); - DebugResponse response1 = fDebugConnection.featureGet("max_children"); + XDebugResponse response1 = fDebugConnection.featureGet("max_children"); String a2 = response1.getValue(); - System.out.println("max depth:"+a2); + System.out.println("max depth:"+a2);*/ - boolean res = fDebugConnection.featureSet("max_depth", "100" ); - if( res == true ) { - System.out.println("Set depth to 100 (hack)"); + int id1 = fDebugConnection.featureSet("max_depth", "1024" ); + XDebugResponse response1 = getResponse(id1); + if (response1.getAttributeValue("success").equals("1") ) { + System.out.println("Set depth to 1024 (hack)"); + } + int id2 = fDebugConnection.featureSet("max_children", "1024" ); + XDebugResponse response2 = getResponse(id2); + if (response2.getAttributeValue("success").equals("1") ) { + System.out.println("Set children to 1024 (hack)"); } installDeferredBreakpoints(); try { resume(); -// step(); } catch (DebugException e) { e.printStackTrace(); } @@ -428,25 +433,15 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch } /** - * Called when this debug target terminates. - */ - public void terminated() { - fTerminated = true; - fSuspended = false; - XDebugCorePlugin.getBreakpointManager().removeBreakpointListener(this); - fireTerminateEvent(); - DebugPlugin.getDefault().removeDebugEventListener(this); - fThread.removeEventListeners(); - } - - /** * Returns the current stack frames in the target. * * @return the current stack frames in the target * @throws DebugException if unable to perform the request */ - protected IStackFrame[] getStackFrames() throws DebugException { - return fDebugConnection.getStackFrames(fThread); + public XDebugResponse getStackFrames() throws DebugException { + int id = fDebugConnection.stackGet(); + XDebugResponse lastResponse = getResponse(id); + return lastResponse; } /** @@ -482,82 +477,101 @@ public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunch fDebugConnection.stepOut(); } - /** - * Returns the current value of the given variable. - * - * @param variable - * @return variable value - * @throws DebugException if the request fails - */ - protected IValue getVariableValue(XDebugVariable variable) throws DebugException { - return null; - } - - /** - * Returns the values on the data stack (top down) - * - * @return the values on the data stack (top down) - */ - public IValue[] getDataStack() throws DebugException { - return new IValue[0]; - } - public boolean setVarValue(String name, String value) { - return fDebugConnection.setVarValue(name,value); + int id = fDebugConnection.setVarValue(name,value); + XDebugResponse response = getResponse(id); + + if ((response.getAttributeValue("success")).equals("1")) { + return true; + } else { + return false; + } } public void handleDebugEvents(DebugEvent[] events) { - for (int i=0;i 0) { + if (marker.getAttribute(XDebugLineBreakpoint.HIT_COUNT, 0) == hitCount) { + return (breakpoint); + } + } else { + return (breakpoint); + } + } + } + } + } catch (CoreException e) { + } + } + } + } + } + + return null; + } + + public void startListener() { + fResponseListener.schedule(); } - public IVariable[] getVariables(XDebugStackFrame StackFrame, int Level) { - return fDebugConnection.getVariables(StackFrame, Level); + public /*boolean*/ void stopListener() { + /*return*/ fResponseListener.cancel(); //done(null); //.cancel(); + } + public XDebugResponse getResponse(int id) { + XDebugResponse response = fResponseListener.getResponse(id); + + return response; } } \ No newline at end of file