- •Раздел 3 Программирование
- •1 Структура программы на языке Pascal
- •2 Операторы языка Pascal
- •2.1 Оператор присваивания
- •2.2 Операторы ввода данных
- •2.3 Операторы вывода данных
- •3 Стандартные функции Pascal
- •3.1 Примеры составления линейной программы
- •4 Контрольные вопросы
- •5 Задание
- •Содержание отчета
- •1 Условный оператор if
- •2 Оператор варианта case
- •3 Контрольные вопросы
- •4 Задание
- •4.1 Задание по условному оператору
- •4.2 Задание по оператору варианта
- •5 Содержание отчета
- •1 Оператор цикла с постусловием
- •2 Оператор цикла с предусловием
- •3 Оператор цикла с параметром
- •4 Контрольные вопросы
- •5 Задание
- •6 Содержание отчета
- •1 Итерационные циклы
- •2 Программа итерационного цикла
- •3 Контрольные вопросы
- •4 Задание
- •5 Содержание отчета
- •1 Краткая теория
- •1 Программа "цикл в цикле"
- •2 Программа "цикл и ветвление"
- •3 Программа "цикл в цикле и ветвление"
- •4 Контрольные вопросы
- •5 Задания
- •6 Содержание отчета
- •1 Одномерные и многомерные массивы
- •2 Обработка массивов
- •3 Контрольные вопросы
- •4 Задания
- •5 Содержание отчета
- •1 Описание функций
- •2 Параметры функции
- •2.1 Параметры-значения
- •2.2 Параметры-переменные
- •3 Контрольные вопросы
- •4 Задание
- •5 Содержание отчета
- •1 Формат описания процедуры
- •2 Параметры процедуры
- •3 Контрольные вопросы
- •4 Задание
- •5 Содержание отчета
- •1 Средства и методы отладки программ
- •1.1 Понятие отладки
- •1.2 Разновидности ошибок
- •1.2.1 Ошибки этапа компиляции
- •1.2.2 Ошибки этапа выполнения
- •1.2.3 Логические ошибки
- •2 Выполнение программы по шагам и трассировка
- •2.1 Выполнение по шагам и трассировка
- •2.2 Остановка выполнения
- •2.3 Отслеживание и модификация
- •2.4 Понятие отладочного шага
- •2.5 Выполнение программы по шагам
- •2.6 Трассировка программы
- •2.7 Выполнение больших фрагментов
- •3 Отладочные выражения, точки останова
- •3.1 Понятие отладочного выражения
- •3.2 Просмотр выражений
- •3.2.1 Добавление просматриваемого выражения
- •3.2.2 Редактирование просматриваемых выражений
- •3.3 Вычисление и модификация
- •3.3.1 Вычисление выражений
- •3.3.2 Модификация переменных
- •3.4 Использование точек останова
- •3.5 Задание точек останова
- •3.6 Отмена точки останова
- •3.7 Модификация точек останова
- •3.8 Создание условной точки останова
- •5.2 Установка точек останова
- •6 Содержание отчета
2 Выполнение программы по шагам и трассировка
Методы отладки
Иногда, когда программа делает что-то непредвиденное, причина достаточно очевидна, и можно быстро исправить код программы. Но другие ошибки более трудноуловимы и вызываются взаимодействие различных частей программы. В этих случаях лучше всего остановить программу в заданной точке, пройти ее шаг за шагом и просмотреть состояние переменных и выражений. Такое управляемое выполнение - ключевой элемент отладки.
171
2.1 Выполнение по шагам и трассировка
Команды выполнения по шагам Step Over и трассировки Trace Into меню Run дают возможность построчного выполнения программы. Единственное отличие выполнения по шагам и трассировки состоит в том, как они работают с вызовами процедур и функций.
Выполнение по шагам вызова процедуры или функции интерпретирует вызов как простой оператор и после завершения подпрограммы возвращает управление на следующую строку. Трассировка подпрограммы загружает код этой подпрограммы и продолжает ее построчное выполнение.
2.2 Остановка выполнения
Существует два способа сообщить IDE, что программу нужно выполнить до определенной точки, а затем остановить.
Первый способ состоит в том, чтобы найти позицию в программе, где необходимо остановиться, затем выбрать в меню Run команду Go to Cursor (Выполнение до позиции курсора). Программа выполняется как обычно, пока не достигнет оператора, где она должна остановиться. В этой точке можно проверить значения и продолжать выполнение непрерывно или по шагам.
Второй способ состоит в том, чтобы остановить в определенной заданной точке программу. Эта точка называется точкой останова. Во время выполнения программы, она останавливается перед выполнением оператора в точке останова. В программе можно установить несколько точек останова.
2.3 Отслеживание и модификация
Для наблюдения за выводом программы встроенный отладчик имеет средства для просмотра значений переменных, выражений и структур данных. С помощью команды Watches в меню Debug в окне просмотра Watches можно добавлять или удалять отслеживаемые элементы. В этом диалоговом окне можно проверять переменные и выражения и изменять значения любых переменных, включая строки, указатели, элементы массива и поля записей, что позволяет проверить реакцию программы на различные условия.
2.4 Понятие отладочного шага
При отладке программы, наименьшим выполняемым элементом является строка. Поэтому, если на одной строке программы содержится несколько операторов Паскаля, нельзя отладить эти операторы индивидуально. Следовательно, нужно разбить оператор на несколько строк, которые будут выполняться за один шаг.
Строка выполнения выводится цветом, отличным от нормального цвета. Благодаря этому можно видеть, в каком месте программы идет проверка.
172
2.5 Выполнение программы по шагам
Это простейший способ выполнения программы по элементарным
фрагментам. Выбор команды Run|Step Over или нажатие клавиши F8 вызывает выполнение отладчиком всего кода в операторе, указанном строкой выполнения, включая любые вызываемые на ней процедуры или функции, пока управление не вернется обратно к программисту. После этого строка выполнения указывает следующий выполняемый оператор.
Возьмем следующий пример программы:
program StepTest;
function Negate(X: Integer): Integer;
begin
Negate := -X;
end;
var
I: Integer;
begin
for I := 1 to 10 do Writeln(Negate(I));
end.
Пример 1 Простая программа, выполняемая по шагам.
Если нажать клавишу F8, то строка выполнения перемещается на оператор begin в начале основного цикла, поскольку это первое, что выполняется в программе. Второе нажатие клавиши F8 выполняет begin и перемещает строку выполнения вниз до оператора for на следующей строке. После этого нажатие F8 вызывает выполнение всего цикла for; на экран пользователя выводятся числа от -1 до -10, а строка выполнения перемещается к end.
Хотя функция Negate вызывается 10 раз, строка выполнения никогда на нее не перемещается. Выполнение по шагам позволяет отладчику не показывать детали любых вызовов для отдельной строки.
Выполнение по шагам вызывает выполнение всего цикла for сразу, поэтому невозможно видеть изменения в ходе выполнения цикла.
Если необходимо видеть подробности цикла, то в пример нужно внести следующее простое изменение:
begin
for I := 1 to 10 do
Writeln(Negate(I));
end.
173
Пример 2 Изменение формата кода для лучшего выполнения
по шагам.
Если теперь нажимать клавишу F8, то строка выполнения будет при выполнении цикла 10 раз возвращаться на Writeln.