Ответ 1
Я использую Eclipse Luna, Java 7 под Windows.
Ситуация остается такой же, как описано: "Drop to frame" отключен для тестового метода, который сразу же следует за рамкой "NativeMethodAccessorImpl.invoke".
Отключенное состояние "Drop to frame" привязано к методу canDropToFrame()
Соответствующий supportsDropToFrame()
в классе org.eclipse.jdt.internal.debug.core.model.JDIStackFrame
,
(в моем распределении) часть plugins/org.eclipse.jdt.debug_3.8.102.v20150115-1323/jdimodel.jar
.
Метод поддерживаетDropToFrame() проверяет, может ли определенный кадр быть удален, и тесты
- JVM должен поддерживать сброс кадров
- рамка не должна быть самой верхней частью кадра
- кадр не должен быть родным
- предыдущий кадр не должен
Итак, предположение Рамеша было правильным. Это исходный фрагмент кода для тестов 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 теперь может также отбрасывать кадры над собственными кадрами.
Я создал исправленную версию JDIStackFrame, которая пропускает тест 4. Теперь, когда вы остановились на методе теста Junit, функция "Drop to frame" была включена, как и ожидалось.
Но при фактическом снижении фрейма я получил окно с сообщением об ошибке, в котором указано "com.sun.jdi.InternalException: Получил код ошибки в ответ: 32 произошел всплывающий стек стека".
Я предполагаю, что это код ошибки JDWP. Поэтому кажется, что такой "Drop to frame" не работает в JDK 1.7 (не знаю об 1,8), и это не вещь Eclipse.