blob: e64f220500f619e5d070b9ba204dff60baa1a1ce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Bjorn Freeman-Benson - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.examples.core.pda.model;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IBreakpointManager;
import org.eclipse.debug.core.model.DebugElement;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.examples.core.pda.DebugCorePlugin;
/**
* Common function for PDA debug elements.
*/
public class PDADebugElement extends DebugElement {
/**
* Constructs a new debug element in the given target.
*
* @param target debug target
*/
public PDADebugElement(IDebugTarget target) {
super(target);
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IDebugElement#getModelIdentifier()
*/
public String getModelIdentifier() {
return DebugCorePlugin.ID_PDA_DEBUG_MODEL;
}
/**
* Sends a request to the PDA interpreter, waits for and returns the reply.
* <p>
* Interpreter commands and replies are as follows:
* <ul>
* <li><code>clear N</code> - clear the breakpoint on line <code>N</code>;
* reply is <code>ok</code></li>
* <li><code>data</code> - return the contents of the data stack; reply is the data
* from oldest to newest as a single string <code>"value|value|value|...|value|"</code></li>
* <li><code>drop</code> - pops the top stack frame off the call stack setting the
* instruction pointer to the calling statement in the calling frame</li>
* <li><code>eventstop E B</code> - optionally stop the interpreter when an error event
* <code>E</code> is encountered; <code>B</code> specifies stop (<code>1</code>) or
* continue (<code>0</code>). The possible events are <code>unimpinstr</code> and
* <code>nosuchlabel</code>. Reply is <code>ok</code>. When an event is encountered,
* the interpreter sends the error event (for example <code>unimlpemented instruction foo</code>)
* and corresponding suspend event (for example <code>suspended event unimpinstr</code>).</li>
* <li><code>exit</code> - end the interpreter; reply is <code>ok</code></li>
* <li><code>popdata</code> - pop the top value off the data stack; reply is the value</li>
* <li><code>pushdata V</code> - push the value <code>V</code> onto the data stack; reply is
* <code>ok</code></li>
* <li><code>resume</code> - resume execution of the program; reply is <code>ok</code></li>
* <li><code>set N</code> - set a line breakpoint on line <code>N</code> (lines are indexed
* from 0); reply is <code>ok</code></li>
* <li><code>setdata N V</code> - set the contents of data stack element <code>N</code> to
* value <code>V</code> (the data stack is indexed from 0, 0 being the oldest); reply
* is <code>ok</code></li>
* <li><code>setvar N M V</code> - set the contents of variable <code>M</code> from the control
* stack <code>N</code> to value <code>V</code> (the control stack is indexed from 0,
* 0 being the oldest); reply is <code>ok</code></li>
* <li><code>stack</code> - return the contents of the control stack (program counters, function and
* variable names); reply is control stack from oldest to newest as a single string
* <code>frame#frame#frame...#frame</code> where each frame is a string
* <code>"filename|pc|function name|variable name|variable name|...|variable name"</code></li>
* <li><code>step</code> - single step forward; reply is <code>ok</code></li>
* <li><code>stepreturn</code> - single step forward until the next <code>return</code> op code;
* stop before executing the <code>return</code> ; reply is <code>ok</code></li>
* <li><code>suspend</code> - suspend execution of the program and listen for debug commands;
* reply is <code>ok</code></li>
* <li><code>watch F::V M</code> - set a watchpoint on variable <code>V</code> in function
* <code>F</code> to magic value <code>M</code>; the magic value is a bit flag corresponding
* to read access (1), write access (2), or both (3); the magic value 0 clears the watchpoint;
* reply is <code>ok</code></li>
* <li><code>var N M</code> - return the contents of variable <code>M</code> in the control
* stack frame <code>N</code> (stack frames are indexed from 0, 0 being the oldest);
* reply is variable value</li>
* </ul>
* </p>
*
* @param request command
* @return reply
* @throws DebugException if the request fails
*/
public String sendRequest(String request) throws DebugException {
return getPDADebugTarget().sendRequest(request);
}
/**
* Returns the debug target as a PDA target.
*
* @return PDA debug target
*/
protected PDADebugTarget getPDADebugTarget() {
return (PDADebugTarget) getDebugTarget();
}
/**
* Returns the breakpoint manager
*
* @return the breakpoint manager
*/
protected IBreakpointManager getBreakpointManager() {
return DebugPlugin.getDefault().getBreakpointManager();
}
}