0

カスタマイズしたデバッガーを 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)

4

1 に答える 1