Jump to content

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

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

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

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

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

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

[ редактировать ]

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

[ редактировать ]

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

Логпоинты

[ редактировать ]

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

Реализации

[ редактировать ]

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

[ редактировать ]

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

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

[ редактировать ]

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

  • инструкция, которая вызывает отладчик напрямую (например, системный вызов или int3 в случае 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
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9432a6b4cf61142df5eb130c0ab33e31__1699409520
URL1:https://arc.ask3.ru/arc/aa/94/31/9432a6b4cf61142df5eb130c0ab33e31.html
Заголовок, (Title) документа по адресу, URL1:
Breakpoint - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)