PROGRAM7853.PAS

{* Breakpoint - точка остановки *}

(* 07.08.2014 18:32:16 *)
Program PROGRAM7853;
Begin
 writeln('Breakpoint (точка остановки, точка разбиения) - это метка прекращения или приостановления выполнения программы, которая применяется для отладки ПО. Точки остановки также называют просто паузами или точками разбиения.

Breakpoint - точка остановки

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



Условия приостановления программы

Breakpoint - точка остановки

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

ТЗ также могут прервать выполнение программы в определенный момент времени, например по нажатию на клавишу и т. д.



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



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



Варианты реализации аппаратными средствами



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



Варианты реализации программным обеспечением

Breakpoint - точка остановки

Без использования аппаратного обеспечения, отладчики реализовываются программно.

Для того чтобы применить ТЗ достаточно заменить команду в необходимом месте на одну из следующих:

Команда, которая вызывает отладчик направления (например системный вызов (system call));

Неверная команда, намеренно вставлена в место, где необходимо остановить программу (такая, что потом будет обрабатываться отладчиком);



ИЛИ



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

Интерпретированные языки также могут эффективно использовать указанную выше концепцию в своем программном цикле.

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

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

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

Например, некоторые диалекты языка FORTRAN имеют команду AT, которая с самого начала была создана, чтобы служить инструкцией остановки. Python реализует дебаггер доступный из программ на Python. Такими возможностями можно (и порой так делают) злоупотреблять, используя их как аналог команды COMEFROM.
'
);
End.