【问题标题】:Eclipse debug breakpoint stopping only on virtual invocation of specific subclassEclipse 调试断点仅在特定子类的虚拟调用时停止
【发布时间】:2013-01-24 13:20:41
【问题描述】:

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

【问题讨论】:

  • 如果 Eclipse 不能做到这一点,有人能推荐一个替代的 IDE 吗?
  • 请不要建议我在 EstimationValuePanel 类上搜索 onPoke 调用并在它之前的语句上放置断点。

标签: java eclipse debugging virtual-functions


【解决方案1】:

当然,你可以重写 EstimationValuePanel 类中的方法,只在那里设置断点。

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

this instanceof EstimationValuePanel

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

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 2012-02-16
    • 2010-12-12
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    相关资源
    最近更新 更多