За наиболее распространенными ошибками можно заставить следить саму программу. Для этого в настройках проекта: Project Options (Проект Настройки) – на вкладке 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