Отладка программных продуктов
Отладка — процесс локализации и устранения ошибок.
Отладка программы — процесс творческий и плохоформализуемый. Тем не менее, основной идее отладки (базирующейся на анализе данных) можно придать вид следующего алгоритма:
1) Следует начать с изучения уже доступных исходных и результирующих данных.
2) Сформулировать некоторую гипотезу, которая объясняет получение таких результирующих данных.
3) Подготовить новые исходные данные и провести эксперимент, который позволит доказать или опровергнуть гипотезу.
Обратим особое внимание на два достаточно простых случая отладки. Их анализ может быть достаточно легко выполнен при помощи пошагового отладчика.
1) Если программа прекращает работу с порождениями "предсмертного дампа памяти" (core-файла), то практически любой отладчик позволит по этому дампу восстановить динамический стек вызовов процедур и локализовать место проблемы.
2) Если программа выдает некорректное сообщение, то можно получить динамический стек в отладчике, взяв за точку останова вызов функции выдачи сообщения. Стек может дать достаточное количество информации к размышлению.
Средства отладки в интегрированных системах программирования включают:
· Средства пошагового выполнения программы и трассировки (Step over / Trace into)
· Использование точек останова (Breakpoints)
· Просмотр значений переменных (Watch)
· Интерактивное изменение значений переменных (Evaluate / modity)
· Просмотр содержимого стека (Call stack)
· Просмотр содержимого регистров (Register)
В процессе разработки и выполнения программ возникают следующие виды ошибок:
– Синтаксические
Вызываются нарушением синтаксиса языка и выявляются и устраняются при компиляции программы, т.е. компилятор выдает сообщение и показывает в тексте программы место, где возникла ошибка.
– Логические
Это следствие реализации неправильного алгоритма и проявляются при выполнении программы. Наличие таких ошибок не приводит к выдаче пользователю сообщений или прекращению работы программы, но программа будет работать неправильно.
– Динамические
Возникают при выполнении программы и являются следствием неправильной работы инструкций, процедур, функций, а также операционной системы. Такие ошибки называются ошибками времени выполнения. Например, при делении на переменную, которая в процессе выполнения программы могла получить нулевое значение.
Исключения генерируются компонентами Delphi для различных событий, таких как присвоение свойству значения, выходящего за допустимые пределы, или попытка индексировать несуществующий элемент массива.
Исключительная ситуация возникает при выполнении некорректной математической операции, такой как деление на ноль. Потенциально любой оператор программы может стать причиной исключительной ситуации. Однако некоторые операторы относительно безопасны, и ваша задача при написании устойчивой программы состоит в основном в том, чтобы правильно решить, для каких операторов нужна защита, а какие безопасны.
Вот некоторые типы операций, которые могут привести к исключительным ситуациям:
–обработка файла;
–выделение памяти;
–работа с ресурсами системы;
–работа с объектами и формами, создаваемыми во время выполнения программы;
–аппаратные конфликты и конфликты операционных систем.
При написании программы необходимо предвидеть возможность возникновения динамических ошибок и предусмотреть их обработку. Для обработки динамических ошибок введено понятие исключения, которое представляет собой нарушение условий выполнения программы, вызывающее прерывание или полное прекращение ее работы. Обработка исключения состоит в нейтрализации вызвавшей его динамической ошибки.
В Delphi для обработки динамических ошибок в выполняемый файл приложения встраиваются специальные фрагменты кода, предназначенные дл реагирования исключений. Механизмы обработки ошибок в Delphi инкапсулированы в класс Exception – базовый класс. Всего имеется сотни классов исключения:
EAbort Аварийное завершение работы без диалогового окна
EAbstractError Абстрактная ошибка метода
AssertionFailed Утверждают неудавшийся запрос
EBitsError Булев массив ошибок
ECommonCalendarError Календарная ошибка
EDateTimeError Ошибка DateTime
EMonthCalError Ошибка месяца
EConversionError Вызывается Convert
EConvertError Ошибка конвертирования объекта
EDatabaseError Ошибка базы данных
EExternal Ошибка аппаратных средств/Windows
EAccessViolation Нарушение прав доступа
EControlC Произошло аварийной завершение работы пользователем
EExternalException Другая Внутренняя ошибка
EIntError Целочисленная ошибка
EDivByZero Деление на ноль
EIntOverflow Переполнение целого числа
ERangeError Вне диапазона значений
EMathError Ошибка с плавающей запятой
EInvalidArgument Плохое значение аргумента
EInvalidOp Несоответствующая операция
EOverflow Значение слишком большое
EUnderflow Значение слишком маленькое
EZeroDivide Деление на ноль
EStackOverflow Серьёзная проблема Delphi
EHeapException Проблемы динамической памяти
EInvalidPointer Плохой указатель памяти
EOutOfMemory Нет возможности распределить память
EInOutError Ошибка ввода/вывода
EInvalidCast Ошибка произведенная объектом
EInvalidOperation Плохая операция компонента
EMenuError Ошибка пункта меню
EOSError Ошибка операционной системы
EParserError Ошибка синтаксического анализа
EPrinter Ошибка принтера
EPropertyError Ошибка свойства класса
EPropReadOnly Недопустимое обращение к свойству
EPropWriteOnly Недопустимое обращение к свойству
EThread Ошибка потока
EVariantError Различная ошибка
Для обработки исключений в приложении есть один глобальный обработчик и несколько специализированных процедур-обработчиков, реагирующих на соответствующие исключения. Каждое исключение обрабатывает свой специализированный локальный обработчик. Исключение, которое не имеет своего локального обработчика, обрабатывается глобальным обработчиком приложений.
Дата добавления: 2016-07-05; просмотров: 2557;