X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy.java b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy.java index d336d7e..0c30b77 100644 --- a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy.java +++ b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy.java @@ -2,7 +2,7 @@ * Copyright (c) 2000, 2002 IBM Corp. and others. All rights reserved. This program and the accompanying materials are made * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html - * + * * Contributors: IBM Corporation - Initial implementation Vicente Fernando - www.alfersoft.com.ar Christian Perkonig - remote debug **********************************************************************************************************************************/ package net.sourceforge.phpdt.internal.debug.core; @@ -14,13 +14,14 @@ import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; +import java.util.Map; import net.sourceforge.phpdt.internal.debug.core.breakpoints.PHPLineBreakpoint; -import net.sourceforge.phpdt.internal.debug.core.logview.LogView; -import net.sourceforge.phpdt.internal.debug.core.model.IPHPDebugTarget; +import net.sourceforge.phpdt.internal.debug.core.model.PHPDebugTarget; import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame; import net.sourceforge.phpdt.internal.debug.core.model.PHPThread; import net.sourceforge.phpdt.internal.debug.core.model.PHPVariable; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; @@ -28,8 +29,6 @@ import org.eclipse.core.runtime.Path; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.model.IBreakpoint; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IWorkbenchPage; public class PHPDBGProxy { @@ -41,7 +40,7 @@ public class PHPDBGProxy { private PHPDBGInterface DBGInt = null; - private IPHPDebugTarget debugTarget = null; + private PHPDebugTarget debugTarget = null; private PHPLoop phpLoop; @@ -53,16 +52,22 @@ public class PHPDBGProxy { private boolean remote; + private boolean pathtranslation; + + private Map pathmap; + private IPath remoteSourcePath; public PHPDBGProxy() { thisProxy = this; } - public PHPDBGProxy(boolean remote, String remoteSourcePath) { + public PHPDBGProxy(boolean remote, String remoteSourcePath,boolean pathTranslate,Map paths) { thisProxy = this; this.remote = remote; this.remoteSourcePath = new Path(remoteSourcePath); + this.pathmap=paths; + this.pathtranslation=pathTranslate; } public void start() { @@ -92,8 +97,8 @@ public class PHPDBGProxy { } protected void createServerSocket() { - // port = SocketUtil.findUnusedLocalPort("localhost", 10001, 10101); - port = 10001; + port = SocketUtil.findUnusedLocalPort("localhost", 10001, 10101); +// port = 10001; if (port == -1) { PHPDebugCorePlugin.log(5, "Cannot find free port!!!!"); return; @@ -137,11 +142,42 @@ public class PHPDBGProxy { } protected void setBreakPoints() throws IOException, CoreException { - IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(); - for (int i = 0; i < breakpoints.length; i++) { - addBreakpoint(breakpoints[i]); - } - } + IBreakpoint[] breakpoints = DebugPlugin.getDefault() + .getBreakpointManager().getBreakpoints(); + for (int i = 0; i < breakpoints.length; i++) { + if (breakpoints[i].isEnabled()) { + addBreakpoint(breakpoints[i]); + } + } + } + + private String MapPath(PHPLineBreakpoint phpLBP) { + IPath filename; + if (remote) { + filename = phpLBP.getMarker().getResource() + .getProjectRelativePath(); + filename = remoteSourcePath.append(filename); + } else + filename = phpLBP.getMarker().getResource().getLocation(); + String path = filename.toOSString(); + if (pathmap != null && remote) { + java.util.Iterator i = pathmap.keySet().iterator(); + while (i.hasNext()) { + String k = (String) i.next(); + if (path.startsWith(k)) { + path = pathmap.get(k) + path.substring(k.length()); + break; + } + } + } + if (pathtranslation && remote) { + if (remoteSourcePath.toString().substring(0, 1).equals("/")) + path = path.replace('\\', '/'); + else + path = path.replace('/', '\\'); + } + return path; + } public void addBreakpoint(IBreakpoint breakpoint) { if (DBGInt == null) @@ -150,14 +186,10 @@ public class PHPDBGProxy { try { PHPLineBreakpoint phpLBP; if (breakpoint.getModelIdentifier() == PHPDebugCorePlugin.getUniqueIdentifier()) { - IPath filename; phpLBP = (PHPLineBreakpoint) breakpoint; // bpNo= DBGInt.addBreakpoint(phpLBP.getMarker().getResource().getLocation().toOSString(), phpLBP.getLineNumber()); - if (remote) - filename = remoteSourcePath.append(phpLBP.getMarker().getResource().getProjectRelativePath()); - else - filename = phpLBP.getMarker().getResource().getLocation(); - bpNo = DBGInt.addBreakpoint(filename.toOSString(), phpLBP.getLineNumber()); + + bpNo = DBGInt.addBreakpoint(MapPath(phpLBP), phpLBP.getLineNumber()); phpLBP.setDBGBpNo(bpNo); } } catch (IOException e) { @@ -176,13 +208,9 @@ public class PHPDBGProxy { PHPLineBreakpoint phpLBP; if (breakpoint.getModelIdentifier() == PHPDebugCorePlugin.getUniqueIdentifier()) { phpLBP = (PHPLineBreakpoint) breakpoint; - IPath filename; - if (remote) - filename = remoteSourcePath.append(phpLBP.getMarker().getResource().getProjectRelativePath()); - else - filename = phpLBP.getMarker().getResource().getLocation(); + // bpNo= DBGInt.addBreakpoint(filename.toOSString(), phpLBP.getLineNumber()); - DBGInt.removeBreakpoint(filename.toOSString(), phpLBP.getLineNumber(), phpLBP.getDBGBpNo()); + DBGInt.removeBreakpoint(MapPath(phpLBP), phpLBP.getLineNumber(), phpLBP.getDBGBpNo()); } } catch (IOException e) { PHPDebugCorePlugin.log(e); @@ -207,25 +235,30 @@ public class PHPDBGProxy { DBGInt.continueExecution(); phpLoop.notifyWait(); } catch (IOException e) { - PHPDebugCorePlugin.log(e); + PHPeclipsePlugin.log("Debugging session ended.", e); stop(); } } public void pause() { try { - DBGInt.pauseExecution(); + if (null != DBGInt) + DBGInt.pauseExecution(); + else { + // TODO Make sure the Suspend action is grayed out + // when DBGInt is null + } } catch (IOException e) { PHPDebugCorePlugin.log(e); stop(); } } - protected IPHPDebugTarget getDebugTarget() { + protected PHPDebugTarget getDebugTarget() { return debugTarget; } - public void setDebugTarget(IPHPDebugTarget debugTarget) { + public void setDebugTarget(PHPDebugTarget debugTarget) { this.debugTarget = debugTarget; debugTarget.setPHPDBGProxy(this); } @@ -314,8 +347,17 @@ public class PHPDBGProxy { } public synchronized void setShouldStop() { - shouldStop = true; - } + shouldStop = true; + try { + // If the loop thread is blocked on the server socket, + // forcibly unblock it to avoid leaking the thread, + // the socket and the port + closeServerSocket(); + } catch (IOException x) { + // Log this as a warning? + PHPDebugCorePlugin.log(x); + } + } public synchronized void notifyWait() { notify(); @@ -440,4 +482,4 @@ public class PHPDBGProxy { } } } -} \ No newline at end of file +}