我遇到的问题是条件断点在我的电脑上不起作用。我使用以下代码:
package test;
public class Main {
public static class C1 {
public static C1 c = new C1();
public Boolean b = null;
private boolean isB() {
if (b == null) {
b = Boolean.TRUE;
}
return b; //USE BREAKPOINT HERE
}
}
public static void main(String[] args) throws Exception {
Thread[] threads = new Thread[100];
for (int i = 0; i < 100; i++) {
Thread t = new Thread(new Runnable() {
public void run() {
C1.c.isB();
}
});
threads[i] = t;
}
for (Thread t : threads) {
t.start();
}
}
}
条件断点设置为“return b;”行并使用“Boolean.TRUE.equals(b)”条件。 我在没有任何插件的情况下重新安装Eclipse并尝试了不同版本的Java 8,但每次我得到相同的错误时,都会说“条件断点遇到运行时异常。原因:java.lang.InternalError:获取的ReferenceType的MethodID不是ReferenceType发生了检索堆栈帧。“
我不使用任何JRebel,DCEVM或一些分析工具。
可能是什么原因?它可能是CPU相关的问题吗?我使用的是英特尔6700K。 Windows 10 + JDK8u111 + Neon.1a版本(4.6.1)。也不适用于Eclipse Mars。
答案 0 :(得分:1)
我已经在Eclipse Photon 2018上使用JDK 8和7(均为64位)对其进行了测试
版本:Photon发行版(4.8.0) 版本号:20180619-1200
并且断点工作正常。
我怀疑这取决于您的JDK或Eclipse版本。
答案 1 :(得分:0)
显然在Eclipse Photon中修复了一个错误,该错误在延迟初始化ReferenceTypeImpl.fMethodTable中导致了竞争状态。这似乎与多线程代码中的条件断点特别相关。
此问题已在内部版本I20170731-2000中修复,并且大概应该在该日期之后的主要版本中提供。