Вопросы и ответы - Delphi - Ошибки в Delphi - Библиотека программиста
Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Как вы оцените наш сайт?

Замечательный
Хороший
Обычный
Плохой
Отвратительный


Результаты
Другие опросы

Всего голосов: 846
Комментарии: 10


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Вопросы и ответы - Delphi - Ошибки в Delphi

      
 
Delphi Run-Time Error - коды ошибок
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

15 Invalid drive number

16 Cannot remove current directory

17 Cannot rename across drives

100 Disk read error

101 Disk write error

102 File not assigned

103 File not open

104 File not open for input

105 File not open for output

106 Invalid numeric format

200 Division by zero

201 Range check error

202 Stack overflow error

203 Heap overflow error

204 Invalid pointer operation

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

213 Collection index out of range

214 Collection overflow error

215 Arithmetic overflow error

216 General protection fault

EOleSysError - как бороться?
Перед тем как Дельфи сможет использовать любые ActiveX/COM (в том числе и ADO компоненты) должна быть выполнена строка Application.Initialize - которая инициализирует использование COM. Если пишется DLL или консольное приложение, которые не имеют объекта Application, то надо просто добавить в Uses ещё один модуль: "oleauto"

Как отловить ошибку?
Код
Try

{здесь вы пишите код в котором может произойти ошибка}

Except

{здесь вы пишите код который выполнится если ошибка произойдёт, если ошибки не будет то этот код не выполняется}

End





Вот как будет выполняться код:


[Line 1]

Try

[Line 2]

[Line 3]

[Line 4]

Except

[Line 5]

End

[Line 6]




Допустим что [Line x] это строка какого-то Вашего кода. Предположим что при выполнении [Line 3] произошла ошибка, тогда программа будет выполнять строки:



1-2-3(ошибка!)-5-6



Если ошибки нет то будут выполняться следующие линии кода:



1-2-3-4-6





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


Код
Try

{здесь вы пишите код в котором может произойти ошибка}

Except

{здесь вы пишите код который выполнится если ошибка произойдёт, если ошибки не будет то этот код не выполняется}

raise;// вызвать вновь ту же ошибку

End

Как перехватить сообщение об ошибке?
Код


Try

{здесь вы пишите код в котором может произойти ошибка}

Except

on e:Exception do Shwomessage(e.message);

End

Как предотвратить утечки памяти при возникновении ошибок?
Используйте конструкцию

Код
Try

{здесь вы пишите код в котором может произойти ошибка}

Finally

{здесь вы пишите код который выполнится в любом случае - хоть произойдёт ошибка, хоть нет}

End





Например, это часто применяется во избежание утечек при динамическом распределении памяти:

Код
t:TStringList;

...

t:=TStringList.create; //распределили память под объект t

Try

{здесь работаем с переменной t}

Finally

t.free;//память выделенная под объект t всегда будет освобождена

End


Как сгенерировать свою ошибку?
Код
raise Exception.Create('Это моя ошибка! Сам что хочу то и пишу здесь!')



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

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



1) Обращение к не созданному объекту.

Код
var e:TEdit;

begin

e.text:='Hello world!';

end;



В данном случае объект e ещё не создан и идёт обращение к памяти, которая ещё не выделена.


2) Обращение к уже разрушенному объекту:

Код
var e:TEdit;

begin

...

e.free;

...

e.text:='Hello world';

end;


Тут есть хитрость, допустим вы хотите проверить есть ли объект и модернизируете код:

Код
if e<>nil then e.text:='Hello world!';



или


Код
if assigned(e) then e.text:='Hello world!';



Особенно часто приходится такое делать когда надо уничтожить объект:

Код
if e<>nil then e.free;



Так вот - такой код может быть источником ошибки, так как метод Free автоматически не устанавливает указатель в Nil. Обязательно после каждого Free используйте установление указателя в nil:

Код
e.free;

e:=nil;



3) При выходе за границы динамического массива обычно генерится ошибка "Index out of bound", но возможно и возникновение Access Violation, особенно когда не стоят опции компилляции для проверки границ массивов. Эта ошибка может быть очень сложна в отлаживании - дело в том что допустим у вас есть массив а длиной в 10 элементов, в пишете:



Код
a[20]:=something;




И эта строка может пройти как и надо, без всяких проблем, но её выполнение повредит какой-то другой код, причём каждый раз другой! Теперь самая безобидная операция типа i:=10 может вдруг внезапно дать Access Violation.



3) На форме на onCreate вызывается что-то с других форм - эти другие формы на этот момент еще не созданы



4) На форме на onDestroy вызывается что-то с других форм - эти другие формы на этот момент уже разрушены

Список префиксов Internal Error
Иногда выскакивают ошибки типа "Internal Error SY424", вот расшифровка префиксов:



B : debugger

BC : debugger

BR : browser

C : codegen

CM : command line version of the compiler

D : parser

DB : debugger

DBG: debug info output

DM : IDE version of the compiler

E : parser

EO : debugger/evaluator

FN : filename / pathname parsing

GH : HPP generator

I : code generator

IN : inspectors

L : linker

LI : BPI file writing

LO : object file loading

M : memory allocation

MA : name mangling

MB : multi-byte (MBCS) support

O : object (OMF) file handling

P : package managment

R : resource writing

S : scanner

ST : standard procedure handling

SY : symbol table

T : code generator

TI : RTTI generator

U : parser

UD : IDE version of the compiler

UI : error handling

URW: DCU reading/writing

W : Object file (OMF) writing

X : code generator





Печать страницы
Печать страницы


Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



книги по программированию исходники компоненты шаблоны сайтов C++ PHP Delphi скачать