Не удается остановить последний оператор блока кода в 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

Если конечная инструкция является присваиванием, и она находится на локальной переменной, почему вы хотите увидеть ее значение, потому что она больше не будет в области видимости и не может влиять.

Если он устанавливает тот же атрибут класса, то вы можете увидеть его, когда вы вернетесь из этого вызова, и у вас есть объект, на котором этот метод работал.

Хотя это не отвечает на вопрос, но я пытаюсь понять прецедент вашей проблемы.