Точка останова - Breakpoint

Интерфейс отладки Eclipse с программой, приостановленной в точке останова. Видны панели с трассировкой стека (вверху слева) и наблюдаемыми переменными (вверху справа).

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

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

Точки останова были изобретены для ENIAC , одного из первых цифровых компьютеров, программистом Бетти Холбертон . В первоначальной конструкции ENIAC поток программы задавался подключением кабелей от одного устройства к другому. Чтобы программа остановилась в определенной точке, был удален кабель, называемый точкой останова .

Точки останова машины

Ранние мэйнфрейм-компьютеры, такие как IBM / 360 , имели консольные переключатели / циферблаты, которые позволяли устанавливать точки останова по определенным адресам хранения инструкций и обеспечивали операцию «одного цикла», позволяющую наблюдать за содержимым регистров и памяти непосредственно на индикаторах консоли. Появление многозадачности ограничило использование этой опции, так как вся машина была остановлена.

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

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

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

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

Условия точки останова

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

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

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

Инструменты для осмотра

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

Реализации

Оборудование

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

Программное обеспечение

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

  • инструкция, которая вызывает отладчик напрямую (например, системный вызов ) или
  • недопустимая инструкция, которая вызывает преднамеренное прерывание программы (которое затем перехватывается / обрабатывается отладчиком)

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

В качестве альтернативы,

  • набор инструкций Тренажер может реализовать безусловные или условные точки останова, просто встраивая соответствующие условия испытаний в рамках своего собственного нормального цикла программы - это также естественно , позволяет неинвазивные контрольные точки (на только чтение программ, например).
  • Интерпретируемые языки могут эффективно использовать ту же концепцию, что и выше, в своем программном цикле.
  • Еще один распространенный подход - «оснащение» всего исходного кода дополнительными операторами исходного кода, которые запускают функцию , вызывающую внутреннюю или внешнюю подпрограмму отладки. Этот метод увеличивает двоичный размер и может отрицательно повлиять на нормальное выделение памяти и обработчики исключений . В некоторых компиляторах есть опции «отладки» для полупрозрачной реализации этой техники.

Некоторые отладчики позволяют изменять регистры или программные переменные в памяти перед возобновлением работы, что позволяет эффективно вводить «вручную закодированные» временные назначения для целей тестирования. Точно так же программные инструкции часто можно пропустить, чтобы определить влияние изменений на логику программы, что позволяет получить прямой ответ на вопросы о выполнении программы (т. Е. Без предположений или догадок). Во многих случаях это может быть единственный практический метод тестирования неясных подпрограмм обработки ошибок, «управляемых событиями», которые редко, если вообще когда-либо, выполняются - без дополнительного риска оставить временные изменения источника. Изменение места возобновления вручную в приостановленной программе можно использовать для ввода редко выполняемого в других случаях раздела кода (например, определенного обработчика состояния оборудования).

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

Некоторые реализации языков программирования предоставляют свои функции отладки для использования другими программами. Например, в некоторых диалектах FORTRAN есть ATинструкция, которая изначально предназначалась для работы в качестве точки останова инструкции. Python реализует отладчик, доступный из программы Python. Эти средства могут использоваться и используются для того, чтобы действовать как оператор COMEFROM .

Смотрите также

Ссылки