package xtc.lang.blink;
import java.io.IOException;
import java.util.List;
import xtc.lang.blink.CallStack.NativeCallFrame;
import xtc.lang.blink.CallStack.LocalVariable;
import xtc.lang.blink.Event.BlinkEventSource;
import xtc.lang.blink.SymbolMapper.SourceFileAndLine;
/**
* The exported feature from the native debugger controlled under the Blink.
*/
public interface NativeDebugger extends BlinkEventSource {
/** Transition type between Java and native code. */
static enum LanguageTransitionEventType {
J2C_CALL,
J2C_RETURN,
C2J_CALL,
C2J_RETURN;
}
/** attaching and detaching. */
public void attach(int pid) throws IOException;
public void detach() throws IOException;
public void quit() throws IOException;
/** user level breakpoint and continuing. */
public int createBreakpoint(String sourceFile, int line) throws IOException;
public int createBreakpoint(String symbol) throws IOException;
public void enableBreakpoint(int bpid) throws IOException;
public void disableBreakpoint(int bpid) throws IOException;
public void deleteBreakpoint(int bpid) throws IOException;
/** Enable and disable the internal transition break point. */
public int getLanguageTransitionCount() throws IOException;
public void setTransitionBreakPoint(LanguageTransitionEventType bptype, int transitionCount)
throws IOException;
public void clearTransitionBreakPoint(LanguageTransitionEventType bptype)
throws IOException;
/** For transitions */
public void callNative2Java() throws IOException;
/** Continue the debuggee's execution. */
public void cont() throws IOException;
public void callJavaDummy() throws IOException;
/** Calling context. */
public List<NativeCallFrame> getFrames() throws IOException;
/** Get current location. */
public SourceFileAndLine getCurrentLocation() throws IOException;
public String getSourceLines(String filename, int line, int count) throws IOException;
public List <LocalVariable> getLocals(NativeCallFrame f) throws IOException;
/** Stepping */
public void step() throws IOException;
public void next() throws IOException;
/** Inspecting the memory. */
public String getJNIEnv() throws IOException;
public String eval(NativeCallFrame f, String expr) throws IOException;
public void setVariable(NativeCallFrame f, String name, String expr) throws IOException;
/** Obtain the type of the C expression including convenience variable. */
public String whatis(NativeCallFrame f, String expr) throws IOException;
/** Run the native debugger specific raw command line, and return the response. */
public String runCommand(String command) throws IOException;
/** Perform debugger's internal event handling. */
public void dispatch(Event e);
/** Get the logging message. */
public String getLastOutputMessage();
}