Hallo!
Ich habe folgende Klasse Main, welche ich mit der Klasse Debugger debuggen möchte.
Nach dem Starten bekomme ich die Ausgabe:
start event
death event
disconnected event
eigentlich müsste doch nach dem "start event" die main-Funktion der Klasse Main aufgerufen werden, es passiert aber nichts.
Außerdem ist es merkwürdig, dass ich überhaupt keinen Fehler bekomme, wenn ich als "className" eine Klasse angebe, die gar nicht existiert.
Ich habe folgende Klasse Main, welche ich mit der Klasse Debugger debuggen möchte.
Code:
public class Main
{
public static void main(String args[])
{
System.out.println("A");
System.out.println("B");
System.out.println("C");
System.out.println("D");
}
}
Code:
import java.util.List;
import java.util.Map;
import com.sun.jdi.*;
import com.sun.jdi.connect.Connector;
import com.sun.jdi.connect.LaunchingConnector;
import com.sun.jdi.event.*;
public class Debugger
{
private LaunchingConnector connector;
private VirtualMachine vm;
ThreadReference mainThread;
private Map<String, Connector.Argument> connectorArgs;
public Debugger(String className)
{
List<LaunchingConnector> connectors = Bootstrap.virtualMachineManager().launchingConnectors();
// Suche Connector
connector = null;
for(LaunchingConnector c : connectors)
if(c.name().equals("com.sun.jdi.CommandLineLaunch"))
connector = c;
// Argumente für Connector
connectorArgs = connector.defaultArguments();
Connector.Argument argument = connectorArgs.get("main");
argument.setValue(className);
boolean connected = false;
EventQueue queue = null;
try
{
vm = connector.launch(connectorArgs);
vm.setDebugTraceMode(VirtualMachine.TRACE_NONE);
queue = vm.eventQueue();
connected = true;
}
catch(Exception e)
{
System.out.println(e);
}
while(connected)
{
try
{
EventSet eventSet = queue.remove();
boolean ack = false;
for(Event e : eventSet)
{
if(e instanceof LocatableEvent)
{
int line;
line = ((LocatableEvent) e).location().lineNumber();
System.out.println("Line: "+line);
}
if(e instanceof VMStartEvent)
{
System.out.println("start event");
ack = true;
}
else if(e instanceof VMDeathEvent)
{
System.out.println("death event");
ack = true;
}
else if(e instanceof VMDisconnectEvent)
{
System.out.println("disconnected event");
ack = true;
connected = false;
}
}
if(ack)
eventSet.resume();
}
catch (InterruptedException e)
{
System.out.println(e);
}
}
}
public static void main(String[] args)
{
new Debugger("Main");
}
}
Nach dem Starten bekomme ich die Ausgabe:
start event
death event
disconnected event
eigentlich müsste doch nach dem "start event" die main-Funktion der Klasse Main aufgerufen werden, es passiert aber nichts.
Außerdem ist es merkwürdig, dass ich überhaupt keinen Fehler bekomme, wenn ich als "className" eine Klasse angebe, die gar nicht existiert.