2013-02-08 4 views
4

Предположим, у нас есть абстрактный класс с методом onPoke (..).Отладка прерывания отладки Eclipse только при виртуальном вызове конкретного подкласса

abstract class BaseValuePanel{ 
    void onPoke(int depth){ 
     //blah, blah, ... 
    } 
} 
  • Классы NumberValuePanel, AttributeValuePanel, CategoryValuePanel продлить BaseValuePanel.
  • Среди прочих, класс DecimalValuePanel расширяет NumberValuePanel.
  • Среди прочих, класс EstimationValuePanel расширяет DecimalValuePanel.
  • Ни один из классов расширения не переопределяет метод onPoke (..).

Теперь я хочу разместить точку останова onPoke (..), но только при вызове объекта класса EstimationValuePanel.

Поскольку прямо сейчас, если я поставил точку останова onPoke (..), отладчик остановил бы тысячи экземпляров (из-за обширных классов потомков BaseValuePanel), и только один из них был вызван вызовом EstimationValuePanel.

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

То, что я имел в виду под виртуальной точкой останова ...:
То есть, в Java, в отличие от C#, не-частные, нестатические (переопределяемые) методы являются естественными виртуальными. Следовательно, виртуальный вызов здесь.

+0

Если Eclipse не может этого сделать, может ли кто-нибудь предложить альтернативную среду IDE, которая могла бы это сделать? –

+0

Pls не предлагает, чтобы я искал вызов onPoke в классе EstimationValuePanel и ставил точку останова в заявлении перед ним. –

ответ

9

Конечно, вы можете переопределить метод в классе EstimationValuePanel и установить точку останова только там.

Но вы также можете использовать условные точки останова: перейдите к свойствам точки останова на методе onPoke() (щелкните правой кнопкой мыши или Ctrl + двойной щелчок) и выберите «Условное». В текстовой области ниже вы можете ввести следующее условие:

this instanceof EstimationValuePanel 

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