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

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