stringtranslate.com

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

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

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

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

История

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

Типы точек останова

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

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

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

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

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

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

Условные точки останова

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

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

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

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

Точки логирования

Точка журнала — это тип точки останова, которая только печатает (или «регистрирует» ) информацию, а не прерывает выполнение. Обычно разработчик может указать сообщение и/или значения переменных для печати, когда выполнение достигает определенной точки. [4] Точки журнала — это альтернатива помещению операторов журналирования в отлаживаемую программу (иногда называемую отладкой printf ), и они особенно полезны, когда изменение программы нецелесообразно (например, при отладке внешней библиотеки, вызываемой программой).

Реализации

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

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

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

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

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

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

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

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

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

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

Ссылки

  1. ^ Эббейт, Джанет (2012), Перекодирование пола: меняющееся участие женщин в вычислительной технике , MIT Press, стр. 32, ISBN 9780262018067
  2. ^ Томас Хейг; Марк Пристли; Криспен Роуп (2016). ENIAC в действии: Создание и переделка современного компьютера . MIT Press. стр. 153. ISBN 978-0-262-03398-5.
  3. ^ "FAQ Как установить условную точку останова?". Eclipse Wiki . Получено 2023-04-19 .
  4. ^ Уолш, Дэвид (22.03.2021). «Используйте точки журнала!». Блог Дэвида Уолша . Получено 19.04.2023 .
  5. Внутреннее устройство GDB. Архивировано 29 ноября 2011 г. на Wayback Machine.
  6. Справочник по библиотеке Python: отладчик Python. Архивировано 13 сентября 2008 г. на Wayback Machine.
  7. ^ entrian.com – goto и comefrom для Python