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

Eclipse Mars (4.5) hot swap code in debugger not working

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

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

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

我尝试过的:

我开始感到绝望,因为我很难在没有可用调试模式的情况下完成工作,所以任何 help/hints 方向正确的人都会非常感激。

HotSwap 不适用于静态方法。
但是它与实例方法一起工作得很好,所以它会在这段代码上工作:

public class Main {

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

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

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

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

那么你不能编辑“123”字符串。 您可以像这样编辑在循环内调用的方法:

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

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

现在您可以编辑字符串“123”,它会更新。 这也适用于无限 "for" 循环,所以猜测经验法则是方法体必须在更新之前 "re-called" ,并且等待下一个循环调用是不够的。