Введение

Метод отладки, используемый в разработке программного обеспечения

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

История

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

Пункты остановки машины

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

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

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

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

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

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

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

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

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

Запись

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

Оборудование

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