【问题标题】:Change object references in eclipse during debugging在调试期间更改 Eclipse 中的对象引用
【发布时间】:2012-10-11 13:46:53
【问题描述】:

在 Eclipse 调试视图中的 Eclipse 调试器会话期间,可以更改任意原始变量甚至字符串。

我想知道为什么似乎也无法更改对对象的变量引用。 例如。如果有类似的东西

 ClassLoader cl = ClassLoader.getCallerClassLoader()

在代码中,我希望能够将变量绑定(“轻松地改变其值”)到

 cl = Thread.currentThread().contextClassLoader

在调试期间。

我错了吗(有可能这样做),如果没有,是否有任何概念上的原因(所以除了“没有人简单地这样做过”之外的其他原因)?

【问题讨论】:

    标签: java eclipse debugging object variable-assignment


    【解决方案1】:

    事实证明,您实际上可以通过一种轮回的方式做到这一点。代码:-

    import org.junit.Test;
    
    public class TestDebug {
    
      @Test
      public void test() {
        Object foo = new Object();
        System.err.println(foo);
      }
    }
    

    syserr 行上的断点。

    在变量视图中选择“this”,然后在底部的详细信息区域中输入以下代码:-

    foo = new java.util.ArrayList()

    现在选择上面的表达式并点击 shift+ctrl+i (inspect) 它将执行代码。瞧,foo 现在包含一个数组列表!

    【讨论】:

    • 非常好,不知道这个...现在,有没有办法在静态上下文中做同样的事情(即当没有“this”时)?
    • 好的,我找到了一种方法:选择需要更改的(静态)对象(在变量视图中)。使用详细信息区域定义新表达式: * 只是没有赋值的新表达式 * 没有尾随分号 * 完全限定名称,例如new java.util.LinkedList() 然后,使用上下文菜单中的“分配值”选项(右键单击进入详细信息区域)。
    【解决方案2】:

    您可以在调试器的挂起线程中手动execute any piece of Java code,包括对当前堆栈帧上下文中可见的所有变量或字段的赋值。

    所以是的,该分配应该是可能的。

    【讨论】:

    • 感谢 Bananeweizen,您的回答也是有效的,但我选择了 Mumrah's 作为接受,因为他是第一个并且有一个详细的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2023-03-14
    相关资源
    最近更新 更多