4

假设我们有一个带有方法 onPoke(..) 的抽象类。

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# 相反,非私有、非静态、(可覆盖)方法自然是虚拟的。因此,这里是虚拟调用。

4

1 回答 1

9

当然,您可以覆盖 EstimationValuePanel 类中的方法并仅在此处设置断点。

但是您也可以使用条件断点:转到方法 onPoke() 上的断点属性(右键单击Ctrl + 双击)并选择“条件”。在下面的文本区域中,您可以输入以下条件:

this instanceof EstimationValuePanel

这意味着每次输入方法时都会评估条件。因此,如果您遇到性能问题,您应该更愿意覆盖 EstimationValuePanel 中的方法。

于 2013-02-08T17:51:44.933 回答