Какой из компонентов java предоставляет инструмент для отладки программы debugging tools

Обновлено: 06.07.2024

Методы отладки

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

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

Кроме того, у нас есть расширенные концепции, которые можно использовать для отладки таких программ, как:

  • шаговый
  • точки останова и
  • исключения или точки наблюдения.

Типы отладки

Мы можем отлаживать программу, используя различные методы:

  • Использование байт-кода Java (скомпилированная версия кода Java)
  • Использование комментариев внутри программ
  • Присоединение класса к запущенной программе
  • Удаленная отладка
  • Отладка по требованию
  • Оптимизированная отладка кода

Java отладчики

Вот несколько примеров отладчиков Java, доступных на рынке:

В этом руководстве рассказывается, как использовать отладчик командной строки, jdb .

JDB в JDK

Следующая архитектура определяет роль JDB в JDK. Он содержит в основном три единицы:

  • Интерфейс Java Virtual Machine Tool (JVM TI)
  • Пул отладки Java (JDWP)
  • Интерфейс отладчика Java (JDI)

Архитектура JDB

JVM TI

Это нативный программный интерфейс, реализованный VM. Он предоставляет способы проверки и отладки состояния приложения, работающего на виртуальной машине. Это позволяет реализации (VM Implementer), которые могут быть легко включены в архитектуру отладки. Для связи также используется сторонний канал JDWP .

Это высокоуровневый интерфейс Java, реализованный в качестве внешнего интерфейса. Он определяет переменную информацию на уровне кода пользователя. Рекомендуется использовать слой JDI для всех разработок отладчика. Он использует JDWP для связи с JVM-отладчиком.

В этой главе объясняется, как установить JDB в системах на базе Windows и Linux. JDB является частью JDK. Поэтому установки JDK достаточно для использования JDB в командной строке.

Системные Требования

Вот системные требования для установки JDB:

JDK Java SE 2 JDK 1.5 или выше
объем памяти 1 ГБ ОЗУ (рекомендуется)
Дисковое пространство Нет минимальных требований
Версия операционной системы Windows XP или выше, Linux

Следуйте простым шагам, приведенным ниже, чтобы установить JDB в вашей системе.

Шаг 1. Проверка установки Java

Прежде всего, вам необходимо установить Java Software Development Kit (SDK) в вашей системе. Чтобы убедиться в этом, выполните любую из двух команд в зависимости от платформы, на которой вы работаете.

Если установка Java была выполнена правильно, то она отображает текущую версию и спецификации установки Java. Пример вывода приведен в следующей таблице.

Откройте командную консоль и введите:

\> Java-версия

Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19)

64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 24.60-b09, смешанный режим)

Откройте командный терминал и введите:

$ java – версия

Открытая среда выполнения JDK (rhel-2.3.10.4.el6_4-x86_64)

Откройте виртуальную машину 64-разрядного сервера JDK (сборка 23.7-b01, смешанный режим)

Откройте командную консоль и введите:

\> Java-версия

Среда выполнения Java (TM) SE (сборка 1.7.0_60-b19)

64-разрядная серверная виртуальная машина Java Hotspot (TM) (сборка 24.60-b09, смешанный режим)

Откройте командный терминал и введите:

$ java – версия

Открытая среда выполнения JDK (rhel-2.3.10.4.el6_4-x86_64)

Откройте виртуальную машину 64-разрядного сервера JDK (сборка 23.7-b01, смешанный режим)

Шаг 2: Настройка среды Java

Установите переменную среды JAVA_HOME, чтобы она указывала на местоположение базовой директории, где установлена ​​Java на вашем компьютере. Например,

Платформа Описание
Windows установите JAVA_HOME в C: \ ProgramFiles \ java \ jdk1.7.0_60
Linux экспорт JAVA_HOME = / usr / local / java

Добавьте полный путь расположения компилятора Java к системному пути.

Платформа Описание
Windows Добавьте строку «C: \ Program Files \ Java \ jdk1.7.0_60 \ bin» в конце системной переменной PATH.
Linux экспорт PATH = $ PATH: $ JAVA_HOME / bin /

Выполните команду java -version из командной строки, как описано выше.

Шаг 3: Проверка установки JDB

Проверьте версию JDB следующим образом:

Откройте командную консоль и введите:

\> jdb – версия

Откройте командный терминал и введите:

$ jdb – версия

Откройте командную консоль и введите:

\> jdb – версия

Откройте командный терминал и введите:

$ jdb – версия

Эта глава объясняет синтаксис команды JDB. Синтаксис содержит четыре раздела, перечисленные ниже:

  • JDB
  • вариант
  • учебный класс
  • аргументы

Синтаксис

Синтаксис JDB следующий.

Он вызывает jdb.exe из комплекта разработки Java.

Опции

К ним относятся параметры командной строки, используемые для эффективной отладки Java-программы. Модуль запуска JDB принимает все параметры (такие как -D, -classpath и -X) и некоторые дополнительные дополнительные параметры, такие как -attach, -listen, -launch и т. Д.

Учебный класс

Это имя класса, для которого вы хотите выполнить операции отладки.

аргументы

Это входные значения, данные программе во время выполнения. Например, arg [0], arg [1] для метода main ().

В вышеупомянутых четырех сегментах варианты являются наиболее важными.

В этой главе описываются важные параметры, доступные в JDB, которые передаются в качестве аргументов с помощью команды jdb.

Опции

Следующая таблица содержит список опций, принятых JDB:

Использование параметров с командами

Следующие команды показывают, как использовать некоторые из указанных выше параметров:

-Помогите

Следующая команда возвращает -help при использовании JDB.

-прикреплять

Следующая команда присоединяет отладчик к указанной виртуальной машине (номер порта: 1099).

-Слушать

Следующая команда заставляет процесс JDB, работающий на текущей виртуальной машине, ожидать с помощью стандартного соединителя (виртуальная машина в 8008).

-listenany

Следующая команда заставляет процесс JDB, работающий на текущей виртуальной машине, ожидать с помощью любого соединителя (виртуальная машина в текущем работающем порту).

-tclient

Следующая команда выполняет приложение в Java Hotspot (™) VM (клиент).

-tserver

Следующая команда выполняет приложение на Java Hotspot (™) VM (сервер).

В этой главе описывается, как начать сеанс JDB различными способами. Запуск JDB является часто используемой техникой для запуска сеанса JDB.

В процессе отладки приложений работающих на JVM посредством дебаггера в Eclipse меня всегда впечатляло то, сколько доступа можно получить к данным приложения — потокам, значениям переменных и т.п. И в то же время периодически возникало желание «заскриптовать» некоторые действия или получить больше контроля над ними.

Например, иногда для того чтоб «мониторить» состояние какой-то переменной, меняющейся в цикле, я использовал условный брейкпойнт, условием к которому был код вроде «System.out.println(theVariable); return false». Этот хак позволял получить лог значений переменной практически не прерывая работы приложения (она, естественно, всё-таки прерывалась на время выполнения кода условия, но не более). Плюс, нередко при просмотре каких-нибудь данных через вид Display порядком раздражало то, что результат евалюейшна кода в Display введённого добавлялся тут же после него.

В общем хотелось получить возможность делать всё то же самое например через Bean Shell или Groovy Shell, что в принципе аналогично программному дебагу. По логике это не должно было быть сложно — ведь делает же это как-то сам Eclipse, верно?

Проведя некоторый рисёрч я смог получить доступ к отладочной информации JVM программно, и спешу поделится примером.

О JPDA и JDI

Для отладки JVM придуманы специальные стандарты, собранные вместе под «зонтичным» термином JPDA — Java Platform Debugger Architecture. В них входят JVMTI — нативный интерфейс для отладки приложений в JVM посредством вызова сишных функций, JDWP — протокол передачи данных между дебаггером и JVM, приложения в которой отлаживают и т.д.

Всё это выглядело не особо релевантно. Но сверх этого всего в JPDA входит некий JDI — Java Debug Interface. Это Java API для отладки JVM приложений — то, что доктор прописал. Официальная страница о JPDA подтвердила наличие reference имплементации JDI от Sun/Oracle. Значит, оставалось только начать ней пользоватся

Пример

В качестве proof of concept я решил попробовать запустить два Groovy Shell-а — один в отладочном режиме в качестве «подопытного», второй в качестве отладчика. В подопытном шелле была задана строчная переменная, значение которой требовалось получить из шелла-«отладчика».

Подопытный был запущен с следующими парметрами:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7896
Т.е. JVM была запущена в режиме удалённой отладки через TCP/IP, и ожидала соединения от отладчика на порту 7896.

Также в подопытном Groovy Shell была выполнена следующая команда:

Соответственно значение “Some special value” должно было быть получено в отладчике.

Т.к. это не просто значение поля какого-нибудь объекта, для того чтоб его получить надо было немного знать внутренности Groovy Shell (или как минимум подглядывать в исходники), но тем интереснее и реалистичнее мне показалась задача.

Далее дело было за «отладчиком»:

Рассмотрим всё пошагово:

Соединение с JVM

При помощи JDI соединяемся с JVM которую задумали отлаживать (хост == локалхост т.к. я всё делал на одной машине, но сработает аналогично и с удалённой; порт же тот, что был выставлен в debug-параметрах «подопытной» JVM).
JDI позволяет присоединятся к JVM как через сокеты, так и напрямую к локальному процессу. Поэтому VirtualMachineManager возвращает больше одного AttachingConnector-а. Мы выбираем нужный коннектор по имени транспорта («dt_socket»)

Получение стактрейса потока main

Полученный интерфейс к удалённой JVM позволяет посмотреть запущенные в ней потоки, приостановить их и т.п. Но для того, чтоб иметь возможность делать вызовы методов в удалённой JVM нам нужен поток в ней, который был бы остановлен именно брейкпойнтом. О чём собственно гласит следующий пункт JDI javadoc:
«Method invocation can occur only if the specified thread has been suspended by an event which occurred in that thread. Method invocation is not supported when the target VM has been suspended through VirtualMachine.suspend() or when the specified thread is suspended through ThreadReference.suspend().»

Для установки брейкпойнта я пошёл несколько специфическим путём — не заглядывать в сорцы Groovy Shell а просто посмотреть что сейчас происходит в JVM и выставить брейкпойнт прямо в том, что происходит.

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


В результате получил такое:

Установка брейкпойнта

Итак, мы имеем стактрейс остановленного потока main. API JDI возвращает для потоков так называемые StackFrame, из которых можно получить их Location. Собственно сей Location и требуется для установки брейкпойнта.
Не долго думая, локейшн я взял из «jline.ConsoleReader$readLine.call», и в него установил брейкпойнт, после чего запустил поток main работать дальше:


Теперь брейкпойнт установлен. Переключившись в подопытный Groovy Shell и нажав ввод я увидел что он действительно остановился. У нас есть остановка потока на брейкпойнте — всё готово к вмешательству в работу подопытной JVM.

Получение ссылки на объект Groovy Shell

API JDI позволяет из StackFrame получать видимые в них переменные. Чтоб получить значение переменной из контекста Groovy Shell надо было сначала вытянуть ссылку на сам шелл. Но где он?

Подсматриваем все видимые переменные во всех стек фреймах:


Обнаружился стек фрейм в объекте «org.codehaus.groovy.tools.shell.Main» с видимой переменной shell:
«48: org.codehaus.groovy.tools.shell.Main:131 in thread instance of java.lang.Thread(name='main', >

Получение искомого значения из Groovy Shell

У shell.Main имеется поле interpreter. Зная немного внутренности Groovy Shell я заранее знал что переменные GroovyShell контекста хранятся в объекте типа groovy.lang.Binding, который можно получить вызвав getContext() у Interpreter (вызов метода необходим т.к. соответствующего поля со ссылкой на groovy.lang.Binding в Interpreter нет).

Из Binding значение переменной можно получить вызовом метода getVariable(String varName).

Последняя строка скрипта вернула нам ожидаемое значение «Some special value» — всё работает!

Последний штрих

Шутки ради я решил еще и поменять значение этой переменной из отладчика — для этого достаточно было вызвать у Binding метод setVariable(String varName, Object varValue). Что может быть проще?

Чтоб убедится что всё сработало я также задизейблил брейкпойнт и запустил обратно приостановленный ранее по брейкпойнту поток main.

Переключившись в последний раз в подопытный Groovy Shell я проверил значиение переменной myVar, и оно оказалось равно «Surprise!».

Выводы

Быть Java программистом это счастье, ибо Sun подарил нам мощные инструменты — а значит большие возможности (-:
А если еще дописать к Groovy удобные врапперы (метаклассы) для JDI можно сделать программную отладку из Groovy Shell вполне приятной. К сожалению пока-что она выглядит где-то так же, как, например, доступ к полям и методам через reflection API.

При написании кода он, порой, не работает так, как я задумал или не работает в принципе. Я сижу и гадаю: что и где не так?

Немного посмотрев на код - иду на ресурсы профессионалов, например Stack Overflow и публикую вопрос "Где здесь ошибка?" или "Почему не работает?"

В итоге очень часто проблема мелкая: дурацкая опечатка, ошибка в синтаксисе и подобное. Профессионалом так не стать, если по каждой мелочёвке бегать по ресурсам. А я хочу им быть.

Вопрос: какие есть способы, чтобы найти ошибки в Java коде? Какие есть инструменты, методы, пути и пр.?


31.9k 22 22 золотых знака 119 119 серебряных знаков 206 206 бронзовых знаков


55.6k 9 9 золотых знаков 75 75 серебряных знаков 152 152 бронзовых знака

Вчера всё работало, а сегодня не работает / Код не работает как задумано

В чем заключается процесс отладки? Что это такое?

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

Заметка: Отладка производится как правило в IDE (Интегрированная среда разработки). Что это такое можно чуть подробнее ознакомиться в вопросе

Какие есть способы предупреждения ошибок, их нахождения и устранения?

В данном случае будет рассмотрен пример с Intellij IDEA, но отладить код можно и в любой другой IDE.

Подготовка

Достаточно иметь в наличии IDE, например Intellij IDEA

Запуск

Для начала в левой части панели с кодом на любой строке можно кликнуть ЛКМ , тем самым поставив точку останова (breakpoint - брейкпойнт). Это то место, где отладчик автоматически остановит выполнение Java, как только до него дойдёт. Количество breakpoint'ов не ограничено. Можно ставить везде и много.

введите сюда описание изображения

Отладка запускается сочетанием Shift+F9 или выбором в верхнем меню Run → Debug или нажатием зеленого "жучка":

введите сюда описание изображения

В данном случае, т.к. функция вызывается сразу на той же странице, то при нажатии кнопки Debug — отладчик моментально вызовет метод, выполнение "заморозится" на первом же брейкпойнте. В ином случае, для активации требуется исполнить действие, при котором произойдет исполнение нужного участка кода (клик на кнопку в UI, передача POST запроса с данными и прочие другие действия)

введите сюда описание изображения

  1. Стэк вызовов, все вложенные вызовы, которые привели к текущему месту кода.
  2. Переменные. На текущий момент строки ниже номера 24 ещё не выполнилась, поэтому определена лишь data и numsStringArr
  3. Показывает текущие значения любых переменных и выражений. В любой момент здесь можно нажать на + , вписать имя любой переменной и посмотреть её значение в реальном времени. Например data или nums[0] , а можно и nums[i] и item.test.data.name[5].infoКакой из компонентов java предоставляет инструмент для отладки программы debugging tools] и т.д. На текущий момент строки ниже номера 24 ещё не выполнилась, поэтому sum и output во вкладке Watchers обозначены красным цветом с надписью "cannot find local variable".

Процесс

Для самого процесса используются элементы управления (см. изображение выше, выделено зеленым прямоугольником) и немного из дополнительно (см. изображение выше, выделено оранжевым прямоугольником)

введите сюда описание изображения

Show Execution Point ( Alt+F10 ) — переносит в файл и текущую линию отлаживаемого скрипта. Например если файлов много, решили посмотреть что в других вкладках, а потом забыли где у вас отладка :)

Step Over ( F8 ) — делает один шаг не заходя внутрь функции. Т.е. если на текущей линии есть какая-то функция, а не просто переменная со значением, то при клике данной кнопки, отладчик не будет заходить внутрь неё.

Step Into ( F7 ) — делает шаг. Но в отличие от предыдущей, если есть вложенный вызов (например функция), то заходит внутрь неё.

Step Out ( Shift+F8 ) — выполняет команды до завершения текущей функции. Удобна, если случайно вошли во вложенный вызов и нужно быстро из него выйти, не завершая при этом отладку.

Rerun ( Ctrl+F5 ) — Перезапустить отладку

Resume Program( F9 ) — Продолжает выполнения скрипта с текущего момента. Если больше нет других точек останова, то отладка заканчивается и скрипт продолжает работу. В ином случае работа прерывается на следующей точке останова.

Stop ( Ctrl+F2 ) — Завершить отладку

View Breakpoints ( Ctrl+Shift+F8 ) — Посмотреть все установленные брейкпойнты

Mute Breakpoints — Отключить брейкпойнты.

Итак, в текущем коде видно значение входного параметра:

  • data = "23 24 11 18" — строка с данными через пробел
  • numsStringArr = — массив строк, который получился из входной переменной.

введите сюда описание изображения

Если нажмем F8 2 раза, то окажемся на строке 27; во вкладках Watches и Variables и в самой странице с кодом увидим, что переменная sum была инициализирована и значение равно 0, а также nums инициализирована и в ней лежит массив целых чисел .

Если теперь нажмем F8 , то попадем внутрь цикла for и нажимая теперь F8 пока не окончится цикл, можно будет наблюдать на каждой итерации, как значение num и sum постоянно изменяются. Тем самым мы можем проследить шаг за шагом весь процесс изменения любых переменных и значений на любом этапе, который интересует.

Дальнейшие нажатия F8 переместит линию кода на строки 31, 32 и, наконец, 36.

Дополнительно

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

введите сюда описание изображения

Это удобно, если останов нужен только при определённом значении, а не всегда (особенно в случае с циклами).

Debugging в переводе с английского означает «Отладка». Она необходима в программировании Java, чтоб отслеживать логические ошибки в коде. И инструменты NetBeans позволяют это сделать.

Логические ошибки - это ошибки программиста, когда код работает не так, как вы ожидали. Их может быть трудно отследить. К счастью, в NetBeans есть несколько встроенных инструментов, которые помогут вам найти решение этой проблемы.

Для начала изучите этот код:

Введите этот код либо в проект, который у вас уже есть, либо запустив новый. В этом коде мы пытаемся подсчитать, сколько раз встречается буква «g» в слове «Debugging». Ответ очевиден 3. Однако, когда вы запускаете программу, в окне «Вывод» выведется:

Итак, мы сделали где-то в нашем коде ошибку. Но где? Java-программа выполняется нормально и не выдает никаких исключений для изучения в окне вывода. Так что делать?

Чтобы отследить проблемы с вашим кодом, NetBeans позволяет вам добавить нечто, называемое точкой остановки (Breakpoint).

Чтоб добавить новую точку остановки, нажмите в поле нумерации строк в NetBeans окна кода напротив той строки, которую хотите проверить:

В меню NetBeans выберите Debug > Debug Имя Вашего Проекта:

NetBeans перейдет к точке остановки и строка станет зеленого цвета. Сейчас он остановил выполнение кода. Также вы должны увидеть новую панель инструментов:

Первые три кнопки позволяют остановить сеанс debugging, приостановить и продолжить. Следующие три кнопки позволяют перейти по коду для debugging, дальше четвертая - выйти и последняя - перейти к курсору.

Вы можете нажать клавишу F5 и продолжить. Код должен работать как обычно с точкой остановки. Сеанс debugging завершится.

Когда сеанс debugging завершится, нажмите на точку остановки, чтобы избавиться от нее. Теперь добавьте точку остановки в цикл for:

Теперь нажмите Debug > New Watch. Watch позволяет отслеживать, что находится в переменной. Введите букву i в диалоговом окне Watch и нажмите OK:

Добавьте еще один Watch и введите single_letter. Нажмите ОК. Добавьте третий Watch и введите LetterCount. Вы должны увидеть эти три переменные внизу экрана:

Теперь нажмите значок Step Into на панели инструментов:

Или просто нажмите клавишу F7 на клавиатуре. Продолжайте нажимать F7 и наблюдайте, что происходит в окне Watch.

Вы обнаружите, что переменная i каждый раз увеличивается на 1. Но две остальные переменные остаются прежними:

Поскольку в переменной single_letter ничего нет, то LetterCount не может выходить за пределы нуля. Итак, мы нашли нашу проблему - использование substring является неправильным, так как оно не захватывает символы, указанные в круглых скобках.

Остановите сеанс debugging и измените строку с substring следующим образом:

Теперь снова запустите сеанс debugging. Продолжайте нажимать клавишу F7, чтобы пройти по каждой строке цикла for. На этот раз вы должны увидеть изменения переменных sinle_letter и LetterCount.

Запустите Java-программу, и вы увидите в окне «Вывод»:

Теперь у нас правильный ответ.

То есть, если ваш код работает не так, как планировалось, попробуйте установить точку остановки и несколько Watches для своих переменных. И начните сеанс debugging.

В следующем разделе мы рассмотрим совсем другую тему: как открывать текстовые файлы в Java.

В этом кратком руководстве мы рассмотрим, как отлаживать программы Java с помощью среды разработки Eclipse.

2. Основные Понятия

Eclipse имеет большую поддержку для отладки приложения. Он визуализирует пошаговое выполнение и помогает нам выявлять ошибки.

Чтобы продемонстрировать функции отладки в Eclipse, мы будем использовать пример программы Perfect Square Counter . Эта программа подсчитывает общее количество идеальных квадратов и даже идеальных квадратов под заданным числом:

2.1. Режим отладки

Во-первых, нам нужно запустить программу Java в Eclipse в режиме отладки. Это может быть достигнуто двумя способами:

  • Щелкните правой кнопкой мыши на редакторе и выберите Debug As- > Java-приложение (показано на скриншоте ниже)
  • Отладка программы с панели инструментов (выделено на скриншоте ниже)

Отладка || программы с панели инструментов (выделено на скриншоте ниже)

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

В принципе, есть 3 способа добавить точки останова в программу:

  • Щелкните правой кнопкой мыши на маркерной полосе (вертикальной линейке), соответствующей линии, и выберите Переключить точку останова (показано на скриншоте ниже)
  • Нажмите Ctrl+Shift+B на нужной строке, находясь в редакторе
  • Дважды щелкните на маркерной полосе (вертикальной линейке), соответствующей необходимой линии

2.3. Управление потоком кода

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

Предположим, что отладчик в настоящее время расположен в соответствии с приведенным ниже скриншотом в строке 16:

Наиболее часто используемые параметры отладки:

  • Шаг в (F5) –Эта операция выполняется внутри методов , используемых в текущей строке (если таковые имеются); в противном случае она переходит к следующей строке. В этом примере он будет принимать отладчик внутри метода is Perfect Square()
  • Step Over (F6) –Эта операция обрабатывает текущую строку и переходит к следующей строке. В этом примере это приведет к выполнению метода is Perfect Square() и переходу к следующей строке
  • Шаг возврата (F7) –Эта операция завершает текущий метод и возвращает нас к вызывающему методу. Поскольку в этом случае у нас есть точка останова в цикле, она все еще будет находиться в методе, иначе она вернется к основному методу
  • Resume (F8) –Эта операция будет просто продолжаться до тех пор, пока программа не завершится если мы не достигнем какой-либо дополнительной точки останова

2.4. Перспектива отладки

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

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

Вот некоторые из наиболее полезных представлений, которые это содержит:

  • Представление отладки – Это показывает различные потоки и трассировки стека вызовов
  • Представление переменных – Показывает значения переменных в любой заданной точке. Если нам нужно увидеть статические переменные, нам нужно явно указать, что
  • Точки останова – Это показывает различные точки останова и точки наблюдения (которые мы увидим ниже)
  • Debug Shell – Это позволяет нам писать и оценивать пользовательский код во время отладки (пример будет рассмотрен позже)

3. Методы

В этом разделе мы рассмотрим некоторые важные методы, которые помогут нам освоить отладку в Eclipse.

3.1. Переменные

Мы можем видеть значения переменных во время выполнения в представлении переменных. Чтобы увидеть статические переменные, мы можем выбрать раскрывающийся список Java- > Показать статические переменные .

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

Например, если нам нужно пропустить несколько чисел и непосредственно начать с числа 80, мы можем сделать это, изменив значение переменной number :

3.2. Проверка Значений

Если нам нужно проверить значение выражения или оператора Java, мы можем выбрать конкретное выражение в редакторе, щелкнуть правой кнопкой мыши и проверить, как показано ниже. Удобный ярлык состоит в том, чтобы нажать Ctrl+Shift+I на выражении, чтобы увидеть значение:

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

3.3. Отладочная оболочка

В контексте сеанса отладки мы можем написать и запустить пользовательский код для оценки возможностей. Это делается в отладочной оболочке.

Например, если нам нужно перепроверить правильность функциональности sqrt , мы можем сделать это в отладочной оболочке. В коде Щелкните правой кнопкой мыши- > Проверить , чтобы увидеть значение:

3.4. Условные точки останова

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

  • Щелкните правой кнопкой мыши точку останова и выберите пункт Свойства точки останова
  • В представлении точки останова выберите точку останова и укажите условие

Например, мы можем указать точку останова для приостановки выполнения только в том случае, если число равно 10:

3.5. Точки наблюдения

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

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

В этом примере отладчик останавливает выполнение каждый раз, когда идеальный квадрат является четным числом:

3.6. Триггерные точки

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

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

Например, на скриншоте ниже предполагается, что точка останова в isPerfectSquare() должна попадать на каждую итерацию цикла. Однако мы указали точку останова в методе calculate Count() в качестве триггерной точки вместе с условием.

Таким образом, когда количество итераций достигнет 10, это вызовет остальные точки останова. Следовательно, с этого момента, если точка останова на является идеальным квадратом () , выполнение будет приостановлено:

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

4. Заключение

В этом кратком руководстве мы познакомились с основами и различными методами отладки программ в среде Eclipse IDE.

Как всегда, исходный код, используемый в этом упражнении, доступен на GitHub .

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