WindowsでEclipse Luna、Java 7を使用しています。状況は説明どおりです。「NativeMethodAccessorImpl.invoke」フレームの直後に続くテスト メソッドでは、「フレームへのドロップ」が無効になっています。「フレームへのドロップ」の無効状態は、クラス(私のディストリビューションでは)の一部のメソッドにcanDropToFrame()
それぞれバインドされています。メソッド supportsDropToFrame() は、特定のフレームをドロップできるかどうかを確認し、テストします。supportsDropToFrame()
org.eclipse.jdt.internal.debug.core.model.JDIStackFrame
plugins/org.eclipse.jdt.debug_3.8.102.v20150115-1323/jdimodel.jar
- JVM はフレームのドロップをサポートしている必要があります
- フレームは最上位のフレームであってはなりません
- フレームはネイティブであってはなりません
- 前のフレームはネイティブであってはなりません
したがって、Ramesh の仮定は正しかった。これは、テスト 3 + 4 の元のコード スニペットです。
int index = 0;
JDIStackFrame frame = null;
while (index < frames.size()) {
frame = (JDIStackFrame) frames.get(index);
index++;
if (frame.isNative()) {
return false;
}
if (frame.equals(this)) {
if (jdkSupport) {
// JDK 1.4 VMs are currently unable to pop the
// frame directly above a native frame
if (index < frames.size()
&& ((JDIStackFrame) frames.get(index))
.isNative()) {
return false;
}
}
return true;
}
}
コメントは、それが JDK 1.4 回で書かれたことを示唆しているため、当面の間、JVM はネイティブ フレームの上にフレームをドロップすることもできます。
テスト 4 をスキップする JDIStackFrame のパッチを適用したバージョンを作成しました。JUnit テスト メソッドで一時停止すると、予想どおり、「フレームへのドロップ」が有効になりました。
しかし、実際にフレームをドロップすると、「com.sun.jdi.InternalException: Got error code in reply: 32 occured popping stack frame」というエラー メッセージ ボックスが表示されました。
これはJDWPエラーコードだと思います。したがって、このような「フレームへのドロップ」は JDK 1.7 (1.8 については不明) では機能しないようで、Eclipse のものではありません。