*/
package net.sourceforge.phpeclipse.xdebug.php.model;
+//import java.io.ByteArrayInputStream;
+//import java.io.IOException;
import java.util.List;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
import net.sourceforge.phpeclipse.xdebug.core.IPHPDebugEvent;
import net.sourceforge.phpeclipse.xdebug.core.IProxyEventListener;
import net.sourceforge.phpeclipse.xdebug.core.IXDebugPreferenceConstants;
import org.eclipse.debug.core.model.IMemoryBlock;
import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.core.model.IThread;
+import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
+//import org.xml.sax.SAXException;
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;
+import net.sourceforge.phpeclipse.xdebug.core.xdebug.XDebugResponse;
/**
* @author Christian
* @param launch containing launch
* @param process process of the interpreter
* @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) throws CoreException {
fSuspended = false;
XDebugCorePlugin.getBreakpointManager().removeBreakpointListener(this);
- fireTerminateEvent();
+ fireEvent(new DebugEvent(this, DebugEvent.TERMINATE));
DebugPlugin.getDefault().removeDebugEventListener(this);
- /*if (fThread!=null)
- fThread.removeEventListeners();*/
}
}
public void resume() throws DebugException {
if (fDebugConnection != null) {
fThread.setBreakpoints(null);
+ resumed(DebugEvent.RESUME);
fDebugConnection.run();
- }
+ }
}
/**
try {
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);
*/
public boolean isDisconnected() {
return (false);
-// return (fDebugConnection==null);
}
/* (non-Javadoc)
Integer.parseInt(response.getValue());
System.out.println("in Target.started()");
- /*XDebugResponse response = fDebugConnection.featureGet("max_children");
- String a1 = response.getValue();
- System.out.println("max children:"+a1);
- XDebugResponse response1 = fDebugConnection.featureGet("max_children");
- String a2 = response1.getValue();
- System.out.println("max depth:"+a2);*/
-
-
- int id1 = fDebugConnection.featureSet("max_depth", "100" );
+
+ // Dirty hack
+ // Need to refactory plugin to get variables in lazy mode.
+ int id1 = fDebugConnection.featureSet("max_depth", "1024" );
XDebugResponse response1 = getResponse(id1);
if (response1.getAttributeValue("success").equals("1") ) {
- System.out.println("Set depth to 100 (hack)");
+ 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();
}
}
+ public Node eval(String expression) throws DebugException {
+ Node evalProperty = null;
+ if (fDebugConnection != null) {
+ int id = fDebugConnection.eval(expression);
+ //Node evalProperty = new Node("");
+ //if (id > 0) {
+ XDebugResponse response = getResponse(id);
+
+ Node evalResponse = response.getParentNode();
+ /*Node*/ evalProperty = evalResponse.getFirstChild();
+ //} /*else {
+
+ //}*/
+ } else {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = null;
+ Document doc = null;
+
+ try {
+ builder = factory.newDocumentBuilder();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ }
+ //try {
+ doc = builder.newDocument(); // .parse("");
+ evalProperty = doc.createElement("value");
+ /*} catch (SAXException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }*/
+ }
+
+ return evalProperty;
+ }
+
public void handleDebugEvents(DebugEvent[] events) {
for (int i = 0; i < events.length; i++) {
DebugEvent event = events[i];
return;
}
+ resumed(DebugEvent.TERMINATE);
+
stopListener();
fDebugConnection.close();
- fThread.removeEventListeners();
- fThread = null;
- fThreads = new IThread[0];
-
-/* stopListener();
- fDebugConnection.close();*/
-
fSuspended = false;
// Dirty hack to check debugging mode (remote or local)
- if (fProcess!=null) {
+ if (fProcess != null) {
try {
terminate();
} catch (DebugException e) {
} else {
fDebugConnection = null;
fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CONTENT));
- }
+ }
+
+ fThread.removeEventListeners();
+ fThread = null;
+ fThreads = new IThread[0];
}
- public void handleProxyEvent(/*String ideKey,*/ XDebugConnection connection) {
- setDebugConnection(connection);
- System.out.println("* New Connection - XDebug.Target: " + fDebugConnection.getSessionID());
+ public void handleProxyEvent(XDebugConnection connection) {
+ //System.out.println("* New Connection - XDebug.Target: " + fDebugConnection.getSessionID());
- fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CHANGE));
-
- fThread = new XDebugThread(this);
- fThreads = new IThread[] {fThread};
- try {
- started();
- } catch( DebugException e ){
- e.printStackTrace();
- }
+ if (setDebugConnection(connection)) {
+ fThread = new XDebugThread(this);
+ fThreads = new IThread[] {fThread};
+ fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CHANGE));
+ try {
+ started();
+ } catch( DebugException e ){
+ e.printStackTrace();
+ }
+ }
}
- private void setDebugConnection(XDebugConnection connection) {
- if (connection != null) {
+ private boolean setDebugConnection(XDebugConnection connection) {
+ if (connection != null && fDebugConnection == null) {
fDebugConnection = connection;
fResponseListener = new ResponseListener(connection);
startListener();
+
+ return true;
+ } else {
+ connection.close();
+
+ return false;
}
}
}
public Node getLocalVariables(int level) throws DebugException {
-// XDebugResponse response = fDebugConnection.contextGet(level, 0);
int id = fDebugConnection.contextGet(level, 0);
XDebugResponse response = getResponse(id);
}
public Node getGlobalVariables(int level) throws DebugException {
- //XDebugResponse response = fDebugConnection.contextGet(level, 1);
-
int id = fDebugConnection.contextGet(level, 1);
XDebugResponse response = getResponse(id);
return response.getParentNode();
}
+ public void stop() {
+ fDebugConnection.stop();
+ }
+
protected IBreakpoint breakpointHit(Node node) {
Node child = node.getFirstChild();
if (child.getNodeName().equals("stack")) {
int lineNumber = Integer.parseInt(PHPDebugUtils.getAttributeValue(child, "lineno"));
- String filename=PHPDebugUtils.getAttributeValue(child, "filename");
+ String filename = PHPDebugUtils.getAttributeValue(child, "filename");
IBreakpoint[] breakpoints = XDebugCorePlugin.getBreakpoints();
for (int i = 0; i < breakpoints.length; i++) {
IBreakpoint breakpoint = breakpoints[i];
int id = fDebugConnection.breakpointGet(marker.getAttribute(XDebugLineBreakpoint.BREAKPOINT_ID,-1));
XDebugResponse dr = getResponse(id);
- //String bpid = dr.getAttributeValue("command");
Node hitCo = dr.getParentNode().getFirstChild();
int hitCount = 0;
if (hitCo.hasAttributes()) {
}
}
- //String hitCount = hitCo.getAttributeValue("hit_count");
if(PHPDebugUtils.unescapeString(filename).endsWith(endfilename)
&& (lineBreakpoint.getLineNumber() == lineNumber) ) {
if (marker.getAttribute(XDebugLineBreakpoint.HIT_COUNT, 0) > 0) {
fResponseListener.schedule();
}
- public /*boolean*/ void stopListener() {
- /*return*/ fResponseListener.cancel(); //done(null); //.cancel();
+ public void stopListener() {
+ fResponseListener.cancel();
}
public XDebugResponse getResponse(int id) {
XDebugResponse response = fResponseListener.getResponse(id);