предисловие
предыдущий постStream Trace для расширенной отладки IntelliJ IDEAЭто закуска к продвинутым навыкам отладки IntelliJ IDEA. Мои друзья покорены этим маленьким навыком и куют железо, пока горячо. Сегодня я приведу вам несколько из них.повседневная работаа такжеЧитать исходный кодОсновные продвинутые навыки отладки
Добавить журнал в точку останова
Многие программисты любят отлаживать свой кодprint
Некоторый контент, который выглядит более интуитивно понятным, и легко забыть удалить этот бесполезный контент после печати и, наконец, отправить код наremote
,code reviewИногда им приходится удалять это содержимое и отправлять его повторно, что не только увеличивает ненужную рабочую нагрузку, но и делаетlog tree
некоторые узлы не имеют значения
IntelliJ IDEA предоставляетEvaluate and Log at Breakpoints
Функция помогает нам решить эту проблему, посмотрите на следующий код:
public static void main(String[] args) {
ThreadLocalRandom random = ThreadLocalRandom.current();
int count = 0;
for (int i = 0; i < 5; i++) {
if (isInterested(random.nextInt(10))) {
count++;
}
}
System.out.printf("Found %d interested values%n", count);
}
private static boolean isInterested(int i) {
return i % 2 == 0;
}
Если мы хотим видеть значение i в строке 15 для каждого вызова, нам не нужно добавлять сюда какой-либо журнал, просто используйте сочетание клавиш, где обычно добавляется точка останова.Shift + 鼠标左键
, появится следующий контент
проверитьEvaluate and log
, и настройте журнал/переменные, которые вы хотите просмотреть, например здесь"interested" + i
, чтобы запустить программу в режиме отладки (обычный режим, без печати этих журналов):
interested 7
interested 5
interested 1
interested 2
interested 0
Found 2 interested values
Если вы добавили такого рода точки останова в нескольких местах, просто просмотр журнала иногда может оказаться недостаточно интуитивным.Вы можете проверить зеленую рамку на картинке выше."Breakpoint hit" message
:
Breakpoint reached at top.dayarch.TestDebug.isInterested(TestDebug.java:49)
interested 6
Breakpoint reached at top.dayarch.TestDebug.isInterested(TestDebug.java:49)
interested 0
Breakpoint reached at top.dayarch.TestDebug.isInterested(TestDebug.java:49)
interested 9
Breakpoint reached at top.dayarch.TestDebug.isInterested(TestDebug.java:49)
interested 8
Breakpoint reached at top.dayarch.TestDebug.isInterested(TestDebug.java:49)
interested 1
Found 3 interested values
Disconnected from the target VM, address: '127.0.0.1:0', transport: 'socket'
Process finished with exit code
Если вы хотите получить более подробную информацию, просто отметьтеStack trace
(Давайте сами проверим результаты работы), с этой функцией некоторые из проблем, упомянутых выше, больше не существуют.
точка останова поля
Если вы читаете исходный код, у вас обязательно возникнет проблема, где меняется значение поля в классе?Приходится понемногу отслеживать стек вызовов, и проверять шаг за шагом, если вы не будете внимательны, вы могут быть пропуски
Мы можем добавить точку останова в поле в IntelliJ IDEA и автоматически перейти к соответствующей позиции метода при изменении значения поля.
Это просто в использовании:
- Добавьте точку останова левой кнопкой мыши в определении поля (появится значок «глаз»)
- Правая кнопка мыши на значке "глаз"
- Установите флажок во всплывающем окне
Field access
иField modification
два варианта
Если есть много способов изменить значения полей, вы также можетеCondition
Где определить условия входа в точку останова, с добавлением этой функции, я полагаю, вы будете читать исходный код гораздо более плавно.
точка останова исключения
В дополнение к чтению исходного кода, мы должны начать отладку кода при обнаружении исключения, код автоматически остановится после того, как будет выброшено исключение, но мы надеемся, что:
Код останавливается до того, как возникнет исключение, чтобы мы могли просмотреть информацию о переменной в это время.
Затем мы использовалиException Breakpoints
, Когда возникает исключение, поставьте точку останова в месте перехвата, и вы сможете получить тип исключения на вершине стека через несколько позиций на следующем рисунке, например здесьNumberFormatException
Как только вы узнаете тип исключения, вы можете добавить точки останова исключения следующим образом:
Затем выберите NumberFormatException во всплывающем окне.
Перезапустите программу в режиме отладки:
Программа «все время зеленый свет» находит место, где было выброшено исключение, и в то же время указывает переменную информацию в то время тремя словами: стабильный, точный, безжалостный, кто еще?
точка останова метода
При чтении исходного кода, такого как Spring, методы интерфейса могут быть реализованы несколькими подклассами.При запуске вам необходимо просмотреть стек вызовов, чтобы найти класс реализации шаг за шагом.IDEA также поддерживает добавление точек останова (горячих клавиш) к методам интерфейса.cmd+F8
/ctrl+F8
):
- Щелкните точку останова (форма ♦️) в методе левой кнопкой мыши.
- Правая кнопка мыши на точке останова
Проверьте содержимое в строке зеленого поля, вы также можете настроить условие перехода.
При запуске программы в режиме отладки она автоматически войдет в метод класса реализации (Обратите внимание на форму точки останова):
Увидев это, следует подумать о методе run в общем интерфейсе Runnable, что тоже полезно, можете попробовать сами.
Суммировать
Я считаю, что с добавлением четырех вышеперечисленных навыков отладки, будь то отладка или чтение исходного кода в частном порядке, его можно легко контролировать. Наконец, давайте взглянем на различные типы отладки точек останова, поддерживаемые IDEA.Если вы знаете только красные точки, давайте поговорим об этом в области сообщений.
Личный блог: https://dayarch.top
Сунь Гун Ибин | Оригинал