Установить (метод) точку останова для определенного объекта (а не всех экземпляров этого типа) в 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(), конечно - если у вас много экземпляров с одним и тем же хеш-кодом, это делает вещи более сложными.)