Ich entwickle meinen benutzerdefinierten Debugger als Eclipse-Plugin. Ich verwende die JPDA API zu diesem Zweck. Ich möchte den Wert einiger Objektreferenzvariablen abrufen. Daher versuche ich ObjectReference.invokeMethod durch Aufrufen der toString() -Methode zu verwenden. Mein Code ist wie folgt:TimeoutException beim Aufruf von JDI invokeMethod() aufgetreten
if(thread.isSuspended()){
Method method = retriveToStringMethod(...);
Value messageValue = objValue.invokeMethod(thread, method, new ArrayList<Value>(), ObjectReference.INVOKE_SINGLE_THREADED);
stringValue = messageValue.toString();
}
Allerdings funktioniert es manchmal nicht. Zum Beispiel den folgenden Code Gegeben:
1. public static void main(String[] args) {
2. InsertIntervalBug6 insert = new InsertIntervalBug6();
3.
4. Interval i1 = new Interval(1, 2);
5. Interval i2 = new Interval(3, 4);
6.
7. }
Es ist in Zeile 4 gut funktioniert, kann ich erfolgreich das Ergebnis erhalten, indem toString() -Methode des Einsatz Aufruf variabel. In Zeile 5 wird jedoch eine TimeOutException gemeldet. Allerdings habe ich bereits beim Starten von JVM um 10s die Timeout-Option gesetzt, daher denke ich, dass ein solcher Zeitraum lang genug ist, um das Ergebnis des Aufrufs der toString() -Methode abzurufen. Der Ablaufverfolgungsstapel ist wie folgt. Hast du eine Ahnung von dem Problem? Vielen Dank!
org.eclipse.jdi.TimeoutException: Timeout aufgetreten ist, während für die Paketwarte 586. bei org.eclipse.jdi.internal.connect.PacketReceiveManager.getReply (PacketReceiveManager.java:186) bei org.eclipse.jdi. internal.connect.PacketReceiveManager.getReply (PacketReceiveManager.java:197) bei org.eclipse.jdi.internal.MirrorImpl.requestVM (MirrorImpl.java:191) bei org.eclipse.jdi.internal.MirrorImpl.requestVM (MirrorImpl. Java: 226) bei org.eclipse.jdi.internal.ObjectReferenceImpl.invokeMethod (ObjectReferenceImpl.java:428) bei microbat.codeanalysis.runtime.variable.VariableValueExtractor.setMessageValue (VariableValueExtractor.java:518)