Skip to content

Трассировка программ

Yuriy Syrovetskiy edited this page Dec 26, 2017 · 1 revision

Трассировка программы — это получение информации о трассе выполнения программы.

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

Итак:

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

В зависимости от входных данных, то есть от тех данных, которые получает исполнитель программы на вход (считывая их из пользовательского ввода, из файла, из сетевого соединения или откуда-то ещё), могут получаться разные трассы выполнения программы.

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

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

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

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

Для того, чтобы произвести трассировку программы "вручную", необходимо воспроизвести работу исполнителя программы. Для этого удобно предварительно составить блок-схему программы, а затем, в соответствии с ней, произвести вычисления, записывая каждое фактическое вычисление с фактическими данными и состояние памяти программы после него.

Clone this wiki locally