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 в действии: создание и переделка современного компьютера . МТИ Пресс. п. 153. ИСБН 978-0-262-03398-5.
  3. ^ «Часто задаваемые вопросы Как установить условную точку останова?». Затмение вики . Проверено 19 апреля 2023 г.
  4. ^ Уолш, Дэвид (22 марта 2021 г.). «Используйте логпоинты!». Блог Дэвида Уолша . Проверено 19 апреля 2023 г.
  5. Внутренние данные GDB. Архивировано 29 ноября 2011 г., в Wayback Machine.
  6. ^ Справочник по библиотеке Python: Отладчик Python. Архивировано 13 сентября 2008 г. на Wayback Machine.
  7. ^ entrian.com – goto и comfrom для Python