import java.util.Map;
import java.util.Vector;
-import net.sourceforge.phpdt.internal.core.JavaProject;
+//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 net.sourceforge.phpeclipse.actions.PHPEclipseShowAction;*/
-import org.eclipse.core.internal.resources.Project;
+//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;
+//import org.eclipse.swt.browser.Browser;
public class PHPDBGProxy {
private ServerSocket server = null;
- private BufferedReader reader = null;
+ //private BufferedReader reader = null;
private PHPDBGInterface DBGInt = null; // The DBG interface which is linked with the proxy
private PHPDebugTarget debugTarget = null;
private PHPDBGProxy thisProxy = null;
private int port;
private boolean remote;
private boolean pathtranslation;
+ private boolean bRelaunch; // Relaunch the debugger after script termination
private Map pathmap;
private IPath remoteSourcePath;
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);
- }
-
+ public void updateView () {
+/*
+ try {
+ server.close ();
+ server = null;
+ start ();
+ }
+ catch (IOException e) {
+ }
+*/
+ getDebugTarget ().updateThreads (PHPMainThread);
+ }
+
/**
* @param remote
* @param remoteSourcePath
* @param pathTranslate
* @param paths
+ * @param
*/
- public PHPDBGProxy (boolean remote, String remoteSourcePath, boolean pathTranslate, Map paths) {
+ public PHPDBGProxy (boolean remote, String remoteSourcePath, boolean pathTranslate, Map paths, boolean bRelaunchOnScriptTermination) {
thisProxy = this;
this.remote = remote;
this.remoteSourcePath = new Path (remoteSourcePath);
this.pathmap = paths;
this.pathtranslation = pathTranslate;
+ this.bRelaunch = bRelaunchOnScriptTermination;
}
/**
phpLoop.notifyWait ();
}
-
+
public void setTerminated () {
try {
PHPMainThread.terminate ();
*
* @return A server socket
*/
- protected ServerSocket getServerSocket () throws IOException {
- if (server == null) { // Do we have already a server socket
- createServerSocket (); // No, then create one
- }
-
- return server; // Return the server socket
- }
+// protected ServerSocket getServerSocket () throws IOException {
+// if (server == null) { // Do we have already a server socket
+// createServerSocket (); // No, then create one
+// }
+//
+// return server; // Return the server socket
+// }
/**
* 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!
- *
- *
+ *
+ * @note: The free dbg version doesn't allow to set the appropriate port within php.ini!
+ *
+ *
*/
protected void createServerSocket () {
if (this.remote) {
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
*
* @paran DBGInt The DGB interface which is linked with this proxy
*/
- protected void setDBGInterface (PHPDBGInterface DBGInt) {
- this.DBGInt = DBGInt;
- }
+// protected void setDBGInterface (PHPDBGInterface DBGInt) {
+// this.DBGInt = DBGInt;
+// }
/**
* Get the DBG interface which is linked to this proxy
public PHPDBGInterface getDBGInterface () {
return DBGInt;
}
-
+
/**
* Give back a buffered input stream for the socket which is
* linked with this proxy
*/
- public BufferedReader getReader () throws IOException {
- if (reader == null) { // Do we already have a buffered input stream
- reader = new BufferedReader (new InputStreamReader (this.getSocket ().getInputStream (),
- "ISO8859_1"));
- }
-
- return reader; // Return the buffered input stream
- }
+// public BufferedReader getReader () throws IOException {
+// if (reader == null) { // Do we already have a buffered input stream
+// reader = new BufferedReader (new InputStreamReader (this.getSocket ().getInputStream (),
+// "ISO8859_1"));
+// }
+//
+// return reader; // Return the buffered input stream
+// }
/**
*
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
+ // dann prefix abhängen und den remote path davorhägen
newpath = filename.removeFirstSegments (localPath.matchingFirstSegments (filename));
newpath = remotePath.append (newpath);
path = newpath.toString ();
// bpNo= DBGInt.addBreakpoint(phpLBP.getMarker().getResource().getLocation().toOSString(), phpLBP.getLineNumber());
if (phpLBP.isConditionEnabled ()) {
bpNo = DBGInt.addBreakpoint (MapPath(phpLBP),
- phpLBP.getLineNumber(),
+ phpLBP.getLineNumber(),
phpLBP.getHitCount(),
phpLBP.getCondition ());
}
else {
bpNo = DBGInt.addBreakpoint (MapPath(phpLBP),
- phpLBP.getLineNumber(),
+ phpLBP.getLineNumber(),
phpLBP.getHitCount(),
"");
}
-
+
phpLBP.setDBGBpNo(bpNo);
}
} catch (IOException e) {
/**
*
*/
- public void phpLoopNotify () {
- phpLoop.notifyWait ();
- }
+// public void phpLoopNotify () {
+// phpLoop.notifyWait ();
+// }
/**
*
/**
* 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
public void readStepOverEnd (PHPStackFrame stackFrame) {
try {
- DBGInt.stepOver();
- phpLoop.notifyWait();
+ if (DBGInt.stepOver ()) {
+ phpLoop.notifyWait();
+ }
} catch (Exception e) {
PHPDebugCorePlugin.log(e);
}
public void readStepReturnEnd (PHPStackFrame stackFrame) {
try {
- DBGInt.stepOut();
- phpLoop.notifyWait();
+ if (DBGInt.stepOut ()) {
+ phpLoop.notifyWait();
+ }
} catch (Exception e) {
PHPDebugCorePlugin.log(e);
}
public void readStepIntoEnd (PHPStackFrame stackFrame) {
try {
- DBGInt.stepInto();
- phpLoop.notifyWait();
+ if (DBGInt.stepInto ()) {
+ phpLoop.notifyWait();
+ }
} catch (Exception e) {
PHPDebugCorePlugin.log(e);
}
}
- /*
+ /**
* public PHPStackFrame[] readFrames(PHPThread thread) { //try { //this.println("th " + thread.getId() + " ; f "); //return new
* FramesReader(getMultiReaderStrategy()).readFrames(thread); return null; //} catch (IOException e) { //
* PHPDebugCorePlugin.log(e); // return null; //}
shouldStop = false;
this.setName ("PHPDebuggerLoop");
}
-
+
/**
*
*/
server.setSoTimeout(1); // ???
}
- newDBGInt = new PHPDBGInterface (getReader (newSocket), // Create a new interface
- newSocket.getOutputStream (),
- thisProxy);
+ newDBGInt = new PHPDBGInterface (getReader (newSocket), // The input buffer (frames from dbg)
+ newSocket.getOutputStream (), // The output buffer (frames to dbg)
+ thisProxy,
+ bRelaunch); // Whether the debugger should be relaunched after script termination
newDBGInt.waitResponse (1000); // Wait for the initial DBG response
newDBGInt.flushAllPackets (); // Read and process the DBG response