![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
игнорирование ошибок
Redline © (2006-08-01 15:09:00)Как можно сделать так, чтобы программа игнорировала все ошибки не выдавая никаких окон?
Loginov Dmitry (2006-08-02 08:03:00) [1]> Но почему не работает try ... except
> и как все же избавиться от этого ?
А с чего он должен работать? За рамки Run выполнение программы не выходит. Иначе в случае любой пустяцкой ошибки программа бы вываливалась. Да даже CreateForm() ошибку не пропустит. Так что единственный здесь выход, который я вижу -
назначить свой обработчик для Application.OnException
Ketmar (2006-08-01 22:20:00) [2]> [21] pasha_golub © (01.08.06 22:16)
фигушки. SetUnhandledExceptionFilter() %-)
pasha_golub (2006-08-01 22:16:00) [3]Дяди, а не дай Бог Access Violation и до попы ваши перехваты. ;0) Вывалится родная, и чмокнуть не успеете. ;0)
Ketmar (2006-08-01 21:51:00) [4]> [19] Rial © (01.08.06 21:34)
тогда только переписать. потому как неизвестно, что оно там портит своими кривыми указателями.
Rial (2006-08-01 21:34:00) [5]Да, точно, там с указателями ошибка.
"Разработчик" чихать хотел на это все.
Но почему не работает try ... except
и как все же избавиться от этого ?
Понимаю, что некрасиво, но другого я выхода,
кроме как игнор, не вижу.
Тем более что ошибка только после зарытия.
Ketmar (2006-08-01 21:07:00) [6]> [16] Rial © (01.08.06 21:04)
точно в чужом? отослать разработчику bugreport. пусть пофиксит.
Ketmar (2006-08-01 21:05:00) [7]> [15] Anatoly Podgoretsky © (01.08.06 21:01)
есть подозрение, что знать не должно начальство. а то премии не даст. %-)
Rial (2006-08-01 21:04:00) [8]В догонку за темой мой вопрос.
Вот код:
procedure GraphMeh;
Uses
... ;
procedure BeginFlags(Const Init:Boolean);
begin
PaintBlocked:=Init;
TimerBlocked:=Init;
end;
begin
Try
With Application do begin
BeginFlags(True);
Initialize;
CreateForm(THeadForm, HeadForm);
If (ProcessTerminated)then Exit;
BeginFlags(False);
Run;
end;//With
Except
ShowMessage('Error !');
end;
В процессе работы никаких глюков не возмикает.
После закрытия программы все равно 50/50 вылезает AV.
Всегда по разным адресам.
Глобальный обработчик исключений установлен,
но он почему то не срабатывает.
Ни в одном из моих или чужих модулей нет ни
Initialization ни Finalization (модули Borland не в счет).
Ошибка в чужом модуле, к исходному коду которого доступа не имею.
Подскажите, как все таки "заткнуть" это ошибку, чтобы не появлялась вовсе ?
Anatoly Podgoretsky (2006-08-01 21:01:00) [9]Redline (01.08.06 15:09)
Это очень умно, пользователь не должен знать, что у тебя есть ошибки, а то что работать не будет, как то не важно.
Ketmar (2006-08-01 18:41:00) [10]>Сергей М. © (01.08.06 16:00) [12]
а вот и не облажаюсь. %-) использую SEH в asm-коде. ничего сложного не заметил. документации приличной, правда, тоже не нашёл, но использовать это не мешает.
DrPass (2006-08-01 16:02:00) [11]
> Program
>
> begin
>
> end
Program
begin
try
//вот тут пишем программу
except
//вот тут вопреки всем правилам приличного программирования не пишем ничего
end;
end. ?
Сергей М. (2006-08-01 16:00:00) [12]
> Ketmar © (01.08.06 15:58) [11]
> а вот и не правда
А вот и не облажайся.
Ketmar (2006-08-01 15:58:00) [13]>@!!ex © (01.08.06 15:40) [8]
не канают.
>Сергей М. © (01.08.06 15:43) [9]
а вот и не правда! %-)
Redline (2006-08-01 15:55:00) [14]Вообщем я остановился на OnException, но есть еще одна проблема. В обычной проге процедура присваевается так:
type
TForm1 = class(TForm)
private
{ Private declarations }
public
Procedure Exeptions(Sender:TObject; E:Exception);
end;
Procedure TForm1.Exeptions(Sender:TObject; E:Exception);
Begin
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := Exeptions;
end;
а как быть если прога типа:
Program
begin
end. ?
Сергей М. (2006-08-01 15:43:00) [15]SEH/VEH-штука сложная)
@!!ex (2006-08-01 15:40:00) [16]Type Switch
Syntax {$C+} or {$C-}
{$ASSERTIONS ON} or {$ASSERTIONS OFF}
Default {$C+}
{$ASSERTIONS ON}
Scope Local
Remarks
The $C directive enables or disables the generation of code for assertions in a source file. {$C+} is the default.
Since assertions are not usually used at runtime in shipping versions of a product, compiler directives that disable the generation of code for assertions are provided. {$C-} will disable assertions.
@!!ex (2006-08-01 15:38:00) [17]Ха. А директивы компилятора не канают?
Romkin (2006-08-01 15:24:00) [18]DprYg © (01.08.06 15:20) [5] Шоб ты усю жисть такие программы отлаживал! :)
Redline (01.08.06 15:09) Application.OnException попробуй. Там лог пиши. Хотя я сомневаюсь, что это нужно, как правило, перехват всех ошибок до добра не доводит...
DprYg (2006-08-01 15:20:00) [19]try...except end;
В промежутке except end ничего не писать
Сергей М. (2006-08-01 15:18:00) [20]
> Джо © (01.08.06 15:15) [3]
> Например, ошибки можно просто заносить в лог.
Так это же не игнорирование ошибок)..
Это их запланированная обработка !