2017-02-16 28 views
0

在以下情况下Eclipse Debugger发生了什么情况?为什么调试指针移动到源方法的第一行而不是移动到调试指针当前存在的方法的第一行?

第1类:

public class Sample { 
    public static void sourceMethod(BeanClass bean, Map<String, List<String>> hmMap){ 
     try { 
      System.out.println(); 
      enterData(bean, hmMap); 
     } catch (Exception e) { 
      e.getMessage(); 
     } 
    } 

    public static void enterData(BeanClass bean, Map<String, List<String>> hmMap){ 
     try { 
      System.out.println("hello");//Comment or Uncomment this line while debugging 
      System.out.println("Value : "+hmMap.get("KeyValue").get(0)); 
      bean.setResult(true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      bean.setResult(false); 
     } 
    } 

    public static void main(String args[]){ 
     BeanClass bean = new BeanClass(); 
     Map<String, List<String>> hmMap = new HashMap<String, List<String>>(); 
     List<String> list = new ArrayList<String>(); 
     list.add("hi"); 
     list.add("hello"); 
     hmMap.put("KeyValue", list); 
     Sample.sourceMethod(bean, hmMap); 
    } 
} 

二级:

public class BeanClass { 

    private boolean result = false; 

    public boolean getResult() { 
    return result; 
    } 

    public void setResult(boolean setResult) { 
    this.result = setResult; 
    } 
} 

预期方案:当一段代码被编辑并保存在所述调试指针是当前存在,则方法调试指针应该移动到调试指针当前所在方法的第一行。

实际场景:当一段代码被编辑并保存在所述调试指针是当前存在的方法则调试指针移动到源方法的第一行,而不是移动到方法,其中调试的第一线指针当前存在。

+1

对我来说,它按预期工作,Eclipse 4.6 – Zefick

+0

@ChrisH编辑代码并简化代码!更新了上面的代码。 –

+0

@Zefick尝试更新的代码! –

回答

2

在调试过程中更改代码会使该方法从头开始重新执行,因为它必须重置该方法中的局部变量。 有关它如何工作或如何使用调试选项正确引用以下链接更多的细节.. http://www.ibm.com/developerworks/library/os-ecbug/

如果你正在运行的Java虚拟机(JVM)V1.4或更高时,Eclipse 支持功能称为Hotswap Bug修复(不适用于JVM V1.3或更低版本)。它允许在 调试程序会话期间更改源代码,这比退出应用程序更好, 更改代码,重新编译,然后开始另一个调试会话。要使用此功能,只需更改代码编辑器 和恢复调试

一件事:虽然调试,只需更改任何代码,并保存它时,Eclipse会自动将修改后的代码传送到目标VM。 请注意,您无法对代码进行结构更改,例如添加新方法,更改方法签名或添加新字段。但是你可以改变方法中的代码。

相关问题