import java.util.Map;
import java.util.Vector;
+import net.sourceforge.phpdt.internal.core.JavaProject;
import net.sourceforge.phpdt.internal.debug.core.breakpoints.PHPLineBreakpoint;
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 net.sourceforge.phpeclipse.actions.PHPEclipseShowAction;
+import org.eclipse.core.internal.resources.Project;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
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.swt.browser.Browser;
public class PHPDBGProxy {
public PHPDBGProxy () {
thisProxy = this;
}
-
+
+ /**
+ * updateView
+ * Clean up the view, but leave the Debug session running.
+ * added by ed_mann
+ */
+ public void updateView(){
+ getDebugTarget().updateThreads(PHPMainThread);
+ }
+
/**
* @param remote
* @param remoteSourcePath
*/
public void stop () {
phpLoop.setShouldStop (); // Notify the thread's 'run loop' to stop
-
if (DBGInt != null) { // If we have a DBG interface linked with this proxy
DBGInt.setShouldStop (); // Notify the DBG interface to stop the waiting for response
- }
-
- if (!remote) { // If it's not a remote proxy session
- try {
- getDebugTarget ().getProcess ().terminate (); //
- } catch (DebugException e) {
- e.printStackTrace ();
- }
}
+// if (!remote) { // If it's not a remote proxy session
+// try {
+// getDebugTarget ().getProcess ().terminate (); //
+// } catch (DebugException e) {
+// e.printStackTrace ();
+// }
+// }
+
phpLoop.notifyWait ();
}
+
+ public void setTerminated () {
+ try {
+ PHPMainThread.terminate ();
+ }
+ catch (DebugException e) {
+ }
+ }
/**
* TODO Is this method called from anywhere?
}
/**
- *
- * TODO The example for setting up DBG within PHP.ini shows ports from 10000 to 10016 ???
- * if my interpretation is correct.
- * How can we find the correct DBG port?
+ * Find a free unused port between 10001 and 10101 if the current debug session
+ * is for remote debugging, and a unused port 7869 if it is used as non remote debugging.
+ *
+ * For remote debugging the used port is submitted with the URL.
+ * E.g. http://localhost/index.php?DBGSESSID=1@localhost:10001
+ * For non remote debugging (if PHPeclipse used e.g. php cli directly) no port
+ * can be submitted by parameter, and only the default port (7869) can be used.
+ *
+ * @note: The free dbg version doesn't allow to set the appropriate port within php.ini!
+ *
+ *
*/
protected void createServerSocket () {
- port = SocketUtil.findUnusedLocalPort ("localhost", 10001, 10101); // Get the first free port in the range from 10001 to 10101
-
-// port = 10001;
+ if (this.remote) {
+ port = SocketUtil.findUnusedLocalPort ("localhost", 10001, 10101); // Get the first free port in the range from 10001 to 10101
+ }
+ else {
+ port = SocketUtil.findUnusedLocalPort ("localhost", 7869, 7869); // Get the first free port in the range from 7869 to 7869
+ }
+
if (port == -1) { // Did we get a free port?
PHPDebugCorePlugin.log (5, "Cannot find free port!!!!"); // No, output a error message
//System.out.println("ServerSocket on port: " + port);
}
} catch (IOException e) {
- // IO Error
PHPDebugCorePlugin.log (e);
stop ();
}
}
/**
+ * Get the DBG interface which is linked to this proxy
+ *
+ * @paran DBGInt The DGB interface which is linked with this proxy
+ */
+ public PHPDBGInterface getDBGInterface () {
+ return DBGInt;
+ }
+
+ /**
* Give back a buffered input stream for the socket which is
* linked with this proxy
*/
*
*/
private String MapPath (PHPLineBreakpoint phpLBP) {
- IPath filename;
+ IPath filename;
+ IPath remotePath;
+ IPath newpath;
+ IPath localPath;
+ String local;
if (remote) {
filename = phpLBP.getMarker().getResource().getProjectRelativePath();
filename = remoteSourcePath.append (filename);
} else {
- filename = phpLBP.getMarker().getResource().getLocation();
+ filename = phpLBP.getMarker().getResource().getFullPath();
}
String path = filename.toOSString();
}
}
- if (pathtranslation && remote) {
- if (remoteSourcePath.toString ().substring (0, 1).equals ("/")) {
- path = path.replace ('/', '\\');
- }
- else {
- path = path.replace ('\\', '/');
+ if (remoteSourcePath.isEmpty ()) {
+ if ((pathmap != null) && remote) {
+ java.util.Iterator iterator = pathmap.keySet().iterator();
+
+ while (iterator.hasNext ()) {
+ local = (String) iterator.next (); // Get the local/client side path of the mapping
+ remotePath = new Path ((String) pathmap.get (local)); // Get the remote/server side path of the mapping
+ localPath = new Path (local); // Get the remote/server side path of the mapping
+
+ if (localPath.isPrefixOf (filename)) { // Starts the remote/server side file path with the remote/server side mapping path
+ // dann prefix abh�ngen und den remote path davorh�gen
+ newpath = filename.removeFirstSegments (localPath.matchingFirstSegments (filename));
+ newpath = remotePath.append (newpath);
+ path = newpath.toString ();
+
+ if (path.substring (0, 1).equals ("/")) {
+ path = path.replace ('\\', '/');
+ }
+ else {
+ path = path.replace ('/', '\\');
+ }
+
+ return path;
+ }
+ }
}
- }
+ }
+ else {
+ if (pathtranslation && remote) {
+ if (remoteSourcePath.toString ().substring (0, 1).equals ("/")) {
+ path = path.replace ('\\', '/');
+ }
+ else {
+ path = path.replace ('/', '\\');
+ }
+ }
+ }
return path;
}
phpLBP = (PHPLineBreakpoint) breakpoint;
// bpNo= DBGInt.addBreakpoint(phpLBP.getMarker().getResource().getLocation().toOSString(), phpLBP.getLineNumber());
-
- bpNo = DBGInt.addBreakpoint(MapPath(phpLBP), phpLBP.getLineNumber());
+ if (phpLBP.isConditionEnabled ()) {
+ bpNo = DBGInt.addBreakpoint (MapPath(phpLBP),
+ phpLBP.getLineNumber(),
+ phpLBP.getHitCount(),
+ phpLBP.getCondition ());
+ }
+ else {
+ bpNo = DBGInt.addBreakpoint (MapPath(phpLBP),
+ phpLBP.getLineNumber(),
+ phpLBP.getHitCount(),
+ "");
+ }
+
phpLBP.setDBGBpNo(bpNo);
}
} catch (IOException e) {
}
/**
- *
+ * Is called by the DebuggerRunner
+ *
* @param debugTarget
*/
public void setDebugTarget (PHPDebugTarget debugTarget) {
this.debugTarget = debugTarget;
debugTarget.setPHPDBGProxy(this);
}
-
+
/**
* This method is called by a stackframe.
* It reads the variables from PHP via DBG
shouldStop = false;
this.setName ("PHPDebuggerLoop");
}
-
+
/**
*
*/
public void run () {
try {
int i;
- int timeout;
long interval = 200; // Wait 200 ms maximum for a DBG response
boolean newconnect = false; //
Socket newSocket = null;
PHPMainThread = new PHPThread (getDebugTarget (), getPort ());
PHPMainThread.setName ("Thread [main]");
- timeout = 0;
// while ((getDebugTarget() == null) && (timeout < 100)) {
// sleep(100);