Eclipse: встроенные точки останова - PullRequest
0 голосов
/ 01 ноября 2018

Есть ли способ установить встроенные точки останова (с помощью плагина) в Eclipse IDE?

Например, когда несколько методов вызываются в одной строке, есть ли способ установить точку останова для определенного вызова метода в этой строке, а не для полной строки?

foo(bar(), baz());
           ^

(В этом примере можно было бы установить точку останова при определении метода baz, но если она вызывается также и другими методами, это может раздражать, если вам придется продолжать большую часть времени .)

Если я правильно понимаю, интерфейс отладки Java позволит это, см. Location # codeIndex () .

1 Ответ

0 голосов
/ 01 ноября 2018
foo(bar(), 
    baz());

Самый простой способ сделать это - сделать разрыв строки перед baz () и разместить точку останова как обычно на строке, на которой находится baz (). В Java окружение вызова метода таким образом, что разрыв строки не повлияет на его оценку.

скриншот из затмения

Обновление:

OP хочет выбрать вызов baz и установить точку останова для оценки самого этого выражения без каких-либо дополнительных условий для вашей точки останова или редактирования исходного кода.

Насколько я знаю, это невозможно с помощью стандартного средства отладки, поставляемого с Eclipse.

Однако вы можете добиться этого эффекта, используя условные контрольные точки . В Eclipse вы создаете или выбираете точку останова как обычно, а затем получаете доступ к условным параметрам в представлении точек останова.

Доступ к точке останова через пункт меню Окно -> Показать представление -> Точки останова. Оказавшись там, выберите или создайте точку останова, затем проверьте условную опцию. Затем вы должны описать условие, которое соответствует вашему окружающему коду и потребностям. Ваша точка останова сработает, когда условие выполнено. Например, указав номер строки сайта вызова или имя метода.

Просмотр точек останова в Eclipse, с включенными условными выражениями

Я основал свой ответ на этом SO-ответе .

В моем собственном примере кода у меня есть следующая настройка:

a(){
  baz(); 
  m();
}

m(){
  foo(bar(), baz());
}

и моя точка останова находится в базе (). Добавление условного оператора

Thread.currentThread().getStackTrace()[2].getMethodName().equals("m")

моя точка останова означает, что она срабатывает только тогда, когда baz () вызывается из m (), а не из ().

...