В разработке программного обеспечения , точки останова является преднамеренной остановки или паузы место в программе , поставить на место для отладки целей. Иногда это также называют просто паузой .
В более общем смысле точка останова - это средство получения информации о программе во время ее выполнения. Во время перерыва , то программист проверяет тестовую среду ( регистры общего назначения , память , журналы, файлы и т.д.) , чтобы выяснить , работает ли программа , как и ожидалось. На практике точка останова состоит из одного или нескольких условий, которые определяют, когда выполнение программы должно быть прервано.
Точки останова были изобретены для ENIAC , одного из первых цифровых компьютеров, программистом Бетти Холбертон . [1] В первоначальной разработке ENIAC поток программы задавался подключением кабелей от одного устройства к другому. Чтобы программа остановилась в определенной точке, был удален кабель, называемый точкой останова . [2]
Точки останова машины [ править ]
Ранние мэйнфрейм-компьютеры, такие как IBM / 360 , имели консольные переключатели / дисковые переключатели, которые позволяли устанавливать точки останова по определенным адресам хранения инструкций и обеспечивали работу «одного цикла», позволяя наблюдать за содержимым регистров и памяти непосредственно на индикаторах консоли. Появление многозадачности ограничило использование этой опции, так как вся машина была остановлена.
Неинтерактивные точки останова [ править ]
Программисты использовали патчи машинного кода для реализации отдельных деструктивных точек останова, чтобы вызвать дамп памяти с первых дней компьютеров. Дамп ядра предоставил состояние регистров и памяти в точный момент умышленного «краха».
Интерактивные точки останова [ править ]
Появление консолей телетайпа в 1960-х годах позволило расширить возможности интерактивной отладки из командной строки , но только в начале 1970-х и появлении повсеместных видеомониторов, подключенных к мэйнфреймам , полностью интерактивная полноэкранная отладка в многозадачных средах стала реальностью. Это также позволило пошаговое выполнение программы в режиме настоящей программной анимации с одновременным отображением необязательных изменений регистра и памяти. Первоначально этот тип анимации был на уровне дизассемблированного или декомпилированного машинного кода, но позже был расширен до анимации на уровне исходного кода HLL .
Условия точки останова [ править ]
Точки останова обычно используются для прерывания выполняющейся программы непосредственно перед выполнением указанной программистом инструкции . Это часто называют точкой останова инструкции .
Также могут использоваться другие виды условий, такие как чтение, запись или изменение определенного места в области памяти. Это часто называют условной точкой останова , точкой останова по данным или точкой наблюдения . С другой стороны, неразрывные точки останова , иногда называемые точками журнала , могут отображать полное состояние фрагмента кода в точке останова без остановки его выполнения.
Точки останова также можно использовать для прерывания выполнения в определенное время, при нажатии клавиши и т. Д.
Инструменты проверки [ править ]
Когда достигается точка останова, используются различные инструменты для проверки состояния программы или его изменения. Трассировка стека каждого потока может использоваться для просмотра цепочки вызовов функций, которые привели к приостановленной инструкции. Список часов позволяет просматривать значения выбранных переменных и выражений . Также могут быть инструменты для отображения содержимого регистров , загруженных программных модулей и другой информации.
Реализации [ править ]
Оборудование [ править ]
Многие процессоры включают аппаратную поддержку точек останова (обычно точки останова для инструкций и данных). Например, архитектура набора команд x86 обеспечивает аппаратную поддержку точек останова с помощью регистров отладки x86 . Такое оборудование может включать в себя ограничения, например, запрет на создание точек останова на командах, расположенных в слотах задержки перехода . Такое ограничение накладывается микроархитектурой процессора и варьируется от процессора к процессору.
Программное обеспечение [ править ]
Без поддержки оборудования (и в многозадачных средах) отладчики должны реализовывать точки останова в программном обеспечении. Для точек останова инструкций это сравнительно простая задача замены инструкции в местоположении точки останова на:
- инструкция, которая вызывает отладчик напрямую (например, системный вызов ) или
- недопустимая инструкция, которая вызывает преднамеренное прерывание программы (которое затем перехватывается / обрабатывается отладчиком)
Этот метод может быть труднее реализовать в многозадачных системах, использующих совместно используемое хранилище программ (прерывание может произойти в другом потоке, требуя восстановления исходной инструкции для этого потока). Кроме того, если программа находится в защищенной памяти, перезапись инструкций может быть предотвращена.
В качестве альтернативы,
- набор инструкций Тренажер может реализовать безусловные или условные точки останова, просто встраивая соответствующие условия испытаний в рамках своего собственного нормального цикла программы - это также естественно , позволяет неинвазивные контрольные точки (на только чтение программ, например).
- Интерпретируемые языки могут эффективно использовать в своем программном цикле ту же концепцию, что и выше.
- Еще один распространенный подход - «оснащение» всего исходного кода дополнительными операторами исходного кода, которые запускают функцию , вызывающую внутреннюю или внешнюю подпрограмму отладки. Этот метод увеличивает двоичный размер и может отрицательно повлиять на нормальное выделение памяти и обработчики исключений . В некоторых компиляторах есть опции «отладки» для полупрозрачной реализации этой техники.
Некоторые отладчики позволяют изменять регистры или программные переменные в памяти перед возобновлением работы, что позволяет вводить временные присвоения «вручную» для целей тестирования. Точно так же программные инструкции часто можно пропустить, чтобы определить влияние изменений в логике программы, что позволяет получить прямой ответ на вопросы о выполнении программы (т. Е. Без предположений или догадок). Во многих случаях это может быть единственный практический метод тестирования скрытых подпрограмм обработки ошибок, «управляемых событиями», которые редко, если вообще когда-либо, выполняются - без дополнительного риска оставить временные изменения источника. Изменение места возобновления вручную в приостановленной программе можно использовать для ввода редко выполняемого раздела кода (например, определенного обработчика состояния оборудования).
Однако реализация точек останова по данным в программном обеспечении может значительно снизить производительность отлаживаемого приложения, поскольку оно использует дополнительные ресурсы на том же процессоре. [3] Однако это обычно приемлемо во время тестирования, и объем информации, доступной от отладчика, не ограничен ограничениями данных отладки, известных аппаратному обеспечению. Например, программная реализация может собирать данные логического пути на уровне программы / подпрограммы / инструкции, чтобы значительно расширить то, что может храниться на конкретной аппаратной платформе для проверки. Метод имитации набора команд значительно снижает накладные расходы по сравнению с методом (повторной) замены инструкций, а также снижает количество промахов в кэше .
Некоторые реализации языков программирования предоставляют свои функции отладки для использования другими программами. Например, в некоторых диалектах FORTRAN есть AT
инструкция, которая изначально предназначалась для работы в качестве точки останова инструкции.
Python реализует отладчик, доступный из программы Python. [4]
Этими средствами можно [5] злоупотреблять, чтобы действовать как оператор COMEFROM .
См. Также [ править ]
- РОДОМ ИЗ
- Программная анимация (степпинг)
- Симмон
Ссылки [ править ]
- ^ Аббат, Janet (2012), перекодирования Пол: Изменение участия женщин в области вычислительной техники , MIT Press, стр. 32, ISBN 9780262018067
- ↑ Томас Хей; Марк Пристли; Криспен Веревка (2016). ENIAC в действии: создание и переделка современного компьютера . MIT Press. п. 153. ISBN. 978-0-262-03398-5.
- ^ GDB Внутренности архивации 29 ноября 2011, в Wayback Machine
- ^ Python библиотека Ссылка: Python Debugger архивации 13 сентября 2008, в Wayback Machine
- ^ entrian.com - goto и comefrom для Python