Java eclipse中调用者的条件断点

Rad*_*ium 10 java eclipse debugging watchpoint conditional-statements

我试图在Eclipse调试器的Java程序中使用watchpoint跟踪值的更改.类层次结构非常复杂,我跟踪的值包含在容器中,容器在很多地方使用.

更具体地说,有一个容器SizeRequirement,它有一个属性minimum,我正在跟踪.许多组件的许多布局管理器都使用此类来定义组件大小的要求.我需要捕获完全调用,其中值更改/设置为一个特定的布局管理器和其中的一个特定组件.是否可以通过调用者过滤断点?我将尝试使用一些抽象代码来解释问题:

class ValueContainer {
  public String value;
}

class A {

  private ValueContainer valueContainer;

  public A () {
    valueContainer = new ValueContainer();
    valueContainer.value = "setByA";
  }

}

class B {

  private ValueContainer valueContainer;

  public B () {
    valueContainer = new ValueContainer();
    valueContainer.value = "setByB";
  }

}
Run Code Online (Sandbox Code Playgroud)

我设置了一个观察点value,我只希望断点只有在value由A类设置并且忽略B的调用时才挂起.

更糟糕的是,类SizeRequirement是swing库的一部分,并且深深地集成在代码中,因此我无法使用继承来替换某些孩子在我想跟踪它的某个确切位置.

编辑

所以这就是我用作条件断点条件的东西.信不信由你,它的确有效.:)

    StackTraceElement[] arr = Thread.currentThread().getStackTrace();
    boolean contains = false;
    for(StackTraceElement e : arr) {
        if (e.getClassName().contains("A")) {
            contains = true;
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

art*_*tol 5

这很恶心,可能很慢,但你可以使用

Thread.currentThread().getStackTrace()[2].getClassName().contains("A")
Run Code Online (Sandbox Code Playgroud)

作为你的断点条件.

基于这个bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=72961我不认为Eclipse会直接支持它