Что нельзя делать в окне watch во время отладки программы java

Обновлено: 28.06.2024

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

Полезные клавиатурные сокращения отладчика

  • Установить/снять точку останова - 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.

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

Этот инструмент предоставляет автодополнение кода как и редактор, так что ввести любое выражение будет очень просто.

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

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

Состояние и настройки точки останова

Если вы хотите поменять какие-то настройки точки останова, вы можете нажать Shift + Ctrl + F8 (Shift + Cmd + F8 для Mac).Во всплывающем окне вы можете ввести нужные вам параметры.

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

Если у вас какой-то элемент имеет метку, вы также можете использовать эту метку в выражениях.

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

Чтобы получить список всех точек останова в вашем проекте (с расширенными настройками), снова нажмите Shift + Ctrl + F8 (Shift + Cmd + F8 для Mac).

Точки останова переменной

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

Точки останова по событиям

Еще одна полезная возможность - вычислить определенное выражение в нужной вам строке кода не прерывая выполнение. Для этого вам нужно кликнуть на панель слева от редактируемого кода напротив нужной строки, зажав Shift.

Временные точки останова

Для того чтобы создать точку останова которая сработает только один раз, кликните на панель слева от кода зажав Shift + Alt.

Отключить точки останова

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

Загрузка изменений и быстрая замена

Иногда вам нужно внести небольшие изменения в код без прерывания процесса отладки. Так как виртуальная машина Java поддерживает возможность HotSwap, среда разработки в режиме отладки предлагает вам перезагрузить измененные классы когда вы их скомпилируете.

Не забывайте, что функционал HotSwap в Java машине имеет ряд ограничений и не позволяет перезагружать статические поля и методы.

Удаленная отладка

Последняя вещь в IntelliJ IDEA о которой вам точно нужно знать это удаленная отладка. Удаленная отладка - подключение отладчика к уже запущенной у вас или на другом компьютере Java машине по сетевому порту. Таким образом можно подключить отладчик к серверу приложений, запущенному на сервере.

Чтобы создать конфигурацию для удаленного запуска, перейдите к редактированию конфигураций (Edit configurations) и нажмите «добавить конфигурацию удаленного запуска» (Remote). Убедитесь что вы указали правильное имя компьютера и порт прежде чем запустить эту конфигурацию.

Настройки

Если вы хотите поменять настройки отладчика по умолчанию, нажмите Settings → Debugger.

Когда вы освоите работу с окном Locals, работа с окном Watches (Окно контролируемых выражений) покажется просто забавой. Окно Watches делает, по сути, то же самое, что и окно Locals, но с одним очевидным отличием - те выражения, значения которых будут показаны в этом окне, должны выбрать вы. Примерный вид окна Watches показан на рис. 9.12.

Рис. 9.12. Окно Watches редактора Visual Basic

Используйте окно Watches при отладке больших программ, в которых большое число разных процедур работает с открытыми переменными. Добавив эти переменные в окно Watches, вы сможете контролировать их значения, независимо от того, какая из частей программы выполняется в данный момент.

Окно Watches появится на экране автоматически, как только вы зададите контролируемое выражение. (О том, что такое контролируемое выражение, вы узнаете во врезке "Об отличиях между окнами Watches и Locals".) Если на экране не хватает места, вы всегда можете закрыть это окно, щелкнув на кнопке закрытия в его верхнем правом углу.

15.4. Программирование для отладки

15.4. Программирование для отладки Имеется множество методик для упрощения отладки исходного кода, от простых до сложных. В данном разделе мы рассмотрим ряд из

Время отладки

Время отладки По какой-то неведомой причине разработчики не считают отладку естественной частью процесса разработки. Им кажется, что отладка сродни физиологической потребности: ей занимаются просто потому, что это неизбежно. Однако время отладки обходится фирме ровно в

Окно Timeline (Окно монтажа)

Окно Timeline (Окно монтажа) Основная работа по монтажу фильма происходит в окне Timeline (Окно монтажа). По умолчанию оно содержит три видео– и три звуковые дорожки. Количество дорожек проекта можно изменить. Позже будет рассказано, как это делается. В левой части каждой дорожки

Перенос клипов в окно Timeline (Окно монтажа)

Перенос клипов в окно Timeline (Окно монтажа) Монтаж фильма производится в окне Timeline (Окно монтажа). Именно там можно составить нужную последовательность клипов и соединить их друг с другом. Там же чуть позже вы будете размещать клипы титров и применять к фрагментам фильма

Об отличиях между окнами Watches и Locals

Об отличиях между окнами Watches и Locals Кроме того, что появляющиеся в окне Watches объекты выбираете вы, окно Watches отличается от окна Locals следующим.* Каждая из строк окна Watches позволяет контролировать значение любого допустимого в VBA выражения, а не только отдельной переменной.

Ключевое слово static

Хранение семейных тайн: ключевое слово protected

Получение интерфейсных ссылок: ключевое слово as

Получение интерфейсных ссылок: ключевое слово as Второй способ проверить поддержку интерфейса для данного типа предполагает использование ключевого слова as, о котором уже шла речь в главе 4. Если объект можно интерпретировать, как указанный интерфейс, будет возвращена

Получение интерфейсных ссылок: ключевое слово is

Получение интерфейсных ссылок: ключевое слово is Можно также проверить реализацию интерфейса с помощью ключевого слова is. Если соответствующий объект не совместим указанным интерфейсом, будет возвращено значение false. А если тип совместим с интерфейсом, вы можете смело

Ключевое слово checked

Ключевое слово checked Вы, несомненно, прекрасно знаете, что любой числовой тип данных имеет свои строго заданные верхний и нижний пределы (значения которых можно выяснить программными средствами с помощью свойств MaxValue и MinValue). При выполнении арифметических операций с

Ключевое слово unchecked

Ключевое слово unchecked В предположении, что вы активизировали проверку переполнения для всего проекта, как разрешить игнорирование переполнений для тех блоков программного кода, где "молчаливая реакция" на переполнение вполне приемлема? Поскольку флаг /checked предполагает

Ключевое слово sizeof

КЛЮЧЕВОЕ СЛОВО return

КЛЮЧЕВОЕ СЛОВО return Принципы программирования на языке Си основаны на понятии функции. В представленных ранее примерах программирования мы уже воспользовались несколькими функциями: printf( ), scanf( ), getchar( ), putchar( ) и strlen( ). Эти функции являются системными, однако мы

Ключевое слово this

Ключевое слово this Ключевое слово this представляет собой указатель на текущий объект класса. Методы класса могут использовать ключевое слово this чтобы получить указатель на объект для которого вызван данный метод. Указатель this представляет собой постоянную величину, вы не

1.2. Монитор — окно в виртуальный мир. Какое окно лучше?

1.2. Монитор — окно в виртуальный мир. Какое окно лучше? Даже если вы совсем не знакомы с компьютерами, все же знаете, наверное, что есть плоские мониторы, а есть похожие на телевизоры. Первые называются жидкокристаллическими (LCD), а вторые — мониторами с электронно-лучевой

Education

Отладка — это один из самых важных этапов процесса разработки. И дело не только в том, что устранение ошибок занимает, вероятно, большую часть времени: она также особенно необходима при создании бизнес-логики, написании алгоритмов и тестировании кода.

Давайте начнем с основ. Существуют 4 типа точек останова в IntelliJ IDEA.

Точка останова для строки кода

Останавливает приложение в момент достижения им строки кода, содержащей данную точку. Этот тип точки останова может быть добавлен только в выполняемую строку. Если она содержит лямбда-выражение, то вы можете выбрать: либо установить регулярную точку, либо останавливать программу только при вызове лямбда-выражения.

Точка останова для метода

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

Точка останова для исключений

Останавливает приложение при выбрасывании Throwable.class или его подклассов.

Точка останова при доступе к полю класса

Останавливает приложение при обращении к указанному полю или внесении в него изменений, что позволяет вам реагировать на взаимодействия с конкретными переменными экземпляра. Например, просмотр того, как инициализируется свойство, или какой метод изменил свое значение.

Для создания точки останова используйте “горячие” клавиши Ctrl + F8. Тип точки останова (для строки кода, для метода или для доступа к полю класса) будет зависеть от того, где вы ее создаете. Для просмотра списка всех точек останова используйте Ctrl + Shift + F8.


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

Suspend (Приостановка)

Определяет, следует ли остановить выполнение приложения в момент достижения точки останова. Имеет два возможных значения: All/Thread. При выборе all происходит приостановка всех потоков, когда какой-либо из них достигает контрольной точки. При выборе thread приостанавливается лишь один поток, достигший этой точки.

Condition (Условие)

Эта опция позволяет задать условие, подлежащее проверке каждый раз при достижении точки останова. Если условие возвращает значение true, то выполняется заданное действие, в противном же случае контрольная точка пропускается.

В качестве условия вы можете использовать:

  • различные инструкции, включающие объявления, циклы, анонимные классы и т. д.;
  • this (не используется в статическом контексте), например !(this instanceof User) ;
  • проверка логических типов или выражений.

Опции логирования

При достижении точки останова в консоль можетбыть выведеноследующее:

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

3.Вычисление выражения и запись результата в консоль: результат произвольного выражения, например "Creating. " или users.size() .

Remove once hit (Удаление точки останова при ее достижении)

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

Disable until hitting the following breakpoint (Отключение точки останова до момента достижения другой точки)

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

Filters (Фильтры)

Эта IDE от JetBrains позволяет также настраивать работу с точками, отфильтровывая классы/экземпляры/методы и выполняя остановку только в нужных вам местах.

В вашем распоряжении следующие типы фильтров:

  • Catch class filters (классовые фильтры перехвата). Они останавливают приложение при перехвате исключения в заданных классах.
  • Instance filters (фильтры экземпляров класса). Эти фильтры указывают на экземпляры объектов, для которых будет срабатывать точка останова.
  • Class filters (фильтры классов). Они задают классы, в которых будет срабатывать точка.
  • Caller filters (фильтры вызовов). Данный тип фильтров ограничиваетдействие точки останова в зависимости от вызова текущего метода. Эта опция вам пригодится, если нужно остановиться на точке только в случае вызова этого метода из заданного метода.

Field access/modification (Доступ к полю класса/изменение поля класса)

  • Field access. Используйте эту опцию, чтобы точка останова срабатывала при обращении к полю класса.
  • Field modification. Если вы хотите, чтобы точка останова срабатывала при внесении изменений в поле класса, то выбирайте данную опцию.

Pass count (Количество проходов)

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

Caught/uncaught exception (Обработанное/необработанное исключение)

  • Caught exception. Опция предназначена для срабатывания точки останова при условии, что заданное исключение было обработано.
  • Uncaught exception. Выберите эту опцию для срабатывания точки останова в том случае, если заданное исключение не было обработано. Так вы сможете выявить причины необработанных исключений.

Лучшие практики использования точек останова

Для логирования отладки используйте точки останова, но не инструкцию System.out.println.

Используйте точки останова для ведения логов вместо добавления в код System.out.print . Это позволит применить более гибкий подход к процессу логирования в приложении, а также избежать написания грязного кода и внесения случайных изменений при выполнении Git-коммитов.

Прибегайте к помощи “горячих” клавиш для добавления точек останова, так вы сэкономите довольно много времени.

Использование “горячих” клавиш открывает прекрасные перспективы более продуктивного программирования. Не забывайте про них.

Объединяйте точки останова в группы.

Вы можете создать группу точек останова, например в том случае, если вам нужно отметить точки для решения какой-либо особой задачи. В диалоговом окне Breakpoints (Ctrl+Shift+F8) выберите сначала точку, которую необходимо добавить в группу, а затем — Move to a group.

Выясните исходную причину критических ошибок.

Точки останова для исключений работают с Throwable.class . Вы можете добавить условие, которое поможет вам останавливать выполнение кода только при выбрасывании Error.class , или вы можете свести всё к MyCustomException.class .

Не используйте точки останова для метода без необходимости.

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

Не удаляйте точки останова полностью.

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

Добавьте описание к точке останова.

Это поможет вам вспомнить, почему вам нужна именно эта точка из числа многих других.

Пошаговое выполнение программы

Степпинг (stepping)— это пошаговое выполнение программы.

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


Рассмотрим каждый из них подробнее.

Step over (F8) — Шаг с обходом

Данная команда позволяет перешагнуть через текущую строку кода и перейти к следующей. Реализация методов пропускается, и вы переходите к следующей строке текущего метода.

Step into (F7) — Шаг с заходом

Благодаря этому шагу вы переходите внутрь метода для просмотра его кода. Эта опция подходит для тех случаев, когда вы не уверены, что метод возвращает правильное значение.

Step out (Shift + F8) — Шаг с выходом

При помощи этой команды вы выходите из текущего метода и переходите к вызывающему методу.

Run to cursor(Alt + F9) — Выполнение до курсора

Данная команда продолжает выполнение приложения до текущей позиции курсора.

Force step over (Shift+Alt+F8) — Принудительный шаг с обходом

Используя эту команду, вы обходите текущую строку кода и переходите к следующей. Если в вызываемых методах есть точки останова, то они игнорируются.

Drop frame — Возврат к предыдущему фрейму

Эта команда позволяет отменить последний фрейм стека и восстановить предыдущий. Это удобно, например, если вы по ошибке слишком далеко “прошагали” или хотите зайти в функцию, где пропустили важный блок кода.

Resume program (Ctrl + F9) — Возобновление программы

Эта команда возобновляет выполнение приложения до следующей точки останова.

Окно инструментов отладки

Когда вы начинаете отладку, перед вами открывается соответствующее окно инструментов (Debug).Оно используется для контроля за сеансом отладки, отображением и анализом данных программы, а также для выполнения различных действий данного процесса.


В этом окне вы можете видеть созданные объекты, свойства, исключения, значения и т. д. Данная опция удобна для тех случаев, когда вам нужно: 1) убедиться в том, что все свойства инициализированы правильно; 2) уточнить, какие параметры получил метод; 3) посмотреть на трассировку стека исключений.

Лучшие практики пошагового выполнения программы

Step Into (шаг с заходом) применим даже для методов из внешних библиотек.

Иногда внешние библиотеки также могут содержать ошибки. Отладка внешней библиотеки может помочь вам обнаружить неверный код и сообщить о нем ее разработчикам. Или может возникнуть другая проблема. Например, если метод из внешней библиотеки возвращает неожиданное значение, войдите в него для выяснения причины подобного поведения. Возможно, это произошло из-за ошибки в методеобъекта equals/hashcode и т. д. или по причине переопределения некоторых классов данной библиотеки в вашем проекте.

Используйте Show Execution Point (Отображение точки выполнения)

Если вы потеряли место, где остановилось выполнение кода, используйте Show Execution Point (Alt + F10) для перехода к достигнутой точке останова.

Просматривайте стек вызовов.

Иногда причина неожиданного поведения может затаиться там, где у вас нет точек останова. Обратитесь к стеку вызовов и посмотрите, какие методы были выполнены. Это поможет вам найти среди них ошибочный. Кроме того, если вы перейдете к другому методу через стек вызовов, вы сможете увидеть предварительно полученные им параметры.

Вычисление выражений

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

Для вычисления выражения используйте клавиши Alt + F8 или кнопку Evaluate.

Лучшие практики вычисления выражений

Если вам необходимо протестировать метод с разными значениями, не нужно создавать объекты вручную и перезапускать приложение. Можете просто вычислить эти значения в имеющемся методе. Это поможет сэкономить время, а также увидеть все свойства возвращаемого объекта.

Вычислитель выражений может выполнять все.

IntelliJ IDEA позволяет вам вычислять не только локальные, но и различные внешние методы или методы java.* . Вычислитель выражений способен даже выполнять методы, отправляющие запрос к другому сервису, давая вам возможность просмотреть подробный ответ.

Будьте аккуратнее с потоками данных (Streams).

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

Отладка иногда является весьма раздражающим и длительным, но при этом необходимым процессом в работе каждого разработчика. И IntelliJ IDEA предоставляет возможности и опции для того, чтобы сделать ее более удобной, простой и эффективной. Можно любить или не любить процесс отладки, но это не меняет то обстоятельство, что он является значимым этапом разработки.

Напоследок поделюсь самым важным практическим советом:

Если вы истинный разработчик, то забудьте о кнопке Run (Запуск) и используйте только Debug.

Отладчик значительно упрощает отладку приложений. Используя отладчик, мы можем остановить выполнение программы в определенный момент, проверить переменные, войти в функцию и сделать много вещей. IntelliJ предоставляет встроенный отладчик Java.

Контрольные точки

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

Точки останова обозначаются красными кружочками. Рассмотрим точку останова, установленную в строке 3.

Контрольные точки

Рассмотрим следующие шаги, чтобы лучше понять, как работают точки останова.

Щелкните правой кнопкой мыши на символе красного круга.

Выберите Больше параметров.

Чтобы удалить точку останова, просто нажмите на тот же символ.

Щелкните правой кнопкой мыши на символе красного круга.

Выберите Больше параметров.

Чтобы удалить точку останова, просто нажмите на тот же символ.

  • Перейдите в меню «Выполнить».
  • Выберите параметр «Отладка».

Шаг в

Во время отладки, если обнаружена функция и выбран шаг в действие, отладчик остановит выполнение программы в каждой точке этой функции, как если бы для этой функции была включена отладка.

Например, когда выполнение программы достигает строки 9, и если мы выбираем шаг в действие, то оно останавливает выполнение в каждой строке функции sayGoodBye () .

Выполнение программы

Выйти

Переступить

Действие Step over не входит в функцию, оно переходит к следующей строке кода. Например, если вы находитесь в строке 9 и выполняете действие step over, тогда оно переместит выполнение в строку 10.

Переступить

Программа возобновления

Действие Resume Program продолжит выполнение программы, игнорируя все точки останова.

Контрольные точки

Остановить действие

Действие Stop помогает остановить отладчик.

Стоп Действие

Умный шаг в

Во время отладки мы иногда можем встретить строку кода, которая вызывает несколько методов. При отладке этих строк кода отладчик обычно позволяет нам использовать шаг в и ведет нас через все дочерние функции, а затем обратно к родительской функции. Тем не менее, что, если мы хотим перейти только к одной дочерней функции? С помощью Smart step-into это позволяет нам выбрать функцию, в которую вы хотите войти.

Теперь давайте создадим класс Java со следующей строкой кода:

  • Иди бегать
  • Выберите умный шаг в.
  • Выберите дочернюю функцию для перехода.

Дочерняя функция

Проверка переменных

Во время отладки IntelliJ показывает значение переменной в самом окне редактора. Мы также можем просмотреть ту же информацию в окне отладки.

Проверка переменных

Оценить выражение

Запустить приложение в отладчике

Перейдите к Выполнить-> Оценить выражение.

Читайте также: