Не удается установить точку останова в последнем утверждении блока кода в Eclipse - PullRequest
11 голосов
/ 16 октября 2011
if (true) {
    String a = "foo";
    String b = "bar";
}

Если я установлю точку останова на String a = "foo";, затмение остановится, и я смогу перешагнуть и увидеть значение a в окне переменных.Но я не могу перешагнуть через 2-й оператор, он просто покидает блок кода, и я никогда не вижу значения b.

. Это вынуждает меня добавить оператор noop после String b = "bar";, чтобы я могпосмотрим, что содержит b.Я также не могу добавить точку останова при закрытии }, которая, я думаю, может быть связана с проблемами.

Я знаю, что Visual Studio позволяет это, так есть ли способ сделать это в Eclipse?

Ответы [ 4 ]

15 голосов
/ 24 октября 2012

Установить точку останова в конце произвольного блока невозможно (без взлома байт-кода).

Если это тело метода , то оно равно возможно: вы можете установить Метод точка останова.Сделайте это, дважды щелкнув строку определения метода:

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

Стоит заметить, что этот типОднако метод прерывания прерывания точки останова происходит, даже если, например, мы выходим с помощью исключения.

4 голосов
/ 17 октября 2011

Вы можете выделить выражение в правой части задания и нажать Ctrl + Shift + I (для «проверки» я думаю).Он оценит выражение и даст вам результат.Таким образом, вы можете узнать значение b без необходимости использовать точку останова после назначения.

0 голосов
/ 25 октября 2011

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

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

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

0 голосов
/ 17 октября 2011

Честно говоря, я не уверен, что происходит в вашей установке Eclipse.Я работаю на Java и просто перепробовал все, что мог придумать.Я проверил статический метод для точки останова в последней строке, которая не a }, и она работает просто отлично.Я проверил то же самое для нестатического метода.

Это ломается следующим образом: вы не можете установить точку останова на конце фигурной скобки, но по умолчанию она будет равна при фигурной скобке по линии.Поэтому, если у вас есть вложенная функция:

public int DoesStuff(int x, int y) {
    if(x > y) {
        DoThing;
    }
    else {
        DoOtherThing;
    }
}

, тогда последние две фигурные скобки не могут быть разделены точками, но могут DoThing и DoOtherThing.Имеет смысл?

...