package xtc.lang.blink;
import java.io.IOException;
import xtc.lang.blink.Event.RawTextMessageEvent;
import xtc.lang.blink.agent.AgentCommandOptions;
/** A debuggee JVM class. */
public class DebugeeJVM extends StdIOProcess implements AgentCommandOptions {
/**
* Constructor.
* @param dbg The debugger.
* @param name The name.
*/
public DebugeeJVM(Blink dbg, String name) {
super(dbg, name);
}
/**
* Launch the debuggee JVM and return the JPDA listener address.
*
* @param argument The arguments.
* @param address The listener address.
*/
public void beginDebugSession(String argument, String address) throws IOException {
final String transport;
if (System.getProperty("os.name").startsWith("Windows")) {
transport="dt_shmem";
} else {
transport="dt_socket";
}
final StringBuffer agentOptions = new StringBuffer();
agentOptions.append("=bia=y");
if (dbg.options.isJniCheck()) {
agentOptions.append("," + JNICHECK + "=y");
} else {
agentOptions.append("," + JNICHECK + "=n");
}
final String jvmCommand = "java "
+ "-Xdebug -agentlib:jdwp=server=n,suspend=y"
+ ",transport=" + transport
+ ",address=" + address + " "
+ "-agentpath:" + Blink.ensureAgentLibraryPath()
+ agentOptions.toString()
+ " " + argument;
if (dbg.options.getVerboseLevel() >= 1) {
dbg.out("executing: " + jvmCommand + "\n");
}
begin(jvmCommand.split("\\s+"));;
}
/**
* Internally process the raw message to generate macro event.
*
* @param e The raw text message event.
*/
void processMessageEvent(RawTextMessageEvent e) {
dbg.out(e.getMessage()); // bypass the message from the JVM.
}
}