Как ввести условное if в отладке eclipse

#java #eclipse #debugging

#java #eclipse #отладка

Вопрос:

У меня следующая структура :

 if (obj.isSomethingable()){ 
// do something }
  

Как я могу ввести условие, если obj.isSomethingable() имеет значение false и я не могу изменить логический экземпляр из obj?

Комментарии:

1. Для меня это не имеет большого смысла… почему вы пытаетесь отладить код, который не должен выполняться в текущем контексте?

2. я хочу посмотреть, что произойдет, если оно будет выполнено. Если я использую boolean bol = obj.isSomethingable(), то я могу установить bol в true и ввести условное. Но мне нужен способ ввести его без изменения кода

3. Можете ли вы изменить способ создания этого объекта? Подкласс с переопределенным методом может быть полезен для тестирования.

Ответ №1:

Вы можете использовать вкладку отображения eclipse для выполнения кода в //do something .

Итак, если у вас есть:

 if(obj.isSomethingable())
{
  int var =5;
  System.out.println(var 8);
}
  

Затем, находясь в точке останова if на вкладке отображения, вы можете ввести:

 int var =5;
System.out.println(var 8);
  

Затем выделите все это и щелкните увеличительное стекло, чтобы увидеть, каким будет результат этого кода.

Комментарии:

1. У меня есть ‘return true;’ там. Выполнение этого не имеет никакого эффекта

2. Это имеет большой смысл, поверьте мне.

3. Если все, что у вас есть в условном, — это оператор return , то может показаться, что вы действительно тестируете поведение вызывающего при получении возврата true . Я что-то упустил?

4. Кажется, вы действительно спрашиваете, как изменить способ запуска программы в отладчике. То есть вы не хотите выполнять метод, как обычно, поскольку вы хотите, чтобы он возвращался вместо выполнения остальной части кода. Не знаю ни одного отладчика, который выполнит это. Теперь, если бы кто-то привязал AOP к отладчику, чтобы пользовательский ввод можно было вводить в любой момент, вы были бы в восторге.

Ответ №2:

Приветствую,

Находясь в перспективе отладки, откройте вкладку «переменные». вы можете выбрать свой объект и изменить его значение. Это будет работать для примитивов или простых объектов, но не для сложных. Я пробовал следующее:

 return new MyObj() {
    public boolean isSomething() {
        return true;
    }
}; 
  

Но eclipse не позволит вам использовать анонимные классы.
Вы можете попробовать использовать макет или что-то в этом роде. Google mockito и посмотрите, может ли это сработать для вас.

Tiberiu

Ответ №3:

Перед выполнением if используйте отладчик, чтобы изменить состояние obj таким образом, чтобы isSomethingable() вернуть true .

Ответ №4:

Похоже, единственный способ сделать это — изменить исходный код.

 boolean bol = obj.isSomethingable();
if (bol) { ... }
  

После этого вы можете изменить логическое значение переменных на true.