Отладка программы Успешное завершение процесса компиляции не означает, что в программе нет ошибок. Убедиться, что программа работает правильно можно только в процессе проверки ее работоспособности, который называется тестирование. Обычно программа редко сразу начинает работать так, как надо, или работает правильно только на некотором ограниченном наборе исходных данных. Это свидетельствует о том, что в программе есть алгоритмические ошибки.
Процесс поиска и устранение ошибок называется отладкой. Классификация ошибок Ошибки, которые могут быть в программе, принято делить на три группы: -синтаксические; -ошибки времени выполнения; -алгоритмические. Синтаксические ошибки, их также называют ошибками времени компиляции (Compile-time error), наиболее легко устранимы. Их обнаруживает компилятор, а программисту остается только внести изменения в текст программы и выполнить
повторную компиляцию. Ошибки времени выполнения, в Delphi они называются исключениями (exception), тоже, как правило, легко устранимы. Они обычно проявляются уже при первых запусках программы и во время тестирования. При возникновении ошибки в программе, запущенной из Delphi, среда разработки прерывает работу программы, о чем свидетельствует заключенное в скобки слово
Stopped в заголовке главного окна Delphi, и на экране появляется диалоговое окно, которое содержит сообщение об ошибке и информацию о типе (классе) ошибки. На рис. 13.1 приведен пример сообщения об ошибке, возникающей при попытке открыть несуществующий файл. После возникновения ошибки программист может либо прервать выполнение программы, для этого надо из меню Run выбрать команду Program Reset, либо продолжить ее выполнение, например, по шагам (для этого
из меню Run надо выбрать команду Step), наблюдая результат выполнения каждой инструкции. Если программа запущена из Windows, то при возникновении ошибки на экране также появляется сообщение об ошибке, но тип ошибки (исключения) в сообщении не указывается (рис. 13.2). После щелчка на кнопке ОК программа, в которой проявилась ошибка, продолжает (если сможет) работу. С алгоритмическими ошибками дело обстоит иначе. Компиляция программы, в которой есть алгоритмическая
ошибка, завершается успешно. При пробных запусках программа ведет себя нормально, однако при анализе результата выясняется, что он неверный. Для того чтобы устранить алгоритмическую ошибку," приходится анализировать алгоритм, вручную "прокручивать" его выполнение. Предотвращение и обработка ошибок Как было сказано выше, в программе во время ее работы могут возникать ошибки, причиной которых, как правило, являются действия пользователя.
Например, пользователь может ввести неверные данные или, что бывает довольно часто, удалить нужный программе файл. Нарушение в работе программы называется исключением. Обработку исключений (ошибок) берет на себя автоматически добавляемый в выполняемую программу код, который обеспечивает, в том числе, вывод информационного сообщения. Вместе с тем Delphi дает возможность программе самой выполнить обработку исключения.
Инструкция обработки исключения в общем виде выглядит так: try // здесь инструкции, выполнение которых может вызвать исключение except // начало секции обработки исключений on ТипИсключения1 do Обработка1; on ТипИсключения2 do Обработка2; on ТипИсключенияJ do ОбработкаJ; else // здесь инструкции обработки остальных исключений end; где: try — ключевое слово, обозначающее, что далее следуют инструкции, при выполнении которых возможно
возникновение исключений, и что обработку этих исключений берет на себя программа; except — ключевое слово, обозначающее начало секции обработки исключений. Инструкции этой секции будут выполнены, если в программе возникнет ошибка; on — ключевое слово, за которым следует тип исключения, обработку которого выполняет инструкция, следующая за do; else — ключевое слово, за которым следуют инструкции, обеспечивающие обработку исключений, тип которых не указаны в
секции except. Как было сказано выше, основной характеристикой исключения является его тип. В таблице 13.1 перечислены наиболее часто возникающие исключения и указаны причины, которые могут привести к их возникновению. Тип исключения Возникает EZeroDivide При выполнении операции деления, если делитель равен нулю EConvertError При выполнении преобразования, если преобразуемая величина не может быть приведена к требуемому
виду. Наиболее часто возникает при преобразовании строки символов в число Тип исключения Возникает EFilerError При обращении к файлу. Наиболее частой причиной является отсутствие требуемого файла или, в случае использования сменного диска, отсутствие диска в накопителе Следующая программа, вид диалогового окна которой приведен на рис. 13.3, а текст— в листинге 13.1, демонстрирует обработку исключений при помощи инструкции try.
Листинг 1. Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Editl: TEdit; // напряжение
Edit2: TEdit; // сопротивление Label5: TLabel; // результат расчета - ток Button1: TButton; //кнопка Вычислить procedure ButtonlClick(Sender: TObject); private { Private declarations ) public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var u: real; // напряжение r: real; // сопротивление
i: real; // ток begin Labels.Caption := ' '; try // инструкции, которые могут вызвать исключение (ошибку) u := StrToFloat(Edit1.Text); r := StrToFloat(Edit2.Text); i := u/r; except // секция обработки исключений onEZeroDivide do // деление на ноль begin ShowMessage('Сопротивление не может быть равно нулю ); exit; end; on EConvertError do // ошибка преобразования строки в число begin ShowMessage('Напряжение и сопротивление должны быть ' + 'заданы числом +#13+ 'При записи дробного числа
используйте запятую ; exit; end; end; Label5.Caption := FloatToStr(i) + ' A'; end; end. В приведенной программе исключения могут возникнуть при вычислении величины тока. Если пользователь задаст, что сопротивление равно нулю, то при выполнении инструкции i:=u/r возникает Исключение EZeroDivide. Если неверно будет введено числовое значение, например, для разделения целой и дробной частей числа вместо запятой будет использована точка, то возникнет исключение типа
EConvertError. Оба исключения обрабатываются одинаково: выводится сообщение, после чего процедура обработки события Onclick завершает свою работу. Отладчик Интегрированная среда разработки Delphi предоставляет программисту мощное средство поиска и устранения ошибок в программе — отладчик. Отладчик позволяет выполнять трассировку программы, наблюдать значения переменных, контролировать выводимые программой данные. Трассировка программы Во время работы программы ее инструкции выполняются одна за
другой со скоростью работы процессора компьютера. При этом программист не может определить, какая инструкция выполняется в данный момент, и, следовательно, определить, соответствует ли реальный порядок выполнения инструкций разработанному им алгоритму. В случае неправильной работы программы необходимо видеть реальный порядок выполнения инструкций. Это можно сделать, выполнив трассировку программы. Трассировка — это процесс выполнения программы по шагам (step-by-step), инструкция за инструкцией.
Во время трассировки программист дает команду: выполнить очередную инструкцию программы. Delphi обеспечивает два режима трассировки: без захода в процедуру (Step over) и с заходом в процедуру (Trace into). Режим трассировки без захода в процедуру выполняет трассировку только главной процедуры, при этом трассировка подпрограмм не выполняется, вся подпрограмма выполняется за один шаг. В режиме трассировки с заходом в процедуру выполняется трассировка всей программы, т. е. по шагам выполняется
не только главная программа, но и все подпрограммы. Для того чтобы начать трассировку, необходимо из меню Run выбрать команду Step over или Trace into. В результате в окне редактора кода будет выделена первая инструкция программы. Для того чтобы выполнить выделенную инструкцию, необходимо из меню Run выбрать команду Step over (нажать клавишу <F8>) или
Trace into (нажать клавишу <F7>). После выполнения инструкции будет выделена следующая. Таким образом, выбирая нужную команду из меню Run, можно выполнить трассировку программы. Активизировать и выполнить трассировку можно при помощи функциональной клавиатуры. Команде Step over соответствует клавиша <F8>, а команде Trace into — клавиша <F7>. В любой момент времени можно завершить трассировку и продолжить выполнение
программы в реальном темпе. Для этого надо из меню Run выбрать команду Run. При необходимости выполнить трассировку части программы следует установить курсор на инструкцию программы, с которой надо начать трассировку, и из меню Run выбрать команду Run to cursor или нажать клавишу <F4>. Затем, нажимая клавишу <F7> или клавишу <
F8>, выполнить трассировку нужного фрагмента программы. Во время трассировки можно наблюдать не только порядок выполнения инструкций программы, но и значения переменных. О том, как это сделать, рассказывается в одном из следующих разделов. Точки останова программы При отладке широко используется метод, который называют методом точек останова. Суть метода заключается в том, что программист помечает некоторые инструкции программы (ставит точки
останова), при достижении которых программа приостанавливает свою работу, и программист может начать трассировку или проконтролировать значения переменных.
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |