5. Компиляция,выполнение и отладка программы
.doc
КОМПИЛЯЦИЯ, ВЫПОЛНЕНИЕ И ОТЛАДКА ПРОГРАММЫ
I. Компиляция программы
Компилятор переводит программу с языка Паскаль на язык машинных команд. При этом проверяется соответствие программы правилам языка программирования (синтаксический и семантический контроль).
Программа, полученная в результате компиляции, может быть сохранена на диске в файле с именем:
<имя файла>.ехе
Такие файлы могут исполняться вне среды Турбо Паскаль. Работа компилятора инициируется системной командой Compile.
Для компиляции программы, находящейся в активном окне редактора, нужно нажать сочетание клавиш Alt + F9 или в меню выбрать пункты Compile, Compile.
Во время компиляции на экране появляется окно с информацией. Если среда не обнаружит ошибок, то выводится сообщение:
Compilation successfull: press any key (компиляция прошла успешно: нажмите любую клавишу).
Если компилятор обнаружит ошибку, среда восстанавливает окно редактора, устанавливает курсор на место ошибки и выдает сообщение о ней. Нужно сделать исправление программы и снова запустить ее на компиляцию. Созданный exe-файл остается в оперативной памяти. При выходе из среды программирования Турбо Паскаль он стирается. Чтобы сохранить exe-файл на диске, нужно выбрать в меню пункты Compile, Make или нажать клавишу F9. Файл с тем же именем, что и в окне редактора, но с расширением exe, появится в том же каталоге, что и исходный pas-файл.
II. Выполнение программы
Запустить программу на исполнение можно двумя способами:
-
В меню выбрать пункты Run, Run
-
Нажать комбинацию клавиш Ctrl + F9.
При этом файл из активного окна редактора будет откомпилирован, скомпонован с другими файлами, помещен в оперативную память и запущен на исполнение. Исполнение программы остается под контролем Турбо-системы. В частности, Турбо-система помогает обнаружить ошибку в программе, если при исполнении произошел сбой. Пользователю сообщается причина сбоя и указывается место, где он случился в Паскаль-программе. Происходит автоматический возврат в режим редактирования. При повторном запуске программы сразу начнется ее исполнение.
Результаты выполнения программы помещаются в специальное окно, которое называется окном вывода результатов и имеет черный цвет. При выполнении программы это окно появляется на экране и тут же исчезает. Чтобы установить его на экране, нужно нажать комбинацию клавиш Alt + F5, или выбрать в меню пункты Debug, User screen, или в меню выбрать пункты меню Debug, Output (при этом на экране одновременно будут находиться окно редактора и окно вывода результатов).
При зацикливании программы нужно нажать сочетание клавиш Ctrl + Pause.
III. Отладка программы
До окончательного рабочего состояния программа доводится в процессе отладки. В старших версиях Турбо Паскаля имеется система отладки (Debug). С ее помощью можно просмотреть на экране значение любой переменной, найти значение любого выражения, установить новое значение переменной. Можно прервать выполнение программы в указанных местах, которые называются контрольными точками. Система отладки существенно облегчает программисту поиск ошибок.
Ошибки могут быть «языковые» (синтаксические), могут быть алгоритмические.
Первый тип ошибок, как правило, помогает обнаружить компилятор с Паскаля. Это ошибки, связанные с нарушением правил языка программирования. Их еще называют ошибками времени компиляции, ибо обнаруживаются они именно во время компиляции. Сам компилятор в той или иной форме выдает пользователю сообщение о характере ошибки и ее месте в тексте программы. Исправив очередную ошибку, пользователь повторяет компиляцию. И так продолжается до тех пор, пока не будут ликвидированы все ошибки этого уровня.
Алгоритмические ошибки приводят к различным последствиям. Во-первых, могут возникнуть невыполнимые действия. Например, деление на нуль, корень квадратный из отрицательного числа, выход индекса за границы строки и т. п. Это ошибки времени исполнения. Они приводят к прерыванию выполнения программы. Как правило, имеются системные программные средства, помогающие в поиске таких ошибок.
Другая ситуация, когда алгоритмические ошибки не приводят к прерыванию выполнения программы. Программа выполняется до конца, получаются какие-то результаты, но они не являются верными. Такие ошибки называют логическими.
Для окончательной отладки алгоритма и анализа его правильности производится тестирование. Тест — это такой вариант решения задачи, для которого заранее известны результаты. Как правило, один тестовый вариант не доказывает правильность программы. Программист должен придумать систему тестов, построить план тестирования для исчерпывающего испытания всей программы.
Качественная программа ни в каком варианте не должна завершаться аварийно. Тесты программы должны продемонстрировать, что при правильном вводе исходных данных будут всегда получаться верные результаты, а при наличии ошибок (синтаксических, семантических, выхода за диапазон) будут получены соответствующие сообщения.
Успешное прохождение всех тестов есть необходимое условие правильности программы. При этом оно необязательно является достаточным. Чем сложнее программа, тем труднее построить исчерпывающий план тестирования. Опыт показывает, что даже в «фирменных» программах в процессе эксплуатации обнаруживаются ошибки. Поэтому проблема тестирования программы — очень важная и одновременно очень сложная проблема.
Для нахождения ошибок часто используют пошаговое исполнение программы. Для этого используются клавиша F8 или пункт меню Run, Step Over. При этом подсвеченная полоса устанавливается на первую исполняемую строку программы. Каждое новое нажатие клавиши F8 будет вызывать исполнение всех операторов данной строки, и строка выделения смещается на следующую строку программы.
Аналогичные действия вызывают нажатие клавиши F7 иливыбор пунктов меню Run, Trace Into. Но эти действия называются трассировкой программы. Отличие трассировки от пошагового исполнения в том, что когда в программе встречается подпрограмма (процедура или функция), то при трассировке они выполняются по порядку, а при пошаговом выполнении пользователь видит только результат работы процедуры или функции и не знает, что происходит внутри.
При трассировке и при пошаговом выполнении программы можно просмотреть значения переменных в окне отслеживания. Для этого существуют режимы Watch и Evaluate/Modify в пункте меню Debug.
После выбора режима Watch в нижней части экрана открывается окно Watches зеленого цвета:
В меню в пункте Debug есть режим Add Watch, в котором есть поле ввода и три кнопки:
В поле ввода вводится одна или несколько переменных, значения которых надо отследить. Это окно убирается клавишей Esc. Остается окно Watches, в котором указаны имена переменных и, через двоеточие, их значения. Используя пошаговое исполнение программы можно видеть, как меняются значения этих переменных. Если нужно добавить еще одну переменную в окно Watch, то, не выходя из редактора, нужно нажать комбинацию клавиш Ctrl + F7. Опять появится окно Add Watch, в которое добавляется имя новой переменной. Если окно Watch активно, из его списка можно удалить имя переменной. Для этого выбирается переменная с помощью клавиш управления курсором и нажимается клавиша Delete.
Окно Watch убирается и восстанавливается с помощью клавиши F6.
Для изменения значений некоторых переменных выбирается режим Evaluate/Modify в пункте меню Debug (или нажатием клавиш Ctrl + F4). Открывается диалоговое окно:
В первое поле Expression (выражение) вводится имя переменной. В поле Result (результат) появляется ее значение. Переменной можно присвоить новое значение, введя его с клавиатуры в поле New.
Кнопка Evaluate служит для вычисления выражения в поле ввода, кнопка Modify изменяет значение. Для закрытия окна служит кнопка Esc.
Иногда требуется просмотреть не всю программу, а только ее часть. Это можно сделать двумя способами:
-
Установить курсор на строку, до которой программа должна выполниться, затем выбрать пункт меню Run, Goto Cursor (или нажать клавишу F4). Эта строка называется строкой останова. Программа выполнится до этой строки и остановится. Теперь пользователь может просмотреть часть программы при помощи пошагового исполнения или трассировки программы.
-
Можно установить в некоторой строке (или нескольких строках) точку останова. Тогда выполнение программы будет остановлено в этой строке. Это можно сделать, нажав комбинацию клавиш Ctrl + F8 (эта же комбинация удаляет текущую точку останова). Строка, в которой установлена точка останова, выделится красным цветом. Точки останова можно просматривать в режиме Debug, Breakpoints.