Lazarus все ошибки








English (en)















русский (ru)









Errors during compilation

Unless the error identifies itself as an internal compiler error, it is unlikely that the error is caused by a bug in the compiler or its runtime library. Syntax errors are almost always due to incorrect code. Refer to the FPC Parser Messages documentation for a listing of the various Error and Warning messages produced by the FPC Parser along with explanations of them.

If you encounter an error while compiling your code and are unable to resolve it yourself, please use the FPC and Lazarus Forums, write to the Lazarus or Free Pascal mailing list. The problem may then be solved more quickly.

If an error is encountered during compilation, the compiler does not generate an executable program. See further compile time errors.

Errors during program execution

The Free Pascal Compiler inserts code to detect a large number of error situations which might occur during program execution (eg divide by zero). If such an error situation occurs, the standard run-time library will terminate the program and print a runtime error number and the address at which the error occurred. See further runtime errors.

If you encounter a runtime error while running your program and are unable to resolve it yourself, please use the FPC and Lazarus Forums, write to the Lazarus or Free Pascal mailing list.

Bugs

If the bug is already known

Use the FPC and Lazarus Bug Tracker’s search capabilities.

Known issues. Tip: If you are experiencing problems, for example with TEdit.SelStart -> try searching «SelStart» (in quotes). If the bug is known:

  • reopen if the issue is resolved or the issue is closed — use the Reopen Issue button.
  • add your own note to the discussion if you received this error in another situation.

To observe any changes to your bug report — use the Monitor Issue button.

Note: You need to login to your account: Login/Create an account.

If the bug is not already known

  1. Go to the FPC and Lazarus Bug Tracker.
  2. You must be logged in: Login/Create account.
  3. Visit Report Issue. Fill in as many fields as possible. The more accurate the better.
  • The OS and Product Version fields are especially important. If the data is not enough, they will not help you! Don’t forget to mention the system features (big endian or 64-bit).
  • It is often helpful to send in a small test program to resolve the problem as soon as possible.
  • If you find graphic artifacts, it would not be superfluous to send a screenshot (in png or jpeg, but not in BMP!).
  • If it fails, try creating a backtrace. More information — Creating a Backtrace with GDB.
  • If possible, observe the behaviour of the buggy program on different platforms or with different widgetsets.

It is also possible to get a bug fixed by paying for a solution, see Bounties.

See also

  • Lazarus Help.
  • How to use the Forums.
  • How do I create a bug report.
  • Creating A Patch.
  • Tips on writing bug reports.

Programming newbies or people, who start with developing applications using the Lazarus IDE, may be irritated by some error messages, being displayed
during the build or the execution of a program. Might this little text be helpful to understand, what’s wrong and how to solve the issue.

Message Occurrence Explanation
Error: Can’t create object file: FILENAME (error code: 5). Error: Can’t create executable FILENAME. Build error The object and executable of the program to be build can’t be created, because Lazarus can’t write the file. On Linux, this could have to do with
file or directory access permissions. Usually, the reason is a very simple one: You are trying to rebuild a program, that is actually being executed.
Hint: Variable ARRAY-VARIABLE of a managed type does not seem to be initialized. Build warning This message occurs, if you set the initial length of a dynamic array (for example: SetLength(ARRAY-VARIABLE, 0).
For me personally, this message is nonsense: How could you initialize a dynamic array, before setting its length? Most people, posting in the Lazarus forums,
seem to share my opinion. Another argument, that this hint may safely be ignored, is that with Lazarus versions 1.x, this never happened.
Project PROJECTNAME raised exception class ‘External: SIGSEGV’. At address ADDRESS. Run-time error There was some error in an external module, called by the program. This usually happens, if some variable has a value, that is invalid for a given
function called. The problem with these errors is, that Lazarus usually doesn’t indicate the line in the source code, where the error occurred. Finding these
errors may thus be heavy (I never used the debugger; would this be the solution, to quickly find the error?). According to my own experience, one of
the most frequent reasons is an array index, that is out of the permitted limits, writing some code like for I := 0 to Length
(ARRAY-Variable) do
. The error may also be caused by invalid arguments of a mathematical function, such as negative values, in the case of an
external calculation of a square root.


If you find this text helpful, please, support me and this website by signing my guestbook.

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

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

Ошибка при компиляции проекта

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

Для исправления ошибки компиляции сначала необходимо определить причину ошибки. Ниже приведены некоторые общие причины ошибок компиляции и способы их исправления:

  • Неверный путь к файлам: Проверьте, правильно ли настроены пути к файлам включения и библиотек. Убедитесь, что пути прописаны правильно и что файлы действительно существуют по этим путям.

  • Необходимые библиотеки отсутствуют: Если программа использует библиотеку, которая не установлена на компьютере, то компилятор не сможет найти нужные файлы. Установите соответствующие библиотеки, чтобы исправить ошибку.

  • Ошибки синтаксиса: Если вы получили сообщение о синтаксической ошибке, то проверьте правильность написания кода. Обычно подобные ошибки связаны с пропуском скобок, точек запятых и других символов, которые необходимы для правильной работы программы.

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

Ошибка при запуске программы

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

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

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

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

  • Ошибка связи с базой данных: Если ваша программа использует базу данных, может возникнуть ошибка связи с базой данных. Убедитесь, что база данных была правильно настроена и что соединение с базой данных было выполнено корректно.

Заключение

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

Приложения, генерируемые при помощи Free Pascal, могут генерировать ошибки времени выполнения программы, если в программе обнаружено какое-либо ненормальное состояние. Ниже приведён список возможных ошибок времени выполнения и информация о причинах их возникновения.

Код

Ошибка

Описание

1

Invalid function number

Неправильный номер функции. Была попытка выполнить неправильный вызов операционной системы.

2

File not found

Файл не найден. Появляется при попытке удалить, переименовать или открыть несуществующий файл.

3

Path not found

Путь не найден. Возникает при обработке директорий, если путь не существует или неправильный. Также возникает при попытке доступа к несуществующему файлу.

4

Too many open files

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

5

File access denied

Отказано в доступе к файлу. Эта ошибка может произойти по одной из следующих причин:

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

Файл в текущий момент блокирован или используется другим процессом.

Попытка создать новый файл или директорию, в то время как файл или директория с таким именем уже существует.

Попытка прочитать файл, который был открыт в режиме «только запись».

Попытка записи в файл, который был открыт в режиме «только чтение».

Попытка удаления файла или директории, в то время как это невозможно.

Недостаточно прав для доступа к файлу или директории.

6

Invalid file handle

Неправильный дескриптор файла. Если появилось это сообщение, то используемая вами файловая переменная является «мусором». Это говорит о том, что ваша память содержит недостоверные данные.

12

Invalid file access code

Неправильный код доступа к файлу. Появляется, если reset или rewrite вызываются с неправильным значением FileMode.

15

Invalid drive number

Неправильный номер диска. Номер, полученный для функций Getdir или ChDir, указывает на несуществующий диск.

16

Cannot remove current directory

Невозможно удалить текущую директорию. Случается при попытке удалить текущую активную директорию.

17

Cannot rename across drives

Невозможно переименовать на разных дисках. Вы не можете переименовать файл, так как он заканчивается на другом диске или разделе диска.

100

Disk read error

Ошибка чтения диска. Ошибка происходит при чтении с диска. Обычно случается, если вы пытаетесь прочитать самый конец файла.

101

Disk write error

Ошибка записи диска. Случается, если диск заполнен, а вы пытаетесь записать на него данные.

102

File not assigned

Файл не назначен. Это происходит при вызове Reset, Rewrite, Append, Rename и Erase, если вы вызвали их с параметром, которому не назначен файл.

103

File not open

Файл не открыт. Случается при вызове следующих функций: Close, Read, Write, Seek, EOf, FilePos, FileSize, Flush, BlockRead и BlockWrite, если файл не открыт.

104

File not open for input

Файл не открыт для ввода. Случается при вызове следующих функций: Read, BlockRead, Eof, Eoln, SeekEof или SeekEoln, если файл не открыт с помощью Reset.

105

File not open for output

Файл не открыт для вывода. Случается при записи, если текстовый файл не открыт с помощью Rewrite.

106

Invalid numeric format

Неправильный числовой формат. Случается, если НЕ числовое значение читается из текстового файла, а ожидается числовое значение.

150

Disk is write-protected (Critical error)

Диск защищён от записи (критическая ошибка).

151

Bad drive request struct length (Critical error)

Неисправный привод (критическая ошибка).

152

Drive not ready (Critical error)

Диск не читается (критическая ошибка).

154

CRC error in data (Critical error)

Ошибка контрольных сумм в данных (критическая ошибка).

156

Disk seek error (Critical error)

Ошибка поиска по диску (критическая ошибка).

157

Unknown media type (Critical error)

Неизвестный тип медиа-привода (критическая ошибка).

158

Sector Not Found (Critical error)

Сектор не найден (критическая ошибка).

159

Printer out of paper (Critical error)

В принтере нет бумаги (критическая ошибка).

160

Device write fault (Critical error)

Ошибка записи на диск (критическая ошибка).

161

Device read fault (Critical error)

Ошибка чтения с диска (критическая ошибка).

162

Hardware failure (Critical error)

Неисправность аппаратного обеспечения (критическая ошибка).

200

Division by zero

Деление на ноль. Приложение пытается разделить число на ноль.

201

Range check error

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

1.Попытка доступа к массиву с индексом, который выходит за пределы объявленного диапазона.

2.Попытка присвоить значение переменной, которое выходит за пределы её диапазона (например, перечисляемые типы).

202

Stack overflow error

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

203

Heap overflow error

Ошибка переполнения кучи. Размер кучи вырос за пределы границ. Это может случиться при попытке явного распределения памяти функциями New, GetMem или ReallocMem, или при создании экземпляра класса или объекта недостаточно памяти. Учтите, что по умолчанию Free Pascal предоставляет растущую кучу, то есть куча будет пытаться получить больше памяти, чем необходимо. Однако, если куча достигнет максимального размера, предоставленного операционной системой или аппаратным обеспечением, то случится эта ошибка.

204

Invalid pointer operation

Неправильная операция с указателем. Вы получите эту ошибку, если вызовете Dispose или Freemem с неправильным указателем (например, Nil).

205

Floating point overflow

Переполнение плавающей точки. Вы пытаетесь использовать или произвести слишком большое вещественное число.

206

Floating point underflow

Потеря значащих разрядов плавающей точки. Вы пытаетесь использовать или произвести слишком маленькое вещественное число.

207

Invalid floating point operation

Неправильная операция с плавающей точкой. Может случиться, если вы пытаетесь вычислить квадратный корень или логарифм отрицательного числа.

210

Object not initialized

Объект не инициализирован. Если компиляция выполнена с включенной проверкой диапазона, то программа вызовет эту ошибку, если вы вызвали виртуальный метод, не вызвав при этом конструктор объекта.

211

Call to abstract method

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

212

Stream registration error

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

213

Collection index out of range

Индекс коллекции вне диапазона. Вы пытаетесь получить доступ к элементу коллекции с неправильным индексом (модуль objects).

214

Collection overflow error

Ошибка переполнения коллекции. Коллекция достигла максимального размера, а вы пытаетесь добавить новый элемент (модуль objects).

215

Arithmetic overflow error

Ошибка арифметического переполнения. Эта ошибка появляется, если результат арифметической операции выходит за пределы поддерживаемого диапазона. В отличие от Turbo Pascal, эта ошибка случается только для 32-разрядного или 64‑разрядного переполнения. Причиной тому является тот факт, что все числа преобразуются в 32-разрядные или 64-разрядные при выполнении арифметических операций.

216

General Protection fault

Общая ошибка защищённого режима. Приложение пытается получить доступ к недействительному пространству памяти. Это может быть вызвано несколькими проблемами:

1.Разыменование пустого указателя (nil).

2.Попытка доступа к памяти, которая находится за пределами доступной области (например, вызов move с неправильной длиной).

217

Unhandled exception occurred

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

219

Invalid typecast

Неправильное преобразование типов. Появляется, когда выполняется неудачное преобразование типов для класса с использованием оператора as. Эта ошибка также появляется, если объект или класс преобразованы в неправильный класс или объект и вызывается виртуальный метод этого класса или объекта. Последняя ошибка может быть обнаружена только в том случае, если включена опция компилятора –CR.

222

Variant dispatch error

Ошибка организации варианта. Нет метода организации (dispatch) для вызова из варианта.

223

Variant array create

Создание вариантного массива. При создании вариантного массива возникла проблема. Обычно случается из-за нехватки памяти.

224

Variant is not an array

Вариант не является массивом. Эта ошибка случается, когда выполняется попытка совершить операцию с вариантным массивом над вариантом, который не является массивом.

225

Var Array Bounds check error

Ошибка проверки диапазона массива. Ошибка случается, если индекс вариантного массива вне границ.

227

Assertion failed error

Не AssertErrorProc процедурная переменная была установлена.

229

Safecall error check

Ошибка проверки безопасного вызова. Эта ошибка случается, если возникает проблема безопасного вызова, и нет доступного обработчика процедуры.

231

Exception stack corrupted

Исключение нарушения стека. Ошибка случается, если объект исключения найден, но недоступен.

232

Threads not supported

Потоки не поддерживаются. Менеджер потоков использует отдельный драйвер на некоторых операционных системах (например, Unix-ах). Модуль с этим драйвером должен быть указан в разделе uses программы, желательно как первый модуль (на unix это модуль cthreads).

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus

121

{Если значение переменной m выходит за пределы области допустимых значений, то выдается сообщение об ошибке.}

else

writeln(‘ОШИБКА ПРИ ВВОДЕ!!!’);

end

end.

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

Если пользователь допустил ошибку, например, при вводе данных, его необходимо проинформировать об этом. Для этого можно воспользоваться функцией MessageDlg, которая выводит сообще-

ние в отдельном окне. В общем виде функцию записывают так:

MessageDlg(сообщение, тип_сообщения, [список_кнопок], справка);

где

сообщение – текст, который будет отображен в окне сообщения;

тип_ сообщения – определяет внешний вид окна (табл. 3.2);

список_кнопок – константы (перечисляются через запятую), определяющие тип кнопок окна сообщения (табл. 3.3);

справка – номер окна справочной системы, которое будет вы-

ведено на экран, если нажать F1, параметр равен нулю, если использование справки не предусмотрено.

Таблица. 3.2. Тип окна сообщения.

Параметр

Тип окна сообщения

mtInformation

информационное

mtWarning

предупредительное

mtError

сообщение об ошибке

mtConfirmation

запрос на подтверждение

mtCustom

обычное

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus

122

Таблица. 3.3. Тип кнопки в окне сообщения.

Константа

Кнопка в окне сообщения

mbYes

Да

mbNo

Нет

mbOk

Ок

mbCancel

Отмена

mbAbort

Прервать

mbRetry

Повторить

mbIgnore

Пропустить

mbHelp

Помощь

Вернемся к задаче решения квадратного уравнения (задача 3.3). Нами был рассмотрен алгоритм решения этой задачи и написана программа на языке программирования Free Pascal. Реализуем эту задачу в среде Lazarus. Создадим новый проект41 (рис. 3.20).

Для организации ввода коэффициентов уравнения внедрим на форму четыре объекта типа надпись (Label1, Label2,

Label3, Label4) и три поля ввода (Edit1, Edit2, Edit3).

Корни уравнения или сообщение Рисунок 3.20: Форма для ре- об их отсутствии будем выводить

шения квадратного уравнения в надпись Label542.

Все действия по вычислению корней квадратного уравнения будут выполняться при нажатии кнопки Button1.

При вводе данных в программе могут возникнуть следующие ошибки:

•в поле ввода оказалась строка, которую невозможно преобразовать в число;

•значение коэффициента a равно нулю43.

Для того чтобы не допустить подобных ошибок необходимо контролировать данные, вводимые пользователем. Применим для этой цели встроенную процедуру Val(S,X,Kod), которая преоб-

разовывает строку S в целое или вещественное число X. Если преоб-

41 Подробно о создании проекта см. в первой главе.

42 На этапе конструирования формы Label5.Visible:=false.

43 В этом случае при вычислении корней произойдет деление на ноль.

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus

123

разование прошло успешно, то параметр Kod принимает значение,

равное нулю, а результат преобразования записывается в переменную X. В противном случае Kod содержит номер позиции в строке S, где

произошла ошибка, и содержимое переменной X не меняется. Далее

приведен фрагмент программы с подробными комментариями: procedure TForm1.Button1Click(Sender: TObject);

var

a,b,c,d,x1,x2: real; kod1,kod2,kod3:integer; begin

//Ввод значений коэффициентов уравнения. //Из поля ввода Edit1 считывается строка //символов и преобразовывается в вещественное //число, если преобразование прошло успешно, //то kod1=0 и полученное число записывается //в переменную a.

val(Edit1.Text,a,kod1);

val(Edit2.Text,b,kod2);

val(Edit3.Text,c,kod3);

//Если преобразования прошли успешно, то if (kod1=0) and (kod2=0) and (kod3=0) then

//проверить чему равен первый коэффициент. //Если значение первого коэффициента //равно нулю, то

if a=0 then

//выдать соответствующее сообщение. MessageDlg(‘Введите не нулевое значение а’, mtInformation,[mbOk],0)

else

//иначе перейти к решению уравнения begin

d:=b*b-4*a*c; Label5.Visible:=true; if d<0 then

Label5.Caption:=’В уравнении’+ chr(13)+’нет действительных корней’

else begin

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus

124

x1:=(-b+sqrt(d))/2/a; x2:=(-b-sqrt(d))/(2*a);

Label5.Caption:=’X1=’+

FloatToStr(x1)+chr(13)+

‘X2=’+FloatToStr(x2);

end;

end else

//Преобразование не выполнено, //выдать сообщение.

MessageDlg(‘Введите числовое значение’, mtInformation,[mbOk],0);

end;

Результаты работы программы показаны на рис. 3.21 — 3.24.

Рисунок 3.22: Обработка

ошибки ввода данных — в поле

Рисунок 3.21: Обработка

ввода строка, которую невоз-

ошибки ввода данных — коэффи-

можно преобразовать в число

циент a равен 0

(коэффициент равен символу B)

Рисунок 3.23: Решение квад-

ратного уравнения 3x2+4x+5=0

Рисунок 3.24: Вычисление

(корней нет)

корней квадратного уравнения

Понравилась статья? Поделить с друзьями:
  • Lazarus try except текст ошибки
  • Left 4 dead 2 ошибка при установке
  • Layout ошибка чтения файла
  • Legion stop корона рендер выдает ошибку
  • Legend hand of god ошибка при запуске