Eclipse Mars(4.5)调试器中的热插拔代码无法正常工作

时间:2015-09-04 18:57:01

标签: java eclipse debugging jvm eclipse-mars

所以我更新到Eclipse Mars(4.5),由于某种原因,我无法在调试器中使用热插拔代码。通常我可以做这样的事情:

public static void main(String[] args){
    while(true){
        System.out.println("123");
    }
}

然后,如果我在调试模式下启动它,将文本更改为" 321",然后保存,然后它将更新而无需重新启动它。它的行为与运行" Run"完全一样。模式而不是"调试"。

我尝试过:

  • 使用上面的代码创建新工作区,创建一个新项目,没有任何反应
  • 安装了几个JDK,尝试过使用java 6,7&amp; 8,更改了工作区和/或项目设置以使用不同的JDK,没有任何反应(事实上我安装了几个版本的java应该不重要,因为它只是我更新eclipse它停止工作的那一刻)< / LI>
  • 尝试卸载删除任何配置文件到eclipse(在Mac上,这样每个文件/文件夹都带有&#34; eclipse&#34;在〜/ Library文件夹中,运行&#34;找到&# 34;搜索以检测所有文件)。然后尝试创建一个新的工作区,现在是项目,代码被剪切,在调试模式下运行,保存时没有任何反应。
  • 还确保我有&#34; Auto Build&#34;启用,甚至尝试&#34;清洁&#34;它,并禁用自动构建,然后保存代码,然后在调试器运行时进行手动构建:没有任何反应

我开始变得绝望,因为我很难在没有调试模式的情况下完成工作,所以任何正确方向的帮助/提示都会非常值得赞赏。

2 个答案:

答案 0 :(得分:0)

HotSwap不适用于静态方法。
然而它适用于实例方法,所以它适用于这段代码:

public class Main {

    public static void main(String[] args) {
        new Main().f();
    }

    public void f() {
        while(true){
            System.out.println("123");
        }
    }
}

答案 1 :(得分:0)

好的,所以我终于找到了问题。您似乎无法在运行时编辑循环。假设你有一个这样的循环:

public static void main(String[] args){
    while(true){
        System.out.println("123");
    }
}

然后你就无法编辑&#34; 123&#34;串。 您可以如何编辑在循环内调用的方法,如下所示:

public static void main(String[] args){
    while(true){
        System.out.println(methodA());
    }
}

public static String methodA(){
    return "123";
}

现在你可以编辑字符串&#34; 123&#34;它会更新。 这也适用于无限&#34; for&#34;循环,所以猜测经验法则是方法体必须被重新调用&#34;在更新之前,它还不足以等待下一个循环调用。