Что нельзя делать в окне watch во время отладки программы
Руководство пользователя IntelliJ IDEA. Отладчик
Отладчик
Запуск отладчика
После того как вы настроите конфигурацию запуска вашего проекта, вы можете запускать его в режиме отладки, нажав Shift + F9
В окне отладчика вы можете видеть стек вызовов функций и список потоков, с их состояниями, переменными и окнами просмотра состояния. Когда вы выбираете контекст вызова функции, вы можете просмотреть значения переменных соответствующих выбранному контексту.
Полезные клавиатурные сокращения отладчика
Умный переход внутрь
Иногда вам надо при пошаговой отладке перейти внутрь определенного метода, но не первого который будет вызван. В таком случае вы можете нажать Shift + F7 (Cmd + F7 для Mac) чтобы выбрать из предложенного списка метод который вам нужен. Это может сэкономить вам массу времени.
Удалить контекст вызова функции
Если вам нужно «вернуться назад во времени» во время отладки, вы можете сделать это удалив контекст вызова функции. Это сильно поможет если вы по ошибке зашли слишком глубоко. Таким образом вы не откатите глобальное состояние выполнения программы, но как минимум вы вернетесь назад по стеку вызовов функций.
Переход к курсору
Пометить элемент
Если вы хотите легко видеть какой-то элемент во время отладки, вы можете добавить к нему цветную метку, нажав F11 или выбрав соответствующий пункт в меню вкладки Variables и Watches.
Когда этот элемент появится в списке, вы увидете его метку.
Вычислить выражение
В режиме отладки вы можете вычислить любое выражение, с помощью очень мощного инструмента вызываемого нажатием Alt + F8.
Этот инструмент предоставляет автодополнение кода как и редактор, так что ввести любое выражение будет очень просто.
Если у вас есть какие-то элементы с метками, автодополнение кода покажет вам эти метки чтобы вы могли легко найти нужные элементы и вычислить их значения.
Состояние и настройки точки останова
Если вы хотите поменять какие-то настройки точки останова, вы можете нажать Shift + Ctrl + F8 (Shift + Cmd + F8 для Mac).Во всплывающем окне вы можете ввести нужные вам параметры.
Если у вас какой-то элемент имеет метку, вы также можете использовать эту метку в выражениях.
Чтобы получить список всех точек останова в вашем проекте (с расширенными настройками), снова нажмите Shift + Ctrl + F8 (Shift + Cmd + F8 для Mac).
Точки останова переменной
В дополнение к условным точкам останова, вы можете также использовать точки останова переменной. Такие точки срабатывают, когда производится чтение или запись в какую-то переменную. Для того чтобы создать такую точку останова, кликните на панель слева от редактируемого текста, напротив нужной вам переменной, зажав Alt.
Точки останова по событиям
Временные точки останова
Для того чтобы создать точку останова которая сработает только один раз, кликните на панель слева от кода зажав Shift + Alt.
Отключить точки останова
Также очень полезно знать, что любая точка останова может быть быстро отключена по нажатию на панель слева от кода с зажатым Alt.
Загрузка изменений и быстрая замена
Иногда вам нужно внести небольшие изменения в код без прерывания процесса отладки. Так как виртуальная машина Java поддерживает возможность HotSwap, среда разработки в режиме отладки предлагает вам перезагрузить измененные классы когда вы их скомпилируете.
Не забывайте, что функционал HotSwap в Java машине имеет ряд ограничений и не позволяет перезагружать статические поля и методы.
Удаленная отладка
Чтобы создать конфигурацию для удаленного запуска, перейдите к редактированию конфигураций (Edit configurations) и нажмите «добавить конфигурацию удаленного запуска» (Remote). Убедитесь что вы указали правильное имя компьютера и порт прежде чем запустить эту конфигурацию.
Настройки
Если вы хотите поменять настройки отладчика по умолчанию, нажмите Settings → Debugger.
Оригинал статьи
Работа с отладчиком Visual Basic. Окна Watch, Immediate
End Sub
Cancel As Boolean)
Private Sub mW_MTS(ByVal Percent As Single, _
End Sub
End Sub
Private Sub Form_Load()
Text1 = Format(r, «0 %»)
m% = CInt(100 * Percent)
If m >= 50 Then Cancel = True
Редактор Visual Basic является средой разработки и редактирования программ на языке Visual Basic. Как и все современные средства разработки программного обеспечения, редактор Visual Basic содержит мощные средства для облегчения написания кода, а также средства для поиска и устранения ошибок. Начиная с версии 2000 года, редактор Visual Basic является отдельным приложением, которое имеет свою строку меню и панель инструментов. Кроме того, в его состав входят семь вспомогательных окон, облегчающих управление проектом, навигацию и поиск объектов, их свойств, методов, а также отладку и оптимизацию программных процедур.
Естественно, все переменные, используемые в окне, должны быть доступны в момент вычисления. Например, если вы указываете имя элемента управления какой-нибудь формы, то эта форма должна быть, как минимум, открыта.
Следующее отладочное окно — окно локальных переменных (Locals Window) используется для отображения промежуточных значений всех локальных переменных и свойств, доступных в активном объекте Например, окно локальных переменных (Locals Window), открытое для формы Поставщики (Suppliers), в точке останова в теле обработчика события ПередОбновлением (BeforeUpdate). В центре окна локальных переменных расположена таблица, содержащая три столбца Выражение (Expression), Значение (Value) и Тип (Туре) Столбец Выражение (Expression) содержит наименования всех переменных и свойств объекта, расположенных в виде иерархического списка. Если речь идет о модуле класса (например, формы или отчета), то во главе этого иерархического списка стоит ключевое слово Me.Me — это системная переменная, используемая для ссылки на активный объект (например, форму или отчет).
Второй столбец таблицы (Значение (Value)) содержит значение расположенного слева элемента, а столбец Тип (Туре), как ни странно, содержит его тип ни одну из величин, приведенных в таблице, редактировать нельзя.
Окно локальных переменных (Locals Window) используется только в режиме останова программы (Break Mode) Исполняя программу в пошаговом режиме, можно наблюдать, как изменяются значения переменных и свойств объекта. Удобство использования этого отладочного окна заключается в том, что можно одновременно наблюдать за изменением большого количества свойств объекта по мере выполнения программы.
Третье отладочное окно — окно контрольных выражений (Watch Window) используется для проверки значений указанных в этом окне выражений. Это окно очень напоминает окно локальных переменных (Locals Window). В центре его расположена таблица, состоящая из четырех столбцов. Смысл и наименования первых трех столбцов соответствуют первым трем столбцам таблицы окна локальных переменных (Locals Window). Четвертый столбец называется Контекст (Context). В этом столбце указывается, на каком уровне описана переменная. Если переменная описана в процедуре, то здесь фигурирует наименование модуля и наименование процедуры; если переменная является общей для модуля (глобальной), столбец содержит наименование модуля.
12. Оператор On Error. Методы объектов Debug. Условная компиляция. Примеры
Как правило, отладка — это проверка работы и исправление ошибок программистом перед передачей проекта на тестирование.
Инструментарии отладки позволяет проконтролировать избранные участки кода приложения для локализации ошибки, выполняя приложение по шагам, останавливаясь в точках останова, дает возможность проверить значения переменных, свойств объектов и другую интересующую информацию и выяснить, таким образом, источник ошибки.
В набор инструментария отладки Visual Basic 6 входят такие основные инструменты, как:
Панель инструментовDebug (рис. 10.4) активизируется при выборе из меню View (Вид) командыToolbars (Панели инструментов), а затем значения Debug (Отладка).
На панели инструментовDebug находятся кнопки, обеспечивающие работу по отладке приложения. Назначение этих кнопок описано в табл. 10.3.
Таблица 10.3. Кнопки панели инструментовDebug
Кнопка | Название | Назначение |
Start/Continue (Продолжить) | Запускает программу или продолжает ее выполнение после прерывания | |
Break (Остановка) | Вызывает прерывание программы в необходимом месте (без использования точек останова) | |
End(Завершение) | Завершает выполнение программы | |
Toggle Breakpoint (Установить точку останова) | Устанавливает точку останова на текущей строке кода | |
Step Into (Шаг с заходом в процедуры) | Осуществляет пошаговое выполнение процедуры, включая также вызываемые ею процедуры | |
Step Over (Шаг без захода в процедуры) | Осуществляет пошаговое выполнение процедуры без трассировки вызываемых ею процедур | |
Step Out (Шаг с выходом из процедуры) | Выполняет пошаговое выполнение текущей процедуры до выхода из нее | |
Locals Window (Окно Locals) | Открывает диалоговое окно Locals для контроля значений переменных | |
Immediate Window (Окно Immediate) | Открывает окно Immediate для ввода и выполнения команд | |
Watch Window (Окно Watch) | Открывает диалоговое окно Watches для просмотра выражений, включенных в список наблюдения | |
Quick Watch (Быстрый просмотр) | Открывает окно Quick Watch для просмотра выражения и значения, которое оно возвращает в данный момент в точке останова программы или на определенном шаге при пошаговом запуске программы | |
Call Stack (Стек вызовов) | Открывает окно Call Stack, в котором представлен список выполняемых процедур |
С остальными инструментами вы сможете познакомиться при рассмотрении процесса отладки. Откройте любое из ранее разработанных приложений, например приложение для изучения записи/чтения данных из файла. Установите точку останова в процедуре записи данных. Для этого щелкните кнопкой мыши, установив указатель в сером вертикальном поле редактора кода напротив интересующей строки, или выполните командуToggle Break-point (Установить точку останова) менюDebug (Отладка). При этом в сером вертикальном поле рядом с выбранной командой устанавливается жирная точка (рис. 10.5), остановка выполнения программы произойдет именно в этом месте кода.
При запуске программы в точке останова выполнение программы приостанавливается и для контроля работы приложения можно использовать весь отладочный инструментарий: просматривать значения переменных и выражений при позиционировании маркера на выбранной переменной или выражении (рис. 10.6).
Для более тщательного контроля работы приложения можно использовать окна просмотра:Immediate (Немедленное выполнение),Watches (Наблюдение),Locals (Локальные),Quick Watch (Быстрый просмотр).Call Stack (Стек вызовов).
При работе с окномImmediate удобно использовать объект Debug и его метод print. В режиме запуска метод Debug. Print выводит текстовое сообщение в окнеImmediate. Синтаксис этого метода очень простой:
Debug.Print StringMessage где StringMessage — текст выводимого в окноImmediate сообщения.
В окнеLocals можно просмотреть все переменные и их значения, используемые в данный момент приложением (рис. 10.8)
Основным окном для просмотра значений выражений является окно Watches (рис. 10.9). В этом окне можно проконтролировать любое выражение из списка введенных для проверки.
Список проверяемых выражений пополняется в диалоговом окнеAdd Watch(рис. 10.10), открываемом командойAdd Watch (Добавить наблюдение) контекстного меню редактора кода или одноименной кнопкой на панели инструментовDebug (Отладка). Для добавления выражения в список контролируемых необходимо ввести его в текстовое полеExpression (Выражение) этого окна.
Замечание
Если в тексте кода выделить выражение, то при вызове окнаAdd Watch это выражение по умолчанию вставляется в полеExpression.
ОбластьContext диалогового окнаAdd Watch позволяет установить область видимости переменных, наблюдаемых в выражении. Раскрывающийся списокProcedure (Процедура) задает видимость внутри процедур, а список Module (Модуль) — внутри программных модулей.
ПереключательWatch Type (Тип просмотра) определяет, как Visual Basic реагирует на наблюдаемое выражение. При установке опцииWatch Expression (Выражение наблюдения) значение выражения отображается в диалоговом окнеWatches в режиме прерывания. ОпцияBreak When Value Is True(Приостановить при равенстве выражения значениюИстина) автоматически задает режим прерываний и обращение к контролю выражений при условии равенства выражения значениюTrue или ненулевому значению для числовых выражений. ОпцияBreak When Value Changes (Приостановить при из менении значения выражения) аналогична опцииBreak When Value Is True,но приложение входит в режим прерывания при изменении значения выражения.
В дополнение к окнуWatches, для просмотра выражений можно использовать окноQuick Watch (Быстрый просмотр) для быстрого доступа к значению выражения (рис. 10.11). Для этого окна не требуется вводить список контролируемых выражений, а достаточно выделить интересующее выражение в тексте кода и вызвать окноQuick Watch одноименной кнопкой на панели инструментовDebug,
Для контроля выполняемых процедур используется окноCall Stack (Стек вызовов), в котором показаны все вызванные и активные в данный момент процедуры (рис. 10.12).
Из окнаCall Stack можно перейти к коду программы (рис. 10.13), откуда был выполнен вызов выбранной в списке процедуры, с помощью кнопки Show (Показать). На рис. 10.13 показано место вызова процедуры, выбранной в окнеCall Stack (рис. 10.12).
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
Всё, что вы хотели знать об отладке в IntelliJ IDEA
Sep 20, 2020 · 8 min read
Отладка — это один из самых важных этапов процесса разработки. И дело не только в том, что устранение ошибок занимает, вероятно, большую часть времени: она также особенно необходима при создании бизнес-логики, написании алгоритмов и тестировании кода.
Давайте начнем с основ. Существуют 4 типа точек останова в IntelliJ IDEA.
Точка останова для строки кода
Останавливает приложение в момент достижения им строки кода, содержащей данную точку. Этот тип точки останова может быть добавлен только в выполняемую строку. Если она содержит лямбда-выражение, то вы можете выбрать: либо установить регулярную точку, либо останавливать программу только при вызове лямбда-выражения.
Точка останова для метода
Ос т анавливает приложение при входе/выходе из указанного метода или одной из его реализаций и позволяет проверять условия этого процесса. Данный вид точки останова может сильно замедлить процесс отладки, так что использовать его следует аккуратно и только в случае необходимости.
Точка останова для исключений
Останавливает приложение при выбрасывании Throwable.class или его подклассов.
Точка останова при доступе к полю класса
Останавливает приложение при обращении к указанному полю или внесении в него изменений, что позволяет вам реагировать на взаимодействия с конкретными переменными экземпляра. Например, просмотр того, как инициализируется свойство, или какой метод изменил свое значение.
Для создания точки останова используйте “горячие” клавиши Ctrl + F8. Тип точки останова (для строки кода, для метода или для доступа к полю класса) будет зависеть от того, где вы ее создаете. Для просмотра списка всех точек останова используйте Ctrl + Shift + F8.
Эта возможность сэкономит вам часы работы, а также избавит вас от необходимости искать точки останова и удалять их вручную в том случае, если они останавливают процесс выполнения кода вопреки вашему намерению. Кроме того, данная опция позволяет вам просто их отключить, в результате чего точки не будут останавливать код во время отладки, но при необходимости вы сможете легко включить их повторно. Поэтому вам не нужно запоминать все важные места в проекте и каждый раз создавать и удалять все точки останова.
Suspend (Приостановка)
Определяет, следует ли остановить выполнение приложения в момент достижения точки останова. Имеет два возможных значения: All/Thread. При выборе all происходит приостановка всех потоков, когда какой-либо из них достигает контрольной точки. При выборе thread приостанавливается лишь один поток, достигший этой точки.
Condition (Условие)
Эта опция позволяет задать условие, подлежащее проверке каждый раз при достижении точки останова. Если условие возвращает значение true, то выполняется заданное действие, в противном же случае контрольная точка пропускается.
В качестве условия вы можете использовать:
Опции логирования
При достижении точки останова в консоль может быть выведено следующее:
2.Трассировка стека для текущего окна Frame. Это удобно, если вы намерены проверить, какие методы были вызваны до момента достижения точки останова.
Remove once hit (Удаление точки останова при ее достижении)
Определяет, следует ли удалить точку останова из проекта после того, как она была достигнута.
Disable until hitting the following breakpoint (Отключение точки останова до момента достижения другой точки)
Отключает текущую точку останова до тех пор, пока не будет достигнута заданная точка. Вы также можете решить, отключить ли ее после того, как это произошло, или нет.
Filters (Фильтры)
Эта IDE от JetBrains позволяет также настраивать работу с точками, отфильтровывая классы/экземпляры/методы и выполняя остановку только в нужных вам местах.
В вашем распоряжении следующие типы фильтров:
Field access/modification (Доступ к полю класса/изменение поля класса)
Pass count (Количество проходов)
Определяет, должна ли сработать точка останова после того, как она была пройдена заданное количество раз. Эту опцию удобно применять для циклов отладки или рекурсивных методов.
Caught/uncaught exception (Обработанное/необработанное исключение)
Лучшие практики использования точек останова
Для логирования отладки используйте точки останова, но не инструкцию System.out.println.
Прибегайте к помощи “горячих” клавиш для добавления точек останова, так вы сэкономите довольно много времени.
Использование “горячих” клавиш открывает прекрасные перспективы более продуктивного программирования. Не забывайте про них.
Объединяйте точки останова в группы.
Вы можете создать группу точек останова, например в том случае, если вам нужно отметить точки для решения какой-либо особой задачи. В диалоговом окне Breakpoints (Ctrl+Shift+F8) выберите сначала точку, которую необходимо добавить в группу, а затем — Move to a group.
Выясните исходную причину критических ошибок.
Не используйте точки останова для метода без необходимости.
Эти точки могут чрезвычайно замедлить выполнение кода, что приведет к значительным потерям времени.
Не удаляйте точки останова полностью.
Если в настоящий момент вам не нужна какая-то отдельная точка, то не удаляйте ее полностью, а просто отключите. Это позволит сэкономить время в будущем, когда вам понадобится протестировать такой же блок кода, поскольку отпадет необходимость искать ее в огромном проекте, и вы просто включите ее повторно.
Добавьте описание к точке останова.
Это поможет вам вспомнить, почему вам нужна именно эта точка из числа многих других.
Пошаговое выполнение программы
Степпинг (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.
Лучшие практики вычисления выражений
Если вам необходимо протестировать метод с разными значениями, не нужно создавать объекты вручную и перезапускать приложение. Можете просто вычислить эти значения в имеющемся методе. Это поможет сэкономить время, а также увидеть все свойства возвращаемого объекта.
Вычислитель выражений может выполнять все.
Будьте аккуратнее с потоками данных (Streams).
Если вы уже один раз прочитали поток данных вычислителем выражений, то он считается прочитанным, поэтому при попытке приложения прочитать его еще раз могут возникнуть ошибки.
Отладка иногда является весьма раздражающим и длительным, но при этом необходимым процессом в работе каждого разработчика. И IntelliJ IDEA предоставляет возможности и опции для того, чтобы сделать ее более удобной, простой и эффективной. Можно любить или не любить процесс отладки, но это не меняет то обстоятельство, что он является значимым этапом разработки.
Напоследок поделюсь самым важным практическим советом: