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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Реализации

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

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

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

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

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

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

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

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

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

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

Некоторые реализации языка программирования разоблачать их функции отладки для использования другими программами. например, некоторые FORTRAN диалекты имеют В оператор, который изначально предназначался для работы в качестве точки останова инструкции.Python реализует отладчик, доступный из программы Python.[4]Эти объекты могут быть и есть[5] злоупотребляли, чтобы действовать как РОДОМ ИЗ утверждение.

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

Рекомендации

  1. ^ Аббат, Джанет (2012), Перекодирование пола: меняющееся участие женщин в вычислительной технике, MIT Press, стр. 32, ISBN  9780262018067
  2. ^ Томас Хей; Марк Пристли; Криспен Веревка (2016). ENIAC в действии: создание и переделка современного компьютера. MIT Press. п. 153. ISBN  978-0-262-03398-5.
  3. ^ Внутреннее устройство GDB В архиве 29 ноября 2011 г. Wayback Machine
  4. ^ Справочник по библиотеке Python: отладчик Python В архиве 13 сентября 2008 г. Wayback Machine
  5. ^ entrian.com - goto и comefrom для Python