theGrass
24 уровень
Саратов

Руководство пользователя IntelliJ IDEA. Отладчик.

Пост из группы Архив info.javarush.ru
3681 участников
Отладчик
  1. Запуск отладчика После того как вы настроите конфигурацию запуска вашего проекта, вы можете запускать его в режиме отладки, нажав Shift + F9
      В окне отладчика вы можете видеть стек вызовов функций и список потоков, с их состояниями, переменными и окнами просмотра состояния. Когда вы выбираете контекст вызова функции, вы можете просмотреть значения переменных соответствующих выбранному контексту.
      • Полезные клавиатурные сокращения отладчика
        • Установить/снять точку останова - Ctrl + F8 (Cmd + F8 для Mac)
        • Возобновить выполнение программы - F9
        • Перейти к следующей инструкции - F8
        • Перейти внутрь функции - F7
        • Приостановить выполнение - Ctrl + F2 (Cmd + F2)
        • Переключить между просмотром списка точек останова и подробной информацией о выбранной точке - Shift + Ctrl + F8 (Shift + Ctrl + F8)
        • Запустить отладку кода с точки на которой стоит курсор - Shift + Ctrl + F9 (если это внутри метода main())
        • Умный переход внутрь Иногда вам надо при пошаговой отладке перейти внутрь определенного метода, но не первого который будет вызван. В таком случае вы можете нажать Shift + F7 (Cmd + F7 для Mac) чтобы выбрать из предложенного списка метод который вам нужен. Это может сэкономить вам массу времени.
          • Удалить контекст вызова функции Если вам нужно «вернуться назад во времени» во время отладки, вы можете сделать это удалив контекст вызова функции. Это сильно поможет если вы по ошибке зашли слишком глубоко. Таким образом вы не откатите глобальное состояние выполнения программы, но как минимум вы вернетесь назад по стеку вызовов функций.
            • Переход к курсору Иногда вам надо возобновить выполнение программы и остановиться на какой-то другой строчке кода, не создавая точку останова. Это легко - просто нажмите Alt + F9.
              • Пометить элемент Если вы хотите легко видеть какой-то элемент во время отладки, вы можете добавить к нему цветную метку, нажав F11 или выбрав соответствующий пункт в меню вкладки Variables и Watches.
                  Когда этот элемент появится в списке, вы увидете его метку.
                  • Вычислить выражение В режиме отладки вы можете вычислить любое выражение, с помощью очень мощного инструмента вызываемого нажатием Alt + F8. Этот инструмент предоставляет автодополнение кода как и редактор, так что ввести любое выражение будет очень просто. Если у вас есть какие-то элементы с метками, автодополнение кода покажет вам эти метки чтобы вы могли легко найти нужные элементы и вычислить их значения.
                    • Состояние и настройки точки останова Если вы хотите поменять какие-то настройки точки останова, вы можете нажать Shift + Ctrl + F8 (Shift + Cmd + F8 для Mac).Во всплывающем окне вы можете ввести нужные вам параметры. Если у вас какой-то элемент имеет метку, вы также можете использовать эту метку в выражениях. Чтобы получить список всех точек останова в вашем проекте (с расширенными настройками), снова нажмите Shift + Ctrl + F8 (Shift + Cmd + F8 для Mac).
                      • Точки останова переменной В дополнение к условным точкам останова, вы можете также использовать точки останова переменной. Такие точки срабатывают, когда производится чтение или запись в какую-то переменную. Для того чтобы создать такую точку останова, кликните на панель слева от редактируемого текста, напротив нужной вам переменной, зажав Alt.
                        • Точки останова по событиям Еще одна полезная возможность - вычислить определенное выражение в нужной вам строке кода не прерывая выполнение. Для этого вам нужно кликнуть на панель слева от редактируемого кода напротив нужной строки, зажав Shift.
                          • Временные точки останова Для того чтобы создать точку останова которая сработает только один раз, кликните на панель слева от кода зажав Shift + Alt.
                            • Отключить точки останова Также очень полезно знать, что любая точка останова может быть быстро отключена по нажатию на панель слева от кода с зажатым Alt.
                              • Загрузка изменений и быстрая замена Иногда вам нужно внести небольшие изменения в код без прерывания процесса отладки. Так как виртуальная машина Java поддерживает возможность HotSwap, среда разработки в режиме отладки предлагает вам перезагрузить измененные классы когда вы их скомпилируете. Не забывайте, что функционал HotSwap в Java машине имеет ряд ограничений и не позволяет перезагружать статические поля и методы.
                                • Удаленная отладка Последняя вещь в IntelliJ IDEA о которой вам точно нужно знать это удаленная отладка. Удаленная отладка - подключение отладчика к уже запущенной у вас или на другом компьютере Java машине по сетевому порту. Таким образом можно подключить отладчик к серверу приложений, запущенному на сервере. Чтобы создать конфигурацию для удаленного запуска, перейдите к редактированию конфигураций (Edit configurations) и нажмите «добавить конфигурацию удаленного запуска» (Remote). Убедитесь что вы указали правильное имя компьютера и порт прежде чем запустить эту конфигурацию.
                                  • Настройки Если вы хотите поменять настройки отладчика по умолчанию, нажмите Settings → Debugger.
                                    Оригинал статьи
                                    Комментарии (21)
                                    • популярные
                                    • новые
                                    • старые
                                    Для того, что бы оставить комментарий вы должны авторизироваться
                                    Sato 8 уровень, Днепр
                                    28 июня, 06:45
                                    и снова - здорово, что джавараш развивается - мне так не хватало такой подробной инструкции по ИДЕА на этом ресурсе в прошлый раз, когда начинал учить джава
                                    imeriks 19 уровень, Москва
                                    22 октября 2017, 22:12
                                    Добрый вечер.
                                    Подскажите, почему дебагер может выдавать «collecting data...», то есть перестал выдавать значения переменных и только эта строчка. Такое в 1-2 программах, в других работает нормально. Что это такое и почему возникает? Может кто сталкивался.
                                    trukach05 26 уровень
                                    5 апреля 2017, 13:48
                                    10 уровень. Понадобился дебаггер, спасибо за инструкцию!
                                    Wardeng 36 уровень, Гомель
                                    15 февраля 2017, 17:53
                                    Спасибо!
                                    Morfin 23 уровень, Ceska
                                    9 января 2017, 02:29
                                    15 левл. В задаче предложили воспользоваться дебаггером. До этого им ни разу не пользовался. Зашел на форум, посмотреть, что советуют там, ибо не знаю что и как с эти дебаггером. Таким новичком оказался не один я. Ну и ответом на вопрос помощи на форуме была ссылка на эту статью. Ну, думаю, круто, щас разберусь.
                                    Прочитал статью, поржал) А где нормальная инструкция? Для новичков которая. Я долбаный брейкпоинт поставить не мог минуту, а как поставил не мог въехать, для чего он.
                                    Помощь — она такая помощь.
                                    thinker 14 уровень
                                    24 февраля 2017, 20:29
                                    как ты дошёл до 15 уровня без дебаггера? О_о
                                    Morfin 23 уровень, Ceska
                                    25 февраля 2017, 11:47
                                    Я просто об этом не задумывался:) Уже кстати почти на 20ом. Все так же без дебаггера
                                    dupliaka 29 уровень, Санкт-Петербург
                                    3 октября 2015, 23:57
                                    Мне кажется в 9 пункте опечатка, поправьте меня если я не права, но там должен быть ctrl
                                    molodets 30 уровень
                                    4 ноября 2015, 10:34
                                    Что-то у меня ни с Ctrl, ни с Alt не срабатывает
                                    abbath0767 36 уровень
                                    10 апреля 2015, 20:31
                                    Отладчик превосходная вещь! Спасибо за статью. Я конечно был знаком с ним и до статьи (метод научного тыка), но некоторые подробности и особенности очень полезные. До сих пор помню как вместо отладчика пользовался System.out.print в разных местах кода.
                                    volko 32 уровень, Донецк
                                    21 февраля 2015, 22:30
                                    Есть ли возможность дебажить метод run() нити (Thread)? У меня на точках останова в нем дебаггер никогда не останавливается.
                                    CommandorShepard 8 уровень
                                    21 февраля 2015, 22:46
                                    Насколько я понимаю, многопоточные программы вообще малореально дебажить, так как пока будешь пошагово проходить один поток, непонятно, что будет в другом происходить, и насколько он отработает.
                                    savimar 33 уровень, Москва
                                    25 марта 2015, 16:34
                                    там есть вкладка для потоков и их можно отследить в ней.
                                    J_Mnemonic 12 уровень
                                    24 июля 2017, 21:44
                                    thread dump что-ли?
                                    VAS_BeasT 25 уровень
                                    7 января 2015, 16:02
                                    У меня тоже проблемы с отладчиком. При запуске выдает ошибку:

                                    FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_LOAD(196)
                                    ERROR: transport library not found: dt_socket
                                    ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_LOAD(509)
                                    JDWP exit error AGENT_ERROR_TRANSPORT_LOAD(196): No transports initialized [../../../src/share/back/debugInit.c:750]

                                    Process finished with exit code 1

                                    Как это возможно исправить?
                                    VAS_BeasT 25 уровень
                                    10 января 2015, 08:34
                                    Проблема решена переустановкой и переподключением JDK.
                                    Yevgen74 17 уровень
                                    29 декабря 2014, 03:57
                                    У меня дебагер тупо не работает! Что делать не понятно. В чем может быть дело? Может я что-то не настроил?
                                    Batrak 9 уровень, Киев
                                    25 марта 2015, 12:59
                                    У меня тоже тупо не работал в окне Variables было сообщение «Connected to the target VM, address: '127.0.0.1:59933', transport: 'socket'», пол дня разбирался, пока не поставил точку останова возле строки
                                    public static void main(String[] args)
                                    Gamurari 12 уровень, Кишинев
                                    14 января 2016, 10:50
                                    Чувак, я тебя обожаю. Неделю не могла понять что не так с этим дебагером, пока не прочитала твой комментарий
                                    Wardeng 36 уровень, Гомель
                                    20 апреля 2017, 12:17
                                    Gamurari, о и тебе спасибо. Я прочитал твой коммент, потом почитал выше. И вдруг нашел кнопку которая позволяет дебажить прогу без тысячи брекпоинтов))))
                                    Ставим точку на маин, а потом жмем F7 Ура))) как этого нехватало мне целых полгода)
                                    Vikentsi 22 уровень, Минск
                                    12 сентября 2017, 00:22
                                    Wardeng, и тебе спасибо.) Мне тоже не хватало кнопки F7 и дебажить с помощью одного брэкпоинта.)