我正在開發自定義調試器作爲eclipse插件。爲此,我正在使用JPDA API。我想檢索一些對象引用變量的值。因此,我嘗試通過調用toString()方法來使用ObjectReference.invokeMethod。我的代碼如下:調用JDI時發生TimeoutException 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。不過,我已經在10秒啓動JVM時設置了超時選項,因此我認爲這樣的時間足夠長以檢索toString()方法調用的結果。跟蹤堆棧如下。你對這個問題有什麼想法嗎?謝謝!
org.eclipse.jdi.TimeoutException:同時在org.eclipse.jdi在org.eclipse.jdi.internal.connect.PacketReceiveManager.getReply(PacketReceiveManager.java:186) 等待分組586 發生超時。在org.eclipse.jdi.internal.MirrorImpl.requestVM(MirrorImpl.java:191) 處的org.eclipse.jdi.internal.MirrorImpl.requestVM(MirrorImpl。)處使用internal.connect.PacketReceiveManager.getReply(PacketReceiveManager.java:197) 。的java:226) 在org.eclipse.jdi.internal.ObjectReferenceImpl.invokeMethod(ObjectReferenceImpl.java:428) 在microbat.codeanalysis.runtime.variable.VariableValueExtractor.setMessageValue(VariableValueExtractor.java:518)