Eclipse条件断点不起作用

时间:2016-12-14 15:35:48

标签: java eclipse java-8

我遇到的问题是条件断点在我的电脑上不起作用。我使用以下代码:

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。

2 个答案:

答案 0 :(得分:1)

Eclipse Photon 2018

我已经在Eclipse Photon 2018上使用JDK 8和7(均为64位)对其进行了测试

版本:Photon发行版(4.8.0) 版本号:20180619-1200

并且断点工作正常。

我怀疑这取决于您的JDK或Eclipse版本。

答案 1 :(得分:0)

显然在Eclipse Photon中修复了一个错误,该错误在延迟初始化ReferenceTypeImpl.fMethodTable中导致了竞争状态。这似乎与多线程代码中的条件断点特别相关。

此问题已在内部版本I20170731-2000中修复,并且大概应该在该日期之后的主要版本中提供。