СООБЩЕНИЯ КОМПИЛЯТОРА ОБ ОШИБКАХ
§ Если в меню Options?Linker?Link Buffer, установлен параметр Memory, переключите его в значение Disk.
§ Возможно программа слишком велика, чтобы компилироваться в таком объеме памяти. Следует разбить ее на два или более модуля.
§ несоответствующее количество begin и end (не забудьте, что оператор case также заканчивается словом end);
§ включаемый файл заканчивается в середине раздела операторов. Каждый раздел операторов должен целиком помещаться в одном файле;
§ незаконченный комментарий.
§ несовместимые типы переменной и выражения в операторе присваивания;
§ несовместимые типы фактического и формального параметров в обращении к процедуре или функции;
§ тип выражения, несовместимый с типом индекса при индексировании массива;
§ несовместимые типы операндов в выражении.
§ Идентификатору функции можно присваивать значения только внутри раздела операторов данной функции.
§ Объектный файл .obj определяет идентификаторы PUBLIC, которые не находятся в сегменте CODE.
§ Идентификатор обозначает абсолютную переменную.
§ Идентификатор обозначает процедуру или функцию типа inline.
§ Файл .com содержит ссылки с размерами в байтах на перемещаемые идентификаторы. Такая ошибка происходит в случае, если вы используете операторы HIGH и DOWN с перемещаемыми идентификаторами или если вы ссылаетесь в директивах DB на перемещаемые идентификаторы.
§ Операнд ссылается на перемещаемый идентификатор, который не был определен в сегменте CODE или в сегменте DATA.
§ Операнд ссылается на процедуру EXTRN или функцию EXTRN со смещением, например CALL SortProc+8.
§ Процедуры или функции были описаны с помощью описания forward, но их определение не найдено.
§ Вы пытаетесь осуществить приведение типа выражения, когда разрешается только ссылка на переменную, процедуру или функцию.
§ Вы пытаетесь присвоить константу вне диапазона переменной.
§ Вы пытаетесь передать константу вне диапазона в качестве параметра процедуре или функции.
Размер локальных переменных, описанных в программе или функции, не может превышать 64 Кбайт.
Новости
Программы
Turbo Pascal
Игры
Документация
Странности
FAQ
Ссылки
Форум
Гостевая
книга
Рассылка
Благодарности
Об авторе
Какие существуют виды ошибок?
Существует три основных типа ошибок: ошибки этапа компиля- ции, ошибки этапа выполнения и логические ошибки. Если вы уже хо- рошо знакомы с этими понятиями, то можете пропустить следующий раздел до методов отладки. Ошибки этапа компиляции Ошибки этапа компиляции или синтаксические ошибки происхо- дят, когда ваш исходный код нарушает правила синтаксиса Паскаля. Borland Pascal на может скомпилировать вашу программу, пока она не будет содержать допустимые операторы Паскаля. Когда компилятор встречает оператор, который он не может распознать, соответствую- щий файл выводится в окне редактирования, курсор позиционируется на то место, которое не понял компилятор, и выводится сообщение об ошибке. Компилятор, работающий в режиме командной строки, также дает вам некоторую информацию. Когда он находит синтаксическую ошибку, то выводит содержащую ошибку строку с номером этой строки и сооб- щением об ошибке. Наиболее общей причиной ошибок этапа компиляции являются ошибки набора (опечатки), пропущенные точки с запятой, ссылки на неописанные переменные, передача неверного числа (или типа) пара- метров процедуры или функции и присваивание переменной значений неверного типа. После исправления ошибки вы можете выполнить компиляцию за- ново. После устранения в программе всех синтаксических ошибок и ее успешной компиляции программа будет готова к выполнению и по- иску ошибок этапа выполнения и логических ошибок. Ошибки этапа выполнения Ошибки этапа выполнения или семантические ошибки происходят, когда вы компилируете полную программу, которая при ее выполнении делает что-то недопустимое. То есть, программа содержит допусти- мые операторы Паскаля, но при выполнении операторов что-то проис- ходит неверно. Например, ваша программа может пытаться открыть для ввода несуществующий файл или выполнить деление на ноль. Когда программа Borland Pascal обнаруживает такую ошибку, она завершает выполнение и выводит сообщение следующего вида: Run-time error ## at seg:ofs Если вы выполняете программу из IDE, Borland Pascal автома- тически находит вызвавший ошибку оператор (как в случае синтакси- ческих ошибок). Если вы выполняете программу вне IDE, то вы може- те запустить IDE и, чтобы найти вызвавший ошибку оператор, ис- пользовать команду Search│Find Error, которая дает вам адрес сег- мента и смещения (seg:ofs). Если вы используете компилятор ко- мандной строки, то можете для поиска ошибки использовать параметр /F. Логические ошибки Логические ошибки - это ошибки проектирования и реализации программы. То есть, ваши операторы допустимы и что-то делают, но не то, что вы предполагали. Эти ошибки часто трудно отследить, поскольку IDE не может найти их автоматически, как синтаксические и семантические ошибки. К счастью, IDE включает в себя средства отладки, помогающие вам найти логические ошибки. Логические ошибки приводят к некорректному или непредвиден- ному значению переменных, неправильному виду графических изобра- жений или невыполнению кода, когда это ожидается. В остальной части этой главы обсуждаются методы отслеживания этих логических ошибок.
Отладка программ
Введение
Успешное завершение процесса компиляции не означает, что в программе нет ошибок. Убедиться, что программа работает правильно, можно только в процессе проверки ее работоспособности, который называется тестирование. Обычно программа редко сразу начинает работать так, как надо, или работает правильно только на некотором ограниченном наборе исходных данных. Это свидетельствует о том, что в программе есть алгоритмические ошибки. Процесс поиска и устранения ошибок называется отладкой
Классификация ошибок
Введение
Ошибки, которые могут быть в программе, принято делить на три группы:
- синтаксические;
- ошибки времени выполнения;
- алгоритмические.
Синтаксические ошибки
Синтаксические ошибки, их также называют ошибками времени компиляции (Compile-time error), наиболее легко устранимы. Их обнаруживает компилятор, а программисту остается внести изменения в текст программы и выполнить повторную компиляцию.
Ошибки времени выполнения
Ошибки времени выполнения, они называются исключениями (Exception), тоже, как правило, легко устранимы. Они обычно проявляются уже при первых запусках программы и во время тестирования
При возникновении ошибки в программе, запущенной из ИСР, среда прерывает работу программы и в окне сообщений дает информацию о типе ошибки.
После возникновения ошибки программист может либо прервать выполнение программы, либо продолжить ее выполнение, например, по шагам, наблюдая результат выполнения каждой инструкции.
Если программа запущена из Windows, то при возникновении ошибки на экране также появляется сообщение об ошибке, но тип ошибки (исключения) в сообщении не указывается. После щелчка на кнопке ОК программа, в которой проявилась ошибка, продолжает (если сможет) работу.
Алгоритмические ошибки
С алгоритмическими ошибками дело обстоит иначе. Компиляция программы, в которой есть алгоритмическая ошибка, завершается успешно. При пробных запусках программа ведет себя нормально, однако при анализе результата выясняется, что он неверный. Для того чтобы устранить алгоритмическую ошибку, приходится анализировать алгоритм, вручную “прокручивать” его выполнение.
Предотвращение и обработка ошибок
В программе во время ее работы могут возникать ошибки, причиной которых, как правило, являются действия пользователя. Например, пользователь может ввести неверные данные или, что бывает довольно часто, удалить нужный программе файл. Нарушение в работе программы называется исключением. Обработку исключений (ошибок) берет на себя автоматически добавляемый в выполняемую программу код, который обеспечивает, в том числе, вывод информационного сообщения.
FPC и ИСР предоставляют программисту мощные средства:
- Компилятор с регулируемыми опциями.
Отладчик для поиска и устранения ошибок в программе. Отладчик позволяет выполнять трассировку программы, наблюдать значения переменных, контролировать выводимые программой данные.
1
Error 1: Out of memory
Нехватка памяти
Это сообщение выводится, когда компилятору не хватает памяти
2
Error 2: Identifier expected
Ожидался идентификатор
Возможно, имя вашего идентификатора совпадает со служебным словом
3
Error 3: Unknown identifier
Неизвестный идентификатор
Этот идентификатор не был описан
4
Error 4: Duplicate identifier
Идентификатор продублирован
Этот идентификатор уже исполь-зовался в текущем блоке программы
5
Error 5: Syntax error
Синтаксическая ошибка
В тексте найден неправильный символ
6
Error 6: Error in real constant
Ошибка в константе действительного типа
Возможно, вы поставили десятичную запятую вместо десятичной точки
7
Error 7: Error in integer constant
Ошибка в константе целого типа
Константы, выходящие за пределы диапазона типа longint описы-ваются как действительные числа
8
Error 10: Unexpec—ted end of file
Неожиданный конец файла
Количество операторов Begin и End не сбалансирована
9
Error 11: Line too long
Строка слишком длинная
Длина строки не должна превышать 127 символов
10
Error 12: Type identifier expected
Ожидается иденти-фикатор типа
Этот идентификатор не обозначает тип, как это должно быть
11
Error 15: File not found
Файл не найден
Файл не был найден ни в текущем каталоге, ни в других каталогах
12
Error 20: Variable identifier expected
Ожидается идентификатор переменной
Этот идентификатор не обозначает переменной, как должен был
13
Error 21: Error in type
Ошибка в типе
Этот символ не может начинать описание типа
14
Error 25: Invalid string length
Неправильная длина строки
Описанная максимальная длина строки должна быть в диапазоне 1…255
15
Error 26: Type mismatch
Несоответствие типов
Несовместимые типы переменной и выражения в операторе присваива-ния, несовместимые типы операн-дов в выражении, несовместимые типы формальных и фактических параметров в вызванной подпрограмме
16
Error 31: Constant expected
Ожидается константа
17
Error 32: Integer or real constant expected
Ожидается целая или действительная константа
18
Error 34: Invalid function result type
Неправильный тип результата функции
Правильными типами результата функции являются все простые типы
19
Error 36: BEGIN expected
Ожидается оператор Begin
20
Error 37: END expected
Ожидается оператор End
21
Error 38: Integer expression expected
Ожидается целое выражение
Предыдущее выражение должно быть целого типа
22
Error 41: Operand types do not match operator
Типы операндов не отвечают оператору
Оператор не может быть применён к операндам указанного типа
23
Error 42: Error in expression
Ошибка в выражении
Этот символ не может присутствовать в выражении
24
Error 50: DO expected
Ожидается служебное слово do
25
Error 54: Of expected
Ожидается служебное слово of
26
Error 57: THEN expected
Ожидается служеб-ное слово Then
27
Error 58: TO or DOWNTO expected
Ожидается служеб-ное слово to или downto
28
Error 62: Division by zero
Деление на нуль
Предыдущая операция пытается выполнить деление на нуль
29
Error 92: «[» or «(.» expected
Тут должна быть открывающая квадратная скобка
Вместо открывающей квадратной скобки можно использовать «(.»
30
Error 93: «]» or «).» expected
Квадратные скобки не закрыты
Вместо закрывающей квадратной скобки можно использовать «).»
31
Error 98: Integer variable expected
Ожидается переменная целого типа
32
Error 103: Integer or real variable expected
Ожидается пере-менная целого или вещественного типа
33
Error 108: Over—flow in arithmetic operation
Переполнение в арифметической операции
Результат предыдущей операции выходит за пределы использованного типа данных.
34
Error 113: Error in statement
Ошибка в операторе
Оператор не может начинаться с этого символа