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

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

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

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

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

Содержание
  • 1 Точки останова на компьютере
  • 2 Неинтерактивные точки останова
  • 3 Интерактивные точки останова
  • 4 Условия точки останова
  • 5 Инструменты проверки
  • 6 Реализации
    • 6.1 Аппаратное обеспечение
    • 6.2 Программное обеспечение
  • 7 См. Также
  • 8 Ссылки
Контрольные точки машины

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

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

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

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

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

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

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

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

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

Инструменты проверки

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

Реализации

Аппаратное обеспечение

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

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

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

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

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

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

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

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

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

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

См. Также
Ссылки
Последняя правка сделана 2021-05-13 10:38:57
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте