Могу ли я изменить значения приватных полей во время отладки? - PullRequest
3 голосов
/ 21 марта 2011

В целях отладки мне нужно изменить значение частного поля.Я использую Eclipse для отладки, и я могу изменять переменные в процессе отладки, но у меня нет доступа к закрытым переменным.Я попытался использовать отражение в представлении изменения значения, чтобы установить поле как «доступное» вручную, но похоже, что оно не работает.Знаете ли вы какой-либо IDE / framework / плагин или что-то, что может это позволить?

Ответы [ 4 ]

3 голосов
/ 21 марта 2011

В Eclipse вы можете перейти к представлению переменных , в котором перечислены все ваши переменные.

Здесь вы можете щелкнуть правой кнопкой мыши переменную-член, которую вы хотите изменить, и выбрать изменить значение , которое откроется в отдельном окне для изменения значения. который вступит в силу с тех пор.

1 голос
/ 21 марта 2011

Юо может использовать отражение для установки значения поля (Spring предоставляет удобные ReflectionTestUtil):

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

Также у вас не должно возникнуть проблем с установкой значения частного поля в отладчике, на самом деле не имеет значения, является ли оно приватным или нет.

1 голос
/ 21 марта 2011

Только что протестировано с затмением - без проблем.Тестовое приложение выглядело так:

 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 на этой фиктивной строке, запустил отладчик, затем изменил значение для i в представлении переменных с пяти до шести, продолжил ивывод был 6.

Есть только одна вещь: возможно, вы не можете видеть частные переменные в вашем представлении переменных.Откройте меню представлений (кнопка с треугольником), выберите Java и включите отсутствующие элементы.Статические константы отключены по умолчанию - возможно, это ваша проблема.

0 голосов
/ 21 марта 2011

Поскольку вы изменяете переменную как частную и хотите изменить значение на уровне отладки, этого не произойдет ни с одним из IDE / плагинов.Каждая IDE будет следовать основным принципам.

...