4

onPoke(..)メソッドを持つ抽象クラスがあるとしましょう。

abstract class BaseValuePanel{
  void onPoke(int depth){
      //blah, blah, ...
  }
}
  • クラスNumberValuePanel、AttributeValuePanel、CategoryValuePanelはBaseValuePanelを拡張します。
  • 特に、クラスDecimalValuePanelはNumberValuePanelを拡張します。
  • 特に、クラスEstimationValuePanelはDecimalValuePanelを拡張します。
  • どの拡張クラスもonPoke(..)メソッドをオーバーライドしません。

ここで、onPoke(..)にブレークポイントを設定したいのですが、EstimationValuePanelクラスのオブジェクトから呼び出された場合のみです。

今のところ、onPoke(..)にブレークポイントを設定すると、デバッガーは数千のインスタンスを停止し(BaseValuePanelの広範な子孫クラスのため)、そのうちの1つだけがEstimationValuePanelの呼び出しによるものでした。

メソッドがEstimationValuePanelによって呼び出されたときにのみデバッガーを停止できるようにするために、使用する必要のあるブレークポイント設定のセットアップのシーケンスまたは戦略は何ですか。

仮想ブレークポイントの意味...:
つまり、Javaでは、C#とは対照的に、非プライベート、非静的、(オーバーライド可能な)メソッドは当然仮想です。したがって、ここでの仮想呼び出し。

4

1 に答える 1

9

もちろん、EstimationValuePanel クラスのメソッドをオーバーライドして、そこでのみブレークポイントを設定できます。

ただし、条件付きブレークポイントを使用することもできます。メソッド onPoke() のブレークポイントのプロパティに移動し (右クリックまたはCtrl + ダブルクリック)、[条件付き] を選択します。下のテキスト領域に、次の条件を入力できます。

this instanceof EstimationValuePanel

これは、メソッドが入力されるたびに条件が評価されることを意味します。したがって、パフォーマンスの問題が発生した場合は、EstimationValuePanel のメソッドをオーバーライドすることをお勧めします。

于 2013-02-08T17:51:44.933 に答える