#intellij-idea
#intellij-идея
Вопрос:
Когда я отлаживаю приложение, в окне инструмента отладки появляется окно часов. Я читал это руководство снова и снова, но не могу найти никакого практического использования часов.
Почему-то я думаю, что это классный и полезный инструмент, и мне не хватает его использования.
Может кто-нибудь объяснить, когда я должен его использовать, и привести несколько примеров? В идеале описание будет привязано к конкретной (воображаемой) ситуации, чтобы я лучше применял его в своей работе.
Ответ №1:
Этот раздел позволяет вам определять выражения, которые вы хотели бы видеть, как они развиваются / изменяются на каждом этапе вашего процесса отладки, без проверки вручную всех доступных объектов и их свойств. Давайте возьмем следующий простой пример, который намеренно вызывает исключение NullPointerException (NPE):
public class WatchSample {
static class Student {
public static final int CREDITS_REQUIRED_FOR_GRADUATION = 10;
private String name;
private Integer credits;
public Student(String name, Integer credits) {
this.name = name;
this.credits = credits;
}
String getName() {
return name;
}
public boolean hasGraduated() {
return credits >= CREDITS_REQUIRED_FOR_GRADUATION;
}
public Integer getCredits() {
return credits;
}
}
public static void main(String[] args) throws Exception {
List<Student> students = simulateReadingFromDB();
for (Student student : students) {
if (student.hasGraduated()) {
System.out.println("Student [" student.getName() "] has graduated with [" student.getCredits() "] credits");
}
}
}
private static List<Student> simulateReadingFromDB() {
List<Student> students = new ArrayList<>(3);
students.add(new Student("S1", 15));
students.add(new Student("S2", null)); // <- simulate some mistake
students.add(new Student("S3", 10));
return students;
}
}
В какой-то момент времени вы можете задаться вопросом, как получилось, что вы получаете NPE и что нужно исправить. Итак, просто установите точку останова, добавьте несколько часов и аккуратно пройдите по строкам. В конце концов вы окажетесь в поле зрения нарушителя спокойствия:
Конечно, это базовый пример, и его следует воспринимать как таковой. В обычном приложении у вас, вероятно, будут более сложные сценарии и выражения, которые вы хотели бы проверить, и это будет иметь больше смысла, например: if (((position > 0 amp;amp; position < MAX) || (position < 0 amp;amp; position > MIN) amp;amp; (players(currentPlayer).isNotDead() amp;amp; move.isAllowed()) amp;amp; time.notUp())....
. В этом случае вы можете оценить вложенные выражения, чтобы увидеть, какое из них возвращает false
** Примечание **: вы также можете сделать точку останова условной, чтобы программа приостанавливалась только при возникновении этого конкретного события:
Комментарии:
1. Нет, условные точки останова позволяют указать условие для активации точки останова, а часы позволяют автоматически вычислять выражения по мере прохождения по исполняемым строкам кода
2. Я понял. Часы — это самый простой способ просмотра значений в определенный момент. Но я должен правильно знать значения? Я не могу просто установить часы
student.getCredits()
и просмотреть их значения при отладке через цикл?3. Да, вы можете, и именно поэтому вы должны это использовать, просто посмотрите на мою первую картинку, поскольку я оцениваю оба
getName()
иgetCredits()
одновременно. Просто имейте в виду, что никакой черной магии не произойдет, если вы добавите в часы выражение, которое не может быть оценено или которое не имеет смысла в текущем контексте, напримерteacher.something()
,asghdas
, и т. Д4. Вам нужно знать значение, если вы хотите создать условную точку останова, поскольку вы должны указать, когда эта точка останова должна активировать и приостановить приложение