Установить (метод) точку останова для определенного объекта (а не всех экземпляров этого типа) в java
Предположим, что у меня есть класс
public class Foo
{
public void doThing() { ...}
}
Скажем, у меня есть много экземпляров Foo
, но меня особенно интересует одна из них.
Как бы я "пометил" этот экземпляр и установил "условную точку останова" в doThings
, которая остановилась бы ТОЛЬКО для помеченного экземпляра?
Есть ли встроенный способ, особенно отладчик Eclipse, для этого?
В настоящее время мне нужно вручную создать логический флаг в классе Foo
, по умолчанию это значение false, и создать условную точку останова, основанную на значении doThings
.
Затем, когда я сталкиваюсь с заинтересованным объектом, я бы установил флаг true
, выполнив код установщика в окне Display
.
Но, очевидно, это требует модификации кода и добавления некоторого шаблона, что не всегда возможно или хорошо.
Ответы
Ответ 1
Да, в Eclipse есть контрольные точки экземпляра.
Вы должны поместить общую точку останова в желаемый класс, а на панели переменных щелкните правой кнопкой мыши на экземпляре и выберите Точки останова экземпляра.
![Instance Breakpoints]()
Всплывающее окно спросит вас, какая точка останова вы хотите использовать для этого экземпляра.
![Popup Selection]()
Вы выбрали и сделали!
![Done]()
Ответ 2
Не самый чистый способ, но вы можете установить условную точку останова на выход Object#toString
по умолчанию для экземпляра экземпляра.
После получения результата по умолчанию toString()
экземпляра добавьте что-то вроде следующего в качестве условия точки останова в методе doThing
:
this.toString().equals("[email protected]")
Ответ 3
Я не знаю никакого "правильного" способа, но один из подходов заключался бы в вызове hashCode()
в окне просмотра, когда вы его сначала создадите, а затем сделайте условную точку останова на hashCode()
. Поэтому вам нужно будет менять точку останова каждый раз, когда вы ее запускаете - несколько раздражает, но по крайней мере дает вам постоянное значение, которое вы можете использовать для ссылки на объект. (Если предположить, что класс не переопределяет hashCode()
, конечно - если у вас много экземпляров с одним и тем же хеш-кодом, это делает вещи более сложными.)