import net.sourceforge.phpeclipse.xdebug.php.launching.IXDebugConstants;
-//import org.eclipse.ui.plugin.AbstractUIPlugin;// *;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
-//import org.eclipse.core.resources.IWorkspace;
-//import org.eclipse.core.resources.ResourcesPlugin;
-//import org.eclipse.core.resources.IWorkspace;
-//import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
-//import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IBreakpointManager;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.jface.preference.IPreferenceStore;
-//import org.eclipse.jface.resource.ImageDescriptor;
import org.osgi.framework.BundleContext;
public class XDebugCorePlugin extends Plugin {
* The constructor.
*/
public XDebugCorePlugin() {
+ super();
plugin = this;
}
return plugin;
}
- /*public static IWorkspace getWorkspace() {
- return ResourcesPlugin.getWorkspace();
- }*/
-
public static IBreakpoint[] getBreakpoints() {
return getBreakpointManager().getBreakpoints(IXDebugConstants.ID_PHP_DEBUG_MODEL);
}
- public static /*static*/ IBreakpointManager getBreakpointManager() {
+ public static IBreakpointManager getBreakpointManager() {
return DebugPlugin.getDefault().getBreakpointManager();
- }
+ }
public static void log(int severity, String message) {
Status status = new Status(severity, PLUGIN_ID, IStatus.OK, message, null) ;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.core.DebugException;
+//import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.IDebugEventFilter;
import org.eclipse.debug.core.IDebugEventSetListener;
protected String fInitString;
protected String fIdeKey;
- protected AbstractDebugConnection fConnection;
+ /*protected*/ private /*AbstractDebugConnection*/ XDebugConnection fConnection;
class ProxyListenerJob extends Job {
public ProxyListenerJob() {
// TODO Auto-generated catch block
e.printStackTrace();
}
- fConnection=(AbstractDebugConnection) new XDebugConnection(socket,reader,writer);
+ fConnection=/*(AbstractDebugConnection)*/ new XDebugConnection(socket,reader,writer);
if (fConnection.isInitialized()) {
fIdeKey=fConnection.getSessionID();
XDebugCorePlugin.log(IStatus.INFO,"<init idekey \""+fIdeKey+"\">");
*/
public void dispatch() {
fListener = (IProxyEventListener) getEventListener(fIdeKey);
- if (fListener==null) { // no listener is found so start the script
- try {
+ if (fListener == null) { // no listener is found so start the script
+ //try {
fConnection.run();
- } catch (DebugException e) {
+ /*} catch (DebugException e) {
// TODO Auto-generated catch block
e.printStackTrace();
- }
+ }*/
} else
Platform.run(this);
fListener = null;
import net.sourceforge.phpeclipse.xdebug.core.IPHPDebugEvent;
import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils;
-import net.sourceforge.phpeclipse.xdebug.core.PathMapItem;
+//import net.sourceforge.phpeclipse.xdebug.core.PathMapItem;
import net.sourceforge.phpeclipse.xdebug.core.XDebugCorePlugin;
-import net.sourceforge.phpeclipse.xdebug.php.launching.IXDebugConstants;
-import net.sourceforge.phpeclipse.xdebug.php.model.XDebugLineBreakpoint;
-import net.sourceforge.phpeclipse.xdebug.php.model.XDebugTarget;
+//import net.sourceforge.phpeclipse.xdebug.php.launching.IXDebugConstants;
+//import net.sourceforge.phpeclipse.xdebug.php.model.XDebugLineBreakpoint;
+//import net.sourceforge.phpeclipse.xdebug.php.model.XDebugTarget;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
+//import org.eclipse.core.runtime.IPath;
+//import org.eclipse.core.runtime.Path;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
+//import org.eclipse.core.resources.IMarker;
+//import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.DebugEvent;
-import org.eclipse.debug.core.DebugException;
+//import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.model.IBreakpoint;
-import org.eclipse.debug.core.model.ILineBreakpoint;
+//import org.eclipse.debug.core.model.IBreakpoint;
+//import org.eclipse.debug.core.model.ILineBreakpoint;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
*/
public class ResponseListener extends Job {
-
-
public class DebugResponse {
+ private Node parentNode;
+ private int fTransactionID=-1;
+ private String fCommand="";
+ private String fStatus;
+ private String fReason;
+ private String fName;
+ private boolean fError;
- private Node parentNode;
- private int fTransactionID=-1;
- private String fCommand="";
- private String fStatus;
- private String fReason;
- private String fName;
- private boolean fError;
-
- private String fValue;
- private String fType;
- private String fAddress;
+ private String fValue;
+ private String fType;
+ private String fAddress;
+
+ public synchronized void setParentNode (String xmlInput){
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder=null;
+ Document doc=null;
+ try {
+ builder = factory.newDocumentBuilder();
+ } catch (ParserConfigurationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ ByteArrayInputStream InputXMLStream = new ByteArrayInputStream(xmlInput.getBytes());
+
+ try {
+ doc = builder.parse(InputXMLStream);
+ } catch (SAXException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
- public synchronized void setParentNode (String xmlInput){
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder=null;
- Document doc=null;
- try {
- builder = factory.newDocumentBuilder();
- } catch (ParserConfigurationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- ByteArrayInputStream InputXMLStream = new ByteArrayInputStream(xmlInput.getBytes());
-
- try {
- doc = builder.parse(InputXMLStream);
- } catch (SAXException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- parentNode=doc.getFirstChild();
-
- fName=parentNode.getNodeName();
- String idStr = getAttributeValue("transaction_id");
- if (!"".equals(idStr))
- fTransactionID = Integer.parseInt(idStr);
- fCommand = getAttributeValue("command");
- fStatus = getAttributeValue("status");
- fReason = getAttributeValue("reason");
+ parentNode=doc.getFirstChild();
+
+ fName=parentNode.getNodeName();
+ String idStr = getAttributeValue("transaction_id");
+ if (!"".equals(idStr))
+ fTransactionID = Integer.parseInt(idStr);
+ fCommand = getAttributeValue("command");
+ fStatus = getAttributeValue("status");
+ fReason = getAttributeValue("reason");
- if( fCommand.compareTo("eval") == 0 ) {
- try {
- Node property = parentNode.getFirstChild();
+ if( fCommand.compareTo("eval") == 0 ) {
+ try {
+ Node property = parentNode.getFirstChild();
- NamedNodeMap listAttribute = property.getAttributes();
- Node attribute = listAttribute.getNamedItem("type");
- if (attribute !=null) {
- fType = attribute.getNodeValue();
- }
+ NamedNodeMap listAttribute = property.getAttributes();
+ Node attribute = listAttribute.getNamedItem("type");
+ if (attribute !=null) {
+ fType = attribute.getNodeValue();
+ }
- Node attribute1 = listAttribute.getNamedItem("address");
- if (attribute1 !=null) {
- fAddress = attribute1.getNodeValue();
- }
-
- Node firstChild1 = (Node) property.getFirstChild();
-
- if( firstChild1 != null ) {
- fValue = firstChild1.getNodeValue();
- }
- } catch (Exception e) {
- // TODO: handle exception
+ Node attribute1 = listAttribute.getNamedItem("address");
+ if (attribute1 !=null) {
+ fAddress = attribute1.getNodeValue();
}
- } else {
- try {
- CDATASection firstChild = (CDATASection) parentNode.getFirstChild();
-
- if( firstChild != null ) {
- fValue = parentNode.getFirstChild().getNodeValue();
- }
- } catch (Exception e) {
- // TODO: handle exception
+
+ Node firstChild1 = (Node) property.getFirstChild();
+
+ if( firstChild1 != null ) {
+ fValue = firstChild1.getNodeValue();
}
+ } catch (Exception e) {
+ // TODO: handle exception
}
- }
-
- public String getAttributeValue (String AttributeName) {
- String strValue = "";
- if (parentNode.hasAttributes()) {
- NamedNodeMap listAttribute = parentNode.getAttributes();
- Node attribute = listAttribute.getNamedItem(AttributeName);
- if (attribute !=null)
- strValue = attribute.getNodeValue();
+ } else {
+ try {
+ CDATASection firstChild = (CDATASection) parentNode.getFirstChild();
+
+ if( firstChild != null ) {
+ fValue = parentNode.getFirstChild().getNodeValue();
+ }
+ } catch (Exception e) {
+ // TODO: handle exception
}
- return strValue;
- }
-
- public synchronized Node getParentNode(){
- return parentNode;
}
-
- public synchronized String getCommand() {
- return fCommand;
- }
- public synchronized String getName() {
- return fName;
- }
-
- public synchronized String getValue() {
- return fValue;
- }
-
- public synchronized String getType() {
- return fType;
+ }
+
+ public String getAttributeValue (String AttributeName) {
+ String strValue = "";
+ if (parentNode.hasAttributes()) {
+ NamedNodeMap listAttribute = parentNode.getAttributes();
+ Node attribute = listAttribute.getNamedItem(AttributeName);
+ if (attribute !=null)
+ strValue = attribute.getNodeValue();
}
+ return strValue;
+ }
+
+ public synchronized Node getParentNode(){
+ return parentNode;
+ }
+
+ public synchronized String getCommand() {
+ return fCommand;
+ }
+ public synchronized String getName() {
+ return fName;
+ }
+
+ public synchronized String getValue() {
+ return fValue;
+ }
- public synchronized String getAddress() {
- return fAddress;
- }
+ public synchronized String getType() {
+ return fType;
+ }
- DebugResponse () {
- fTransactionID = -1;
- fCommand = "";
- fStatus = "";
- fReason = "";
- fName= "";
- }
-
- DebugResponse (String XMLInput) {
- setParentNode(XMLInput);
- }
+ public synchronized String getAddress() {
+ return fAddress;
+ }
- public synchronized String getReason() {
- return fReason;
- }
+ DebugResponse() {
+ fTransactionID = -1;
+ fCommand = "";
+ fStatus = "";
+ fReason = "";
+ fName= "";
+ }
+
+ DebugResponse(String XMLInput) {
+ setParentNode(XMLInput);
+ }
- public synchronized String getStatus() {
- return fStatus;
- }
+ public synchronized String getReason() {
+ return fReason;
+ }
- public synchronized int getTransactionID() {
- return fTransactionID;
- }
-
- public boolean isError() {
- return fError;
- }
+ public synchronized String getStatus() {
+ return fStatus;
+ }
- public void setError(boolean error) {
- fError = error;
- }
-
+ public synchronized int getTransactionID() {
+ return fTransactionID;
+ }
+
+ public boolean isError() {
+ return fError;
}
-
+ public void setError(boolean error) {
+ fError = error;
+ }
+ }
+
private XDebugConnection fConnection;
- //private XDebugTarget fDebugTarget;
private DebugResponse lastResponse;
public ResponseListener(XDebugConnection connection) {
fConnection=connection;
lastResponse= new DebugResponse();
}
-
-
-
-
+
private void checkResponse(DebugResponse response) {
Node node=response.getParentNode();
if (node.hasChildNodes()) {
}
lastResponse.setError(false);
if (response.getStatus().equals("stopping")) {
- //if (response.getStatus().equals("stopped")) {
- fConnection.close();
+ //this.cancel();
fireEvent(IPHPDebugEvent.STOPPED);
} else if (response.getStatus().equals("break") && response.getReason().equals("ok")){
- if (response.getCommand().equals("run")) { // breakpoint hit
- int id=-1;
- try {
- id=fConnection.sendRequest("stack_get");
- } catch (DebugException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- String InputXML = fConnection.readData();
- if (InputXML != null) {
- XDebugCorePlugin.log(IStatus.INFO, InputXML);
- lastResponse.setParentNode(InputXML);
- breakpointHit(lastResponse.getParentNode());
- }
-
- } else if (response.getCommand().equals("step_into")) { // step_into
+ if (response.getCommand().equals("run")) {
+ fireEvent(IPHPDebugEvent.BREAKPOINT_HIT, null);
+ } else if (response.getCommand().equals("step_into")) {
fireEvent(IPHPDebugEvent.STEP_END);
-// XDebugCorePlugin.log(IStatus.INFO,response.getCommand()+" STEP_END sent");
- } else if (response.getCommand().equals("step_over")) { // step_over
+ } else if (response.getCommand().equals("step_over")) {
fireEvent(IPHPDebugEvent.STEP_END);
-// XDebugCorePlugin.log(IStatus.INFO,response.getCommand()+" STEP_END sent");
- } else if (response.getCommand().equals("step_out")) { // step_over
+ } else if (response.getCommand().equals("step_out")) {
fireEvent(IPHPDebugEvent.STEP_END);
-// XDebugCorePlugin.log(IStatus.INFO,response.getCommand()+" STEP_END sent");
}
}
-
}
protected void fireEvent(int detail) {
event.setData(data);
DebugPlugin.getDefault().fireDebugEventSet(new DebugEvent[] {event});
}
-
-
- protected void 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");
- IBreakpoint[] breakpoints = XDebugCorePlugin.getBreakpoints();
- for (int i = 0; i < breakpoints.length; i++) {
- IBreakpoint breakpoint = breakpoints[i];
- if (supportsBreakpoint(breakpoint)) {
- if (breakpoint instanceof ILineBreakpoint) {
- ILineBreakpoint lineBreakpoint = (ILineBreakpoint) breakpoint;
- try {
- if (breakpoint.isEnabled()) {
- IMarker marker = breakpoint.getMarker();
- if (marker != null) {
- String endfilename;
-
- if( XDebugCorePlugin.getDefault().getXDebugProxy().getTarget().getProcess() == null ) {
- endfilename = marker.getResource().getLocation().lastSegment();
- } else {
- endfilename = marker.getResource().getLocation().toOSString();
- }
-
- if(PHPDebugUtils.unescapeString(filename).endsWith(endfilename) && (lineBreakpoint.getLineNumber() == lineNumber) ) {
- fireEvent(IPHPDebugEvent.BREAKPOINT_HIT,breakpoint);
- break;
- }
- }
- }
- } catch (CoreException e) {
- }
- }
- }
- }
- }
-
-// DebugEvent event = new DebugEvent(this, DebugEvent.MODEL_SPECIFIC, IPHPDebugEvent.STEP_END);
-// DebugPlugin.getDefault().fireDebugEventSet(new DebugEvent[] {event});
- }
-
- private boolean supportsBreakpoint(IBreakpoint breakpoint) {
- if (breakpoint.getModelIdentifier().equals(IXDebugConstants.ID_PHP_DEBUG_MODEL)) {
- return true;
- }
- return false;
- }
-
-
/* (non-Javadoc)
* @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
if (InputXML != null) {
XDebugCorePlugin.log(IStatus.INFO, InputXML);
lastResponse.setParentNode(InputXML);
-// if (lastResponse.getName() == "init") {
-// Node myNode=lastResponse.getParentNode();
-// appID = PHPDebugUtils.getAttributeValue(myNode, "appid");
-// fileuri = PHPDebugUtils.getAttributeValue(myNode, "fileuri");
-// fDebugTarget.started();
-// fDebugTarget.fireCreationEvent();
if (lastResponse.getName() == "response") {
fConnection.addResponse(lastResponse,lastResponse.getTransactionID());
checkResponse(lastResponse);
}
-// fConnection.addResponse(lastResponse,lastResponse.getTransactionID());
-// lastResponse.notifyWait();
}
}
return Status.OK_STATUS;
}
-
-}
+}
\ No newline at end of file
import java.io.EOFException;
import java.io.IOException;
import java.io.OutputStreamWriter;
-//import java.io.UnsupportedEncodingException;
-import java.net.MalformedURLException;
import java.net.Socket;
-import java.net.URL;
-import net.sourceforge.phpeclipse.xdebug.core.AbstractDebugConnection;
import net.sourceforge.phpeclipse.xdebug.core.Base64;
import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils;
import net.sourceforge.phpeclipse.xdebug.core.XDebugCorePlugin;
import net.sourceforge.phpeclipse.xdebug.core.xdebug.ResponseListener.DebugResponse;
-import net.sourceforge.phpeclipse.xdebug.php.model.XDebugAbstractValue;
-import net.sourceforge.phpeclipse.xdebug.php.model.XDebugLineBreakpoint;
-import net.sourceforge.phpeclipse.xdebug.php.model.XDebugStackFrame;
-import net.sourceforge.phpeclipse.xdebug.php.model.XDebugThread;
-import net.sourceforge.phpeclipse.xdebug.php.model.XDebugVariable;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
-//import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.model.IBreakpoint;
-import org.eclipse.debug.core.model.ILineBreakpoint;
-import org.eclipse.debug.core.model.IStackFrame;
-import org.eclipse.debug.core.model.IVariable;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
/**
* @author Christian Perkonig
*
*/
-public class XDebugConnection extends AbstractDebugConnection {
+public class XDebugConnection {
int fTransactionID = 0;
private Socket fDebugSocket;
private OutputStreamWriter fDebugWriter;
private ResponseList fResponseList;
private ResponseListener fResponseListener;
+ protected boolean fInitialized = false;
+ protected boolean fIsClosed = true;
+
+ protected String fSessionID = "";
+
+ public String getSessionID() {
+ return fSessionID;
+ }
+ public boolean isInitialized() {
+ return fInitialized;
+ }
+
+ public boolean isClosed() {
+ return fIsClosed;
+ }
+
public XDebugConnection(Socket debugSocket, DataInputStream reader, OutputStreamWriter writer) {
fResponseList = new ResponseList();
fDebugWriter = writer;
fDebugReader = reader;
fDebugSocket = debugSocket;
fTransactionID = 0;
- init();
- }
-
- private void init() {
fInitialized = false;
- String initString=readData();
+ String initString = readData();
XDebugCorePlugin.log(IStatus.INFO,initString);
- int startIdx=initString.indexOf("idekey=\"");
- if (startIdx==-1)
+ int startIdx = initString.indexOf("idekey=\"");
+ if (startIdx == -1)
return;
- startIdx+=8;
+ startIdx += 8;
int endIdx=initString.indexOf('"',startIdx);
if (endIdx==-1)
return;
- fSessionID=initString.substring(startIdx,endIdx);
+ fSessionID = initString.substring(startIdx,endIdx);
- fInitialized=true;
- fIsClosed=false;
- fResponseListener=new ResponseListener(this);
+ fInitialized = true;
+ fIsClosed = false;
+ fResponseListener = new ResponseListener(this);
}
-
+
protected String readData() {
byte byteBuffer[]=null,b;
int count=0;
count = count * 10 + b - '0';
// count=count*10+Integer.parseInt(b);
}
-// System.out.println(count);
byteBuffer = new byte[count];
int readCount=0;
int attempts=0;
- while ((count >0) && (attempts < 50)) {
-// while ((count >0) && (attempts <5)) {
+ while ((count >0) && (attempts <5)) {
int rc=fDebugReader.read(byteBuffer,readCount,count);
count-=rc;
readCount+=rc;
return new String(byteBuffer);
}
-
- /**
- * Sends a request to the Debugengine and waits for an OK.
- *
- * @param command debug command
- * @throws DebugException if the request fails
- */
-
-
- public int sendRequest(String command) throws DebugException {
- return sendRequest(command,"");
- }
-
- public DebugResponse sendRequestA(String command, String parameter) {
- int result = -1;
+ public DebugResponse sendRequest(String command, String arguments) {
+ int id = -1;
- try {
- result = sendRequest(command, parameter);
- } catch( DebugException e ){
- e.printStackTrace();
- }
+ id = _sendRequest(command, arguments);
+
+ DebugResponse response = getResponse(id);
- DebugResponse response = getResponse(result);
-
return response;
}
-
- /**
- * Sends a request to the Debugengine.
- *
- * @param command debug command
- * @arguments arguments for the command
- * @throws DebugException if the request fails
- */
-
- public synchronized int sendRequest(String command, String arguments) throws DebugException {
-
+
+ private synchronized int _sendRequest(String command, String arguments) {
XDebugCorePlugin.log(IStatus.INFO,command+" -i "+fTransactionID+" "+arguments);
synchronized (fDebugSocket) {
try {
fDebugWriter.write(0);
fDebugWriter.flush();
} catch (IOException e) {
- //e.printStackTrace();
+ e.printStackTrace();
}
}
+
return fTransactionID++;
}
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#featureGet(java.lang.String)
- */
- public DebugResponse featureGet(String featureName) {
- int id=-1;
+ public DebugResponse eval(String Expression) {
+ String encoded = Base64.encodeBytes(Expression.getBytes());
- try {
- id= sendRequest("feature_get","-n "+featureName);
- } catch (DebugException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- DebugResponse response = getResponse(id);
+ return sendRequest("eval", "-- "+encoded);
+ }
- return response;
+ public DebugResponse featureGet(String featureName) {
+ return sendRequest("feature_get","-n "+featureName);
}
public boolean featureSet(String featureName, String value) {
- int id=-1;
-
- try {
- id= sendRequest("feature_set","-n "+featureName + " -v " + value);
- } catch (DebugException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ DebugResponse id = sendRequest("feature_set","-n "+featureName + " -v " + value);
- if (getResponse(id).getAttributeValue("success").equals("1") )
+ if (id.getAttributeValue("success").equals("1") )
return true;
else
return false;
}
protected void addResponse(DebugResponse response, int id) {
- fResponseList.add(response,id);
-
+ fResponseList.add(response, id);
}
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#addBreakpoint(org.eclipse.debug.core.model.IBreakpoint)
- */
- public void addBreakpoint(IBreakpoint breakpoint, IPath filePath) throws DebugException {
- try {
- if (breakpoint.isEnabled()) {
- IMarker marker = breakpoint.getMarker();
- if (marker != null) {
- try {
- String arg;
-
- arg = "-t line -f file://"+PHPDebugUtils.escapeString(filePath.toString())+" -n "+((ILineBreakpoint)breakpoint).getLineNumber();
- int id = sendRequest("breakpoint_set", arg);
- String bpid = getResponse(id).getAttributeValue("id");
-
- if (!"".equals(bpid))
- marker.setAttribute(XDebugLineBreakpoint.BREAKPOINT_ID,Integer.parseInt(bpid));
-
- } catch (CoreException e) {
- XDebugCorePlugin.log(IStatus.INFO,"Exception set break point");
- }
- }
- }
- } catch (CoreException e) {
- XDebugCorePlugin.log(IStatus.INFO,"Exception in breakpoint");
- }
- }
-
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#removeBreakpoint(int)
- */
- public void removeBreakpoint(IBreakpoint breakpoint) throws DebugException {
- try {
- int id =((XDebugLineBreakpoint)breakpoint).getID();
- if (id >0)
- sendRequest("breakpoint_remove","-d "+id);
- } catch (CoreException e) {
- }
- }
-
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#getStackFrames(net.sourceforge.phpeclipse.xdebug.php.model.XDebugThread)
- */
- public IStackFrame[] getStackFrames(XDebugThread thread) throws DebugException {
- int id = sendRequest("stack_get");
- DebugResponse lastResponse = getResponse(id);
- if (lastResponse.isError())
- return new IStackFrame[0];
- Node response = lastResponse.getParentNode();
- NodeList frames = response.getChildNodes();
- IStackFrame[] theFrames = new IStackFrame[frames.getLength()];
- for (int i = 0; i < frames.getLength(); i++) {
- Node stackNode = frames.item(i);
- XDebugStackFrame frame = new XDebugStackFrame(thread, i);
- String level =PHPDebugUtils.getAttributeValue(stackNode,"level");
- if (!"".equals(level))
- frame.setLevel(Integer.parseInt(level));
-
- frame.setType(PHPDebugUtils.getAttributeValue(stackNode,"type"));
- String fileName=PHPDebugUtils.unescapeString(PHPDebugUtils.getAttributeValue(stackNode,"filename"));
- String lineNo=PHPDebugUtils.getAttributeValue(stackNode,"lineno");
-
- if (!"".equals(lineNo))
- frame.setLineNumber(Integer.parseInt(lineNo));
-
- frame.setWhere(PHPDebugUtils.getAttributeValue(stackNode,"where"));
-
- try {
- frame.setFullName(new URL(fileName));
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
-
- frame.incrementStepCounter();
-
- theFrames[i] = frame;
- }
+
+ public DebugResponse breakpointSet(String file, int lineNumber) {
+ String arg;
- return theFrames;
+ arg = "-t line -f file://"+PHPDebugUtils.escapeString(file)+" -n " + lineNumber;
+ return sendRequest("breakpoint_set", arg);
}
-
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#stepOver()
- */
- public void stepOver() throws DebugException {
- sendRequest ("step_over");
+
+ public DebugResponse breakpointRemove(int id) {
+ return sendRequest("breakpoint_set", "-d " + id);
}
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#stepInto()
- */
- public void stepInto() throws DebugException {
- sendRequest("step_into");
+ public DebugResponse stackGet(int Level) {
+ /*if (Level > -1) {
+ return sendRequest("stack_get", "-d " + Level);
+ } else {*/
+ return sendRequest("stack_get", "");
+ //}
+ }
+
+ public void stepOver() {
+ sendRequest("step_over", "");
}
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#stepOut()
- */
- public void stepOut() throws DebugException {
- sendRequest ("step_out");
+ public void stepInto() {
+ sendRequest("step_into", "");
}
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#run()
- */
- public void run() throws DebugException {
- sendRequest ("run");
+ public void stepOut() {
+ sendRequest("step_out", "");
}
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#stop()
- */
- public void stop() throws DebugException {
- sendRequest ("stop");
+ public void run() {
+ sendRequest("run", "");
}
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#setResponseListerner(org.eclipse.core.runtime.jobs.Job)
- */
- public void setResponseListerner(Job listener) {
-// fResponseListener=(ResponseListener)listener;;
+ public void stop() {
+ sendRequest("stop", "");
}
- /* (non-Javadoc)
- * @see net.sourceforge.phpeclipse.xdebug.core.IDebugConnection#startListener()
- */
public void startListener() {
fResponseListener.schedule();
}
+
+ public DebugResponse propertySet(String Name, String Value) {
+ String str = Base64.encodeBytes(Value.getBytes());
+ int len = str.length();
- public boolean setVarValue(String name, String value) {
- int id=-1;
- String str=Base64.encodeBytes(value.getBytes());
- int len=str.length();
+ return sendRequest("property_set", "-n " + Name + " -l " + len + " -- " + str);
+ }
+
+ public boolean setVarValue(String Name, String Value) {
+ DebugResponse dr = propertySet(Name, Value);
- try {
- id =sendRequest("property_set","-n "+name+" -l "+len + " -- "+str);
- } catch (DebugException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- DebugResponse dr=getResponse(id);
if ((dr.getAttributeValue("success")).equals("1"))
return true;
return false;
-
}
public void close() {
- fResponseListener.cancel();
+ fIsClosed = true;
+ //fResponseListener.cancel();
+ //fResponseListener = null;
try {
fDebugReader.close();
fDebugWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
+ fResponseListener.cancel();
fIsClosed=true;
}
-
-
- public XDebugVariable getVariableFromNodeA(XDebugStackFrame frame, Node property) {
- String address = PHPDebugUtils.getAttributeValue(property, "address");
- String varName;
- String Name = PHPDebugUtils.getAttributeValue(property,"name");
- if ("".equals(Name)) {
- varName = address;
- } else {
- varName = Name;
- }
-
- String varEncoding=PHPDebugUtils.getAttributeValue(property,"encoding");
- int varNumChildren = 0;
- if (PHPDebugUtils.getAttributeValue(property,"numchildren").equals(""))
- varNumChildren = 0;
- else
- varNumChildren=Integer.parseInt(PHPDebugUtils.getAttributeValue(property,"numchildren"));
-
- String typeName=PHPDebugUtils.getAttributeValue(property,"type");
-
- XDebugVariable variable = new XDebugVariable(typeName, varName);
- variable.setEncoding(varEncoding);
- variable.setNumChildren(varNumChildren);
- XDebugAbstractValue val=null;
- try {
- val = (XDebugAbstractValue) variable.getValue();
- } catch (DebugException e1) {
- e1.printStackTrace();
- }
- if (val.getType()!= XDebugAbstractValue.VALUETYPE_UNINITIALIZED) {
- if (variable.hasChildren()) {
- NodeList varNodes = property.getChildNodes();
- val.renderValueString(""+varNodes.getLength());
- IVariable[] variables = new IVariable[varNodes.getLength()];
- for (int i = 0; i<varNodes.getLength(); i++) {
- Node propertyNode = varNodes.item(i);
- variables[i] = getVariableFromNodeA(frame, propertyNode);
- }
- val.setChildVariables(variables);
- }else {
- String str="";
- try {
- str=property.getFirstChild().getNodeValue();
- } catch (NullPointerException e) {
- str="";
- }
- if (variable.getEncoding().equals("base64")) {
- if (str.length()!=0)
- str=new String(Base64.decode(str));
- else
- str="";
- }
- val.renderValueString(str);
- }
-
- String className=PHPDebugUtils.getAttributeValue(property,"classname");
- if(!"".equals(className))
- val.renderValueString(className);
- }
- return variable;
-
- }
- private XDebugVariable getVariableFromNode(XDebugStackFrame frame, Node property) {
- String varFullName = PHPDebugUtils.getAttributeValue(property, "fullname");
- String varName = PHPDebugUtils.getAttributeValue(property, "name");
- String varEncoding = PHPDebugUtils.getAttributeValue(property, "encoding");
-
- int varNumChildren = 0;
- if (PHPDebugUtils.getAttributeValue(property, "numchildren").equals("")) {
- varNumChildren = 0;
- } else {
- varNumChildren = Integer.parseInt(PHPDebugUtils.getAttributeValue(property, "numchildren"));
- }
-
- String typeName = PHPDebugUtils.getAttributeValue(property,"type");
-
- XDebugVariable variable = new XDebugVariable(frame,varFullName,varName,typeName);
- variable.setEncoding(varEncoding);
- variable.setNumChildren(varNumChildren);
- XDebugAbstractValue val=null;
- try {
- val = (XDebugAbstractValue) variable.getValue();
- } catch (DebugException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- if (val.getType()!= XDebugAbstractValue.VALUETYPE_UNINITIALIZED) {
- if (variable.hasChildren()) {
- NodeList varNodes = property.getChildNodes();
- val.renderValueString(""+varNodes.getLength());
- IVariable[] variables = new IVariable[varNodes.getLength()];
- for (int i = 0; i<varNodes.getLength(); i++) {
- Node propertyNode = varNodes.item(i);
- variables[i] = getVariableFromNode(frame, propertyNode);
- }
- val.setChildVariables(variables);
- }else {
- String str="";
- try {
- str=property.getFirstChild().getNodeValue();
- } catch (NullPointerException e) {
- str="";
- }
- if (variable.getEncoding().equals("base64")) {
- if (str.length()!=0)
- str=new String(Base64.decode(str));
- else
- str="";
- }
- val.renderValueString(str);
- }
-
- String className=PHPDebugUtils.getAttributeValue(property,"classname");
- if(!"".equals(className))
- val.renderValueString(className);
- }
- return variable;
-
+ public DebugResponse contextGet(int Level, int Type) {
+ return sendRequest("context_get", "-d " + Level + " -c " + Type);
}
-
- public IVariable[] getVariables(XDebugStackFrame frame,int level) {
- IVariable[] variables = null;
-
- int idLocal = -1;
- try {
- idLocal = sendRequest("context_get", "-d " + level);
- } catch (DebugException e) {
- e.printStackTrace();
- }
- DebugResponse response = getResponse(idLocal);
- Node responseNode = response.getParentNode();
- NodeList property = responseNode.getChildNodes();
-
- int idSuperGlobal = -1;
- try {
- idSuperGlobal = sendRequest("context_get", "-d " + level + " -c 1");
- } catch (DebugException e) {
- e.printStackTrace();
- }
- DebugResponse responseGlobal = getResponse(idSuperGlobal);
- Node responseGlobalNode = responseGlobal.getParentNode();
- NodeList propertyGlobal = responseGlobalNode.getChildNodes();
-
- variables = new IVariable[property.getLength() + propertyGlobal.getLength()];
-// variables = new IVariable[property.getLength()]; // + propertyGlobal.getLength()];
-
- int length = property.getLength();
- for (int i = 0; i < length; i++) {
- Node propertyNode = property.item(i);
- XDebugVariable var=getVariableFromNode(frame,propertyNode);
- variables[i]=var;
- }
-
- int globalLength = propertyGlobal.getLength();
- for (int k = 0; k < globalLength; k++) {
- Node propertyGlobalNode = propertyGlobal.item(k);
- XDebugVariable var=getVariableFromNode(frame,propertyGlobalNode);
- variables[k + length]=var;
- }
-
- return variables;
- }
}
\ No newline at end of file
*/
package net.sourceforge.phpeclipse.xdebug.php.model;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.List;
-import net.sourceforge.phpeclipse.xdebug.core.AbstractDebugConnection;
-import net.sourceforge.phpeclipse.xdebug.core.IDebugConnection;
+import net.sourceforge.phpeclipse.xdebug.core.Base64;
import net.sourceforge.phpeclipse.xdebug.core.IPHPDebugEvent;
import net.sourceforge.phpeclipse.xdebug.core.IProxyEventListener;
+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;
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.IValue;
import org.eclipse.debug.core.model.IVariable;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import net.sourceforge.phpeclipse.xdebug.core.xdebug.XDebugConnection;
import net.sourceforge.phpeclipse.xdebug.core.xdebug.ResponseListener.DebugResponse;
/**
* @author Christian
*
*/
-public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunchListener, IDebugEventSetListener, IProxyEventListener{
- // associated system process (VM)
+public class XDebugTarget extends XDebugElement implements IDebugTarget, ILaunchListener, 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;
- 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
* someone with the ideKey connects to the Debugproxy
* @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<String> pathMap) throws CoreException {
- super(null);
- init(launch, process, ideKey,pathMap);
- }*/
-
- private void init(ILaunch launch, IProcess process, String ideKey/*,List<String> pathMap*/) {
+ */
+ public XDebugTarget(ILaunch launch, IProcess process, String ideKey) throws CoreException {
fLaunch = launch;
fProcess = process;
fTarget = this;
* @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);
* @see org.eclipse.debug.core.model.ISuspendResume#canResume()
*/
public boolean canResume() {
-// return !isTerminated() && isSuspended();
return false;
}
* @see org.eclipse.debug.core.model.ISuspendResume#canSuspend()
*/
public boolean canSuspend() {
-// return !isTerminated() && !isSuspended();
return false;
}
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) {
+ //fDebugConnection.addBreakpoint(breakpoint, newPath);
+ DebugResponse dr = fDebugConnection.breakpointSet(newPath.toString(), ((ILineBreakpoint)breakpoint).getLineNumber());
+ 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();
}
}
}
} else {
if (supportsBreakpoint(breakpoint)) {
try {
- fDebugConnection.addBreakpoint(breakpoint, path);
+ if (breakpoint.isEnabled()) {
+ if (marker != null) {
+ DebugResponse dr = fDebugConnection.breakpointSet(path.toString(), ((ILineBreakpoint)breakpoint).getLineNumber());
+ 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();
}
}
}
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) {
}
}
fThread.setBreakpoints(null);
fThread.setStepping(false);
- /*boolean CanDisconnect =*/ Integer.parseInt(fDebugConnection.featureGet("detach").getValue()) /*!= 0*/;
+ Integer.parseInt(fDebugConnection.featureGet("detach").getValue());
System.out.println("in Target.started()");
DebugResponse response = fDebugConnection.featureGet("max_children");
installDeferredBreakpoints();
try {
resume();
-// step();
} catch (DebugException e) {
e.printStackTrace();
}
* @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 IStackFrame[] getStackFrames() throws DebugException {
+ DebugResponse lastResponse = fDebugConnection.stackGet(0);
+
+ if (lastResponse.isError())
+ return new IStackFrame[0];
+ Node response = lastResponse.getParentNode();
+ NodeList frames = response.getChildNodes();
+ IStackFrame[] theFrames = new IStackFrame[frames.getLength()];
+ for (int i = 0; i < frames.getLength(); i++) {
+ Node stackNode = frames.item(i);
+ XDebugStackFrame frame = new XDebugStackFrame(fThread, i);
+ String level =PHPDebugUtils.getAttributeValue(stackNode,"level");
+ if (!"".equals(level))
+ frame.setLevel(Integer.parseInt(level));
+
+ frame.setType(PHPDebugUtils.getAttributeValue(stackNode,"type"));
+ String fileName=PHPDebugUtils.unescapeString(PHPDebugUtils.getAttributeValue(stackNode,"filename"));
+ String lineNo=PHPDebugUtils.getAttributeValue(stackNode,"lineno");
+
+ if (!"".equals(lineNo))
+ frame.setLineNumber(Integer.parseInt(lineNo));
+
+ frame.setWhere(PHPDebugUtils.getAttributeValue(stackNode,"where"));
+
+ try {
+ frame.setFullName(new URL(fileName));
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+
+ frame.incrementStepCounter();
+
+ theFrames[i] = frame;
+ }
+
+ return theFrames;
}
/**
* @return variable value
* @throws DebugException if the request fails
*/
- protected IValue getVariableValue(XDebugVariable variable) throws DebugException {
+ /*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 {
+ /*public IValue[] getDataStack() throws DebugException {
return new IValue[0];
- }
+ }*/
public boolean setVarValue(String name, String value) {
return fDebugConnection.setVarValue(name,value);
}
public void handleDebugEvents(DebugEvent[] events) {
- for (int i=0;i<events.length;i++) {
- DebugEvent event=events[i];
- if(event.getKind()==DebugEvent.MODEL_SPECIFIC) {
- if (event.getDetail()==IPHPDebugEvent.BREAKPOINT_HIT) {
- IBreakpoint breakpoint = (IBreakpoint) event.getData();
- fThread.setBreakpoints(new IBreakpoint[]{breakpoint});
- fThread.incrementStepCounter();
- suspended(DebugEvent.BREAKPOINT);
- } else if (event.getDetail()==IPHPDebugEvent.STEP_END) {
- fThread.incrementStepCounter();
- suspended(DebugEvent.STEP_END);
- } else if (event.getDetail()==IPHPDebugEvent.STOPPED) {
- //fDebugConnection.removeBreakpoint(breakpoint);
- fThread.removeEventListeners();
- fThread=null;
- fThreads= new IThread[0];
- fSuspended=false;
- // TODO Dirty hack to check debugging mode (remote or local)
- if (fProcess!=null) {
- try {
- terminate();
- } catch (DebugException e) {
- e.printStackTrace();
+ for (int i = 0; i < events.length; i++) {
+ DebugEvent event = events[i];
+ if (event.getKind() == DebugEvent.MODEL_SPECIFIC) {
+ switch (event.getDetail()) {
+ case IPHPDebugEvent.BREAKPOINT_HIT:
+ DebugResponse lastResponse = ((XDebugConnection) fDebugConnection).stackGet(0);
+
+ IBreakpoint breakpoint = breakpointHit(lastResponse.getParentNode());
+
+ fThread.setBreakpoints(new IBreakpoint[]{breakpoint});
+ fThread.incrementStepCounter();
+ suspended(DebugEvent.BREAKPOINT);
+ break;
+ case IPHPDebugEvent.STEP_END:
+ fThread.incrementStepCounter();
+ suspended(DebugEvent.STEP_END);
+ break;
+ case IPHPDebugEvent.STOPPED:
+ fThread.removeEventListeners();
+ fThread = null;
+ fThreads = new IThread[0];
+
+ fDebugConnection.close();
+
+ fSuspended = false;
+
+ // Dirty hack to check debugging mode (remote or local)
+ if (fProcess!=null) {
+ try {
+ terminate();
+ } catch (DebugException e) {
+ e.printStackTrace();
+ }
+ } else {
+ fDebugConnection = null;
+ fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CONTENT));
}
- } else {
- fDebugConnection = null;
- fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CONTENT));
- }
- } else {
- int a = 20;
- a *= 10;
+ break;
}
- } else {
- int b = 10;
- b *= 1;
}
}
-
}
-
- public void handleProxyEvent(String ideKey, String initString, AbstractDebugConnection connection) {
+
+ public void handleProxyEvent(String ideKey, String initString, /*AbstractDebugConnection*/ XDebugConnection connection) {
System.out.println("* New Connection - XDebug.Target: "+ideKey);
setDebugConnection(connection);
XDebugProxy proxy=XDebugCorePlugin.getDefault().getXDebugProxy();
fDebugPort=proxy.getProxyPort();
fireEvent(new DebugEvent(this, DebugEvent.CHANGE, DebugEvent.CHANGE));
-
-// proxy.removeProxyEventListener(this,ideKey);
-// System.out.println("XDebug.Target: ProxyEventlistener removed");
fThread = new XDebugThread(this);
fThreads = new IThread[] {fThread};
try {
}
}
- private void setDebugConnection(AbstractDebugConnection connection) {
+ private void setDebugConnection(XDebugConnection connection) {
if (connection != null) {
fDebugConnection = connection;
fDebugConnection.startListener();
/**
* @return Returns the fDebugConnection.
*/
- public IDebugConnection getDebugConnection() {
+ public XDebugConnection getDebugConnection() {
return fDebugConnection;
}
public void launchChanged(ILaunch launch) {
}
- public IVariable[] getVariables(XDebugStackFrame StackFrame, int Level) {
- return fDebugConnection.getVariables(StackFrame, Level);
+ public IVariable[] getVariables(XDebugStackFrame frame, int level) throws DebugException {
+ IVariable[] variables = null;
+
+ DebugResponse response = fDebugConnection.contextGet(level, 0);
+ Node responseNode = response.getParentNode();
+ NodeList property = responseNode.getChildNodes();
+
+ DebugResponse responseGlobal = fDebugConnection.contextGet(level, 1);
+ Node responseGlobalNode = responseGlobal.getParentNode();
+ NodeList propertyGlobal = responseGlobalNode.getChildNodes();
+
+ variables = new IVariable[property.getLength() + propertyGlobal.getLength()];
+// variables = new IVariable[property.getLength()]; // + propertyGlobal.getLength()];
+
+ int length = property.getLength();
+ for (int i = 0; i < length; i++) {
+ Node propertyNode = property.item(i);
+ XDebugVariable var=/*fDebugConnection.*/getVariableFromNode(frame,propertyNode);
+ variables[i]=var;
+ }
+
+ int globalLength = propertyGlobal.getLength();
+ for (int k = 0; k < globalLength; k++) {
+ Node propertyGlobalNode = propertyGlobal.item(k);
+ XDebugVariable var=/*fDebugConnection.*/getVariableFromNode(frame,propertyGlobalNode);
+ variables[k + length]=var;
+ }
+
+ return variables;
+ }
+
+ public XDebugVariable getVariableFromNode(XDebugStackFrame frame, Node property) {
+ String varFullName = PHPDebugUtils.getAttributeValue(property, "fullname");
+ String varName = PHPDebugUtils.getAttributeValue(property, "name");
+ String varEncoding = PHPDebugUtils.getAttributeValue(property, "encoding");
+
+ int varNumChildren = 0;
+ if (PHPDebugUtils.getAttributeValue(property, "numchildren").equals("")) {
+ varNumChildren = 0;
+ } else {
+ varNumChildren = Integer.parseInt(PHPDebugUtils.getAttributeValue(property, "numchildren"));
+ }
+
+ String typeName = PHPDebugUtils.getAttributeValue(property,"type");
+
+ XDebugVariable variable = new XDebugVariable(frame,varFullName,varName,typeName);
+ variable.setEncoding(varEncoding);
+ variable.setNumChildren(varNumChildren);
+ XDebugAbstractValue val=null;
+ try {
+ val = (XDebugAbstractValue) variable.getValue();
+ } catch (DebugException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ if (val.getType()!= XDebugAbstractValue.VALUETYPE_UNINITIALIZED) {
+ if (variable.hasChildren()) {
+ NodeList varNodes = property.getChildNodes();
+ val.renderValueString(""+varNodes.getLength());
+ IVariable[] variables = new IVariable[varNodes.getLength()];
+ for (int i = 0; i<varNodes.getLength(); i++) {
+ Node propertyNode = varNodes.item(i);
+ variables[i] = getVariableFromNode(frame, propertyNode);
+ }
+ val.setChildVariables(variables);
+ }else {
+ String str="";
+ try {
+ str=property.getFirstChild().getNodeValue();
+ } catch (NullPointerException e) {
+ str="";
+ }
+ if (variable.getEncoding().equals("base64")) {
+ if (str.length()!=0)
+ str=new String(Base64.decode(str));
+ else
+ str="";
+ }
+ val.renderValueString(str);
+ }
+
+ String className=PHPDebugUtils.getAttributeValue(property,"classname");
+ if(!"".equals(className))
+ val.renderValueString(className);
+ }
+ return variable;
+
}
+
+ 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");
+ IBreakpoint[] breakpoints = XDebugCorePlugin.getBreakpoints();
+ for (int i = 0; i < breakpoints.length; i++) {
+ IBreakpoint breakpoint = breakpoints[i];
+ if (supportsBreakpoint(breakpoint)) {
+ if (breakpoint instanceof ILineBreakpoint) {
+ ILineBreakpoint lineBreakpoint = (ILineBreakpoint) breakpoint;
+ try {
+ if (breakpoint.isEnabled()) {
+ IMarker marker = breakpoint.getMarker();
+ if (marker != null) {
+ String endfilename;
+
+ if (getProcess() == null) {
+ endfilename = marker.getResource().getLocation().lastSegment();
+ } else {
+ endfilename = marker.getResource().getLocation().toOSString();
+ }
+
+ if(PHPDebugUtils.unescapeString(filename).endsWith(endfilename) && (lineBreakpoint.getLineNumber() == lineNumber) ) {
+ return (breakpoint);
+ }
+ }
+ }
+ } catch (CoreException e) {
+ }
+ }
+ }
+ }
+ }
+
+ return null;
+ }
}
\ No newline at end of file
import net.sourceforge.phpeclipse.xdebug.core.Base64;
+import net.sourceforge.phpeclipse.xdebug.core.PHPDebugUtils;
import net.sourceforge.phpeclipse.xdebug.core.xdebug.XDebugConnection;
import net.sourceforge.phpeclipse.xdebug.core.xdebug.ResponseListener.DebugResponse;
import net.sourceforge.phpeclipse.xdebug.php.model.XDebugVariable;
import net.sourceforge.phpeclipse.xdebug.php.model.XDebugTarget;
+
+import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IDebugElement;
+import org.eclipse.debug.core.model.IVariable;
import org.eclipse.debug.core.model.IWatchExpressionDelegate;
import org.eclipse.debug.core.model.IWatchExpressionListener;
import org.eclipse.debug.core.model.IWatchExpressionResult;
import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
public class XDebugWatchExpressionDelegate implements IWatchExpressionDelegate {
public void evaluateExpression(String expression, IDebugElement context, IWatchExpressionListener listener) {
if( connection != null ) {
try {
if( ! connection.isClosed() ) {
- String encoded = Base64.encodeBytes(expression.getBytes());
- DebugResponse evalCommand = connection.sendRequestA( "eval", "-- "+encoded );
+ DebugResponse evalCommand = connection.eval(expression);
Node evalNode = evalCommand.getParentNode();
- XDebugVariable var= connection.getVariableFromNodeA( null, evalNode.getFirstChild());
+ XDebugVariable var= /*connection.*/getVariableFromNodeA( null, evalNode.getFirstChild());
XDebugVariable result[] = {var};
if (result.length == 0) {
listener.watchEvaluationFinished(x);
}
+
+ private XDebugVariable getVariableFromNodeA(XDebugStackFrame frame, Node property) {
+ String address = PHPDebugUtils.getAttributeValue(property, "address");
+ String varName;
+ String Name = PHPDebugUtils.getAttributeValue(property,"name");
+ if ("".equals(Name)) {
+ varName = address;
+ } else {
+ varName = Name;
+ }
+
+ String varEncoding=PHPDebugUtils.getAttributeValue(property,"encoding");
+ int varNumChildren = 0;
+ if (PHPDebugUtils.getAttributeValue(property,"numchildren").equals(""))
+ varNumChildren = 0;
+ else
+ varNumChildren=Integer.parseInt(PHPDebugUtils.getAttributeValue(property,"numchildren"));
+
+ String typeName=PHPDebugUtils.getAttributeValue(property,"type");
+
+ XDebugVariable variable = new XDebugVariable(typeName, varName);
+ variable.setEncoding(varEncoding);
+ variable.setNumChildren(varNumChildren);
+ XDebugAbstractValue val=null;
+ try {
+ val = (XDebugAbstractValue) variable.getValue();
+ } catch (DebugException e1) {
+ e1.printStackTrace();
+ }
+ if (val.getType()!= XDebugAbstractValue.VALUETYPE_UNINITIALIZED) {
+ if (variable.hasChildren()) {
+ NodeList varNodes = property.getChildNodes();
+ val.renderValueString(""+varNodes.getLength());
+ IVariable[] variables = new IVariable[varNodes.getLength()];
+ for (int i = 0; i<varNodes.getLength(); i++) {
+ Node propertyNode = varNodes.item(i);
+ variables[i] = getVariableFromNodeA(frame, propertyNode);
+ }
+ val.setChildVariables(variables);
+ }else {
+ String str="";
+ try {
+ str=property.getFirstChild().getNodeValue();
+ } catch (NullPointerException e) {
+ str="";
+ }
+ if (variable.getEncoding().equals("base64")) {
+ if (str.length()!=0)
+ str=new String(Base64.decode(str));
+ else
+ str="";
+ }
+ val.renderValueString(str);
+ }
+
+ String className=PHPDebugUtils.getAttributeValue(property,"classname");
+ if(!"".equals(className))
+ val.renderValueString(className);
+ }
+ return variable;
+
+ }
}
\ No newline at end of file