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)
这很恶心,可能很慢,但你可以使用
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会直接支持它