カスタマイズしたデバッガーを Eclipse プラグインとして開発しています。この目的のために JPDA API を使用しています。オブジェクト参照変数の値を取得したいと思います。したがって、toString() メソッドを呼び出してObjectReference.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 行目で問題なく動作します。insert変数の toString() メソッドを呼び出すことで、結果を正常に取得できます。ただし、5 行目で TimeOutException が報告されます。ただ、10秒でJVM起動時のタイムアウトオプションを設定してあるので、toString()メソッド呼び出しの結果を取得するのに十分な時間だと思います。トレース スタックは次のとおりです。問題について何か考えはありますか?ありがとう!
org.eclipse.jdi.TimeoutException: パケット 586 の待機中にタイムアウトが発生しました。 org.eclipse.jdi.internal.MirrorImpl.requestVM(MirrorImpl.java:191) の getReply(PacketReceiveManager.java:197) 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)