- •Отладчик Delphi Что такое отладка?
- •Основные виды ошибок
- •Отладчик delphi Трассировка программы
- •Точки остановки (точки прерывания) программы
- •Группировка точек прерывания
- •Действие
- •Наблюдение значений переменных
- •Просмотр и изменение значений
- •Приложение Предотвращение и обработка ошибок
- •Исключения
- •Содержание
Приложение Предотвращение и обработка ошибок
За наиболее распространенными ошибками можно заставить следить саму программу. Для этого в настройках проекта: 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
|
Деление на ноль
|
