Предотвращение и обработка ошибок




За наиболее распространенными ошибками можно заставить следить саму программу. Для этого в настройках проекта: ProjectOptions (Проект† Настройки) – на вкладке Compiler нужно выполнить действия:

 

 

· На панели Code generation (Генерация машинного кода) сбросьте флажок

Optimization (Оптимизация). Когда компилятор создает оптимизированный

код, он нередко вносит существенные улучшения в детали алгоритма, реализованного на Паскале. Например, если программист вводит в процедуре локальную переменную X для хранения промежуточных результатов:

Пример 3

то после оптимизации этого кода программа вполне может не использовать промежуточную переменную, а результат вычислений условно будет представлен так:

Это означает, что программист не сможет узнать значения локальной переменной X во время работы программы, потому что реально для нее не будет отводиться место в оперативной памяти.

· На панели Runtime errors (Ошибки времени выполнения) должны быть уста-

новлены флажки Range checking (Контроль выхода индекса за границы массива),

I/O Checking (Контроль ошибок ввода/ вывода) и Overflow checking (Контроль

переполнения при целочисленных операциях). Так как все типы Паскаля имеют

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

· На панели Debugging (Отладка) установите флажки

· Debug information (Добавление отладочной информации), Local

symbols (Просмотр значений локальных переменных), Reference info (Просмотр структуры кода), Assertions (Включение процедуры Assert в машинный код) и Use Debug DCUs (Использование отладочных версий стандартных модулей библиотеки компонентов VCL).

Отключить генерацию машинного кода для этой процедуры можно с помощью флажка Assertions. Отладочные версии стандартных модулей содержат дополнительные режимы проверки корректности работы с компонентами Delphi 7.

Установка данных флажков приводит к тому, что при наличии соответствующих логических ошибок в программе (например, выход за границы массива) приведет к остановке выполнения программы и строка, в которой данная ошибка была допущена, будет подсвечена (в Примере 1 строка Arr[i]:=0). При этом Delphi может определить, в чем заключается ошибка. Например, если наводить курсор на различные переменные, сразу можно увидеть их значения во всплывающей подсказке.

Исключения

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

Таблица 1. Стандартные классы исключительных ситуаций

Имя класса Когда возникает
EAbort Данный класс предназначен для формирования и обработки «невидимых» для пользователя ошибок и используется разработчиками для управления ходом выполнения программы. Диалоговое окно с сообщением об ошибке не показывается  
EAbstractError Попытка выполнения абстрактного метода  
EAccessViolation Обращение к недоступной области памяти, например при выходе индекса за границы массива  
ЕAssertionFailed   Значение выражения в процедуре Assert равно False  
EControlC   Нажата комбинация клавиш CTRL+C в консольном приложении  
EConvert Error   Попытка неверного преобразования типов, например при вызове StrToInt('aaa')  
EDivByZero   Деление на ноль  
EExternal   Неверное функционирование системы Windows  
EExternalException   Невозможность распознать исключительную ситуацию средствами Delphi 7  
EFilerError При обращении к файлу. Наиболее частой причиной является отсутствие требуемого файла или, в случае использования сменного диска, отсутствие диска в накопителе
EHeapException   Неверное динамическое распределение памяти или некорректная работа с указателями  
EFileStreamError   Ошибка ввода/вывода при использовании файла, название которого указано в параметре FileName данного класса  
EInOutError   Ошибка файлового ввода/вывода  
EIntError   Базовый класс, на основе которого созданы классы исключительных ситуаций при работе с целыми числами  
EIntOverfLow   Слишком большой результат при операции с целыми числами  
ElntfCastError   Неверное приведение типа объекта с помощью операции as во время обращения к интерфейсу  
ElnvalidCast   Неверное приведение типа с помощью операции as  
EInvalidOp Неверная операция над числами с плавающей запятой  
Elnvalid Pointer   Неверная операция при работе с указателями  
EMathError   Базовый класс, на основе которого созданы классы исключительных ситуаций при работе с числами с плавающей запятой  
EOutOfMemory   Нехватка памяти  
EOverflow   Переполнение при выполнении операции над числами с плавающей запятой  
ERangeError   Значение выражения целого типа выходит за допустимый для этого типа диапазон  
EStackQverflow   Нехватка памяти в стеке. Возникает, когда используются слишком объемные локальные переменные (они создаются и хранятся в стеке) или когда слишком длинна последовательность вызовов вложенных подпрограмм  
EUnderflow   Результатом выражения над числами с плавающей запятой является число, которое слишком мало для его представления в программе  
EVariantError   Некорректное использование переменных типа Variant, например, при попытке неверного приведения типов  
EWinBZError   Ошибка 32-разрядной версии Windows  
EZeroDivide   Деление на ноль  

 


СОДЕРЖАНИЕ

Отладчик Delphi 1

Что такое отладка?. 1

Основные виды ошибок. 1

ОТЛАДЧИК DELPHI 2

Трассировка программы.. 2

Точки остановки (точки прерывания) программы.. 3

Группировка точек прерывания. 4

Действие. 5

Наблюдение значений переменных. 6

Просмотр и изменение значений. 8

ПРИЛОЖЕНИЕ. 9

Предотвращение и обработка ошибок. 9

Исключения. 10



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: