Не удается остановить последний оператор блока кода в Eclipse
if (true) {
String a = "foo";
String b = "bar";
}
Если я установил точку останова в String a = "foo";
, затмение остановится, и я смогу перешагнуть и увидеть значение a
внутри окна переменных. Но я не могу перейти на второй оператор, он просто покидает блок кода, и я никогда не вижу значения b
.
Это заставляет меня добавить инструкцию noop после String b = "bar";
, чтобы я мог видеть, что содержит b
. Я также не могу добавить точку останова на закрытие }
, которое, я думаю, может быть связано с проблемами.
Я знаю, что Visual Studio позволяет это, так есть ли способ сделать это в Eclipse?
Ответы
Ответ 1
Установить точку останова в конце произвольного блока невозможно (без взлома байтового кода).
Если это тело метода, тогда это возможно: вы можете установить контрольную точку метода. Сделайте это двойным щелчком по строке определения метода:
![sample code with simple method breakpoint]()
(обратите внимание на маленькую стрелку?), а затем в представлении точек останова выберите точку останова, чтобы отобразить флажок Entry
и Exit
в отображаемых свойствах:
![modifying the breakpoint]()
Маленькая стрелка указывает, что по умолчанию мы установили точку останова при входе в метод.
Теперь выберите Exit
(и снимите выделение Entry
), и вы увидите это в виде точек останова:
![exit breakpoint in breakpoints view]()
(Существует небольшая стрелка, указывающая точку останова выхода.)
Теперь запустите отладчик на этом маленьком прерыватель ( "Отладка как приложение Java" ), и он остановит на скобке выхода метода:
![debugger stopped]()
и локальные переменные (только a
в этом случае) теперь видны (с правильными значениями) в представлении "Переменные":
![variables just before exit]()
Стоит отметить, что этот метод прерывания точки прерывания, однако, это происходит - даже, например, если мы выходим, бросая исключение.
Ответ 2
Вы можете выделить выражение в правой части задания и нажать Ctrl + Shift + I (для "проверки", я думаю). Он будет оценивать выражение и давать результат. Таким образом, вы можете узнать значение b
, не требуя точки останова после назначения.
Ответ 3
Я честно не знаю, что происходит в вашей установке Eclipse. Я работаю на Java и просто пытаюсь все, о чем я могу думать. Я проверил статический метод для точки останова на последней строке, которая не a }
, и она работает нормально. Я проверил то же самое для нестатического метода.
Это ломается следующим образом: вы не можете установить точку останова на фигуре фигурного скобки, но по умолчанию она будет под фигурной скобкой. Итак, если у вас есть вложенная функция:
public int DoesStuff(int x, int y) {
if(x > y) {
DoThing;
}
else {
DoOtherThing;
}
}
Тогда последние две фигурные скобки не могут быть оборванными, но DoThing
и DoOtherThing
могут. Есть смысл?
Ответ 4
Если конечная инструкция является присваиванием, и она находится на локальной переменной, почему вы хотите увидеть ее значение, потому что она больше не будет в области видимости и не может влиять.
Если он устанавливает тот же атрибут класса, то вы можете увидеть его, когда вы вернетесь из этого вызова, и у вас есть объект, на котором этот метод работал.
Хотя это не отвечает на вопрос, но я пытаюсь понять прецедент вашей проблемы.