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

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

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

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

Точки останова машины [ править ]

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

Неинтерактивные точки останова [ править ]

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

Интерактивные точки останова [ править ]

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

Условия точки останова [ править ]

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

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

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

Инструменты проверки [ править ]

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

Реализации [ править ]

Оборудование [ править ]

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

Программное обеспечение [ править ]

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

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

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

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

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

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

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

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

См. Также [ править ]

  • РОДОМ ИЗ
  • Программная анимация (степпинг)
  • Симмон

Ссылки [ править ]

  1. ^ Аббат, Janet (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 Debugger архивации 13 сентября 2008, в Wayback Machine
  5. ^ entrian.com - goto и comefrom для Python