我可以在调试期间更改私有字段的值吗?

时间:2011-03-21 09:47:34

标签: java debugging private field

出于调试目的,我需要更改私有字段的值。 我使用Eclipse进行调试,并且我能够在调试过程中更改变量,但是我无法访问私有变量。我尝试在更改值视图中使用反射来手动将字段设置为“可访问”,但看起来它不起作用。 你知道任何IDE /框架/插件还是可以允许它的东西吗?

4 个答案:

答案 0 :(得分:3)

在Eclipse中,您可以转到变量视图,其中列出了所有变量。

您可以在此处右键单击要更改的成员变量,然后选择更改值选项,该选项会弹出一个单独的窗口来更改值。这将从那时开始生效。

答案 1 :(得分:1)

Yuo可以使用反射来设置字段值(Spring提供方便的ReflectionTestUtil):

  Class<?> c = foo.getClass();
  Field field = c.getDeclaredField("valid");
  field.setAccessible(true);
  field.set(valid, Boolean.FALSE);

在调试器中设置私有字段的值也不应该有任何问题,它是否是私有的并不重要。

答案 2 :(得分:1)

刚用eclipse测试 - 没问题。测试应用程序是这样的:

 public class DebugTest {
   private static int i = 5;
   public static void main(String[] args) {
     System.out.println(args.length);  // dummy line to set a breakpoint
     System.out.println(i);
   }
 }

我在虚拟线上设置了BP,启动了调试器,然后我将Variables视图中i的值从5更改为6,继续,输出为6。

只有一件事:也许,你不能在你的变量视图中看到私有变量。打开视图菜单(带有三角形的按钮),选择 Java 并打开缺少的项目。默认情况下禁用静态常量 - 这可能是你的问题。

答案 3 :(得分:-2)

由于您将变量声明为私有,并且您希望在调试级别修改该值,因此任何IDE /插件都不会发生这种情况。每个IDE都将遵循基本原则。