Я разрабатываю свой настроенный отладчик как плагин eclipse. Для этого я использую API JPDA. Я хотел бы получить значение некоторой переменной объекта-ссылки. Поэтому я пытаюсь использовать ObjectReference.invokeMethod, вызывая метод toString(). Мой код выглядит следующим образом:TimeoutException возникло при вызове JDI invokeMethod()
if(thread.isSuspended()){
Method method = retriveToStringMethod(...);
Value messageValue = objValue.invokeMethod(thread, method, new ArrayList<Value>(), ObjectReference.INVOKE_SINGLE_THREADED);
stringValue = messageValue.toString();
}
Однако, это когда-то не работает. Например, Учитывая следующий код:
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. }
Он отлично работает в строке 4, я могу успешно получить результат, вызывая метод ToString() из вставки переменных. Однако, когда в строке 5 сообщается об исключении TimeOutException. Тем не менее, я уже установил параметр таймаута при запуске JVM в 10 секунд, поэтому я думаю, что такой период достаточно длинный, чтобы получить результат вызова метода toString(). Трассировочный стек выглядит следующим образом. Есть ли у вас какое-либо представление о проблеме? Благодаря!
org.eclipse.jdi.TimeoutException: Тайм-аут произошел во время ожидания пакета 586. на org.eclipse.jdi.internal.connect.PacketReceiveManager.getReply (PacketReceiveManager.java:186) на org.eclipse.jdi. internal.connect.PacketReceiveManager.getReply (PacketReceiveManager.java:197) at org.eclipse.jdi.internal.MirrorImpl.requestVM (MirrorImpl.java:191) at org.eclipse.jdi.internal.MirrorImpl.requestVM (MirrorImpl. Java: 226) на org.eclipse.jdi.internal.ObjectReferenceImpl.invokeMethod (ObjectReferenceImpl.java:428) в microbat.codeanalysis.runtime.variable.VariableValueExtractor.setMessageValue (VariableValueExtractor.java:518)