Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизОтлов обработанных исключений... Найти похожие ветки
← →
Jolik © (2005-06-21 16:47) [0]Можно ли (и если можно - то как) отловить возникшие исключения в блоке try ... except.
Поясню:
Хочу сделать лог файл (один на программу) и писать туда исключения. Чтобы не делать запись в лог в каждом блоке try ... except, можно ли сделать это гдето централизованно?
Спасибо!
← →
Ega23 © (2005-06-21 16:49) [1]Application.OnException надо переопределить.
Или воспользоваться компонентом TApplicationEvents
← →
Victor08 © (2005-06-21 16:51) [2]Напиши процедуру записи в лог и запускай её в блоках Try except
← →
Ega23 © (2005-06-21 16:54) [3]В догонку к Ega23 © (21.06.05 16:49) [1]
в секции except тогда raise надо будет делать, конечно...
← →
Jolik © (2005-06-21 17:07) [4]Application.OnException отрабатывает только если сообщение не отработано - в блоках try ... except оно не вызывается :(((
Некрасиво - в каждом try ... except записывать в лог :((( Обязательно забудешь написать, а потом будешь сидеть думать - как и что...
← →
Jolik © (2005-06-21 17:08) [5]Delphi (IDE имеется ввиду) падла же знает, когда произошло исключение - даже обработанное...
← →
evvcom © (2005-06-21 17:11) [6]
> Delphi (IDE имеется ввиду) падла же знает
Ну так напиши свой отладчик! :)
← →
Ega23 © (2005-06-21 17:14) [7]2 Jolik © (21.06.05 17:07) [4]
Application.OnException отрабатывает только если сообщение не отработано - в блоках try ... except оно не вызывается :(((
Я же тебе сказал - raise надо делать.
Пример:
if refr or (not Qu.Active)
then try
if sql<>"*" then
if (Qu is TQuery)or(Qu is TRxQuery) then
begin
(Qu as TQuery).sql.Clear;
(Qu as TQuery).sql.Add(sql);
(Qu as TQuery).RequestLive:=false;
end;
RefreshQuery(Qu);
except on E:exception do
Begin
if mess="*" then ShowMessage(HMess.errQuery)
else if mess<>"" then ShowMessage(mess);
if (Qu is TRxQuery) then realsqltext:=(Qu as TRxQuery).realsql.Text;
if (Qu is TQuery) then realsqltext:=(Qu as TQuery).sql.Text;
if (Qu is TStoredProc) then realsqltext:=(Qu as TStoredProc).StoredProcName;
raise EGPException.Create(e.message+" "+mess+ " "+realsqltext);
End;
← →
Jolik © (2005-06-21 17:31) [8]To Ega23:
Все верно - тока после raise Delphi прыгнет на конец процедуры, а если у меня после try ... except еще куча кода - он не выполнится... :(((
← →
Digitman © (2005-06-21 17:37) [9]
> а если у меня после try ... except еще куча кода - он не
> выполнится
а с какого перепугу он должен выполниться ?
на то он и try..except ...
на то он и raise ...
ничто не мешает тебе вместо try..except обрабатывать исключения централизованно, в упомянутом обработчике события
там же анализировать класс исключения и инф-цию. связанную с тек.исключением ..
там же и "гасить" исключение установкой handled=true, если это требуется по твоему алгоритму
← →
Ega23 © (2005-06-21 17:40) [10]2 Jolik © (21.06.05 17:31) [8]
Все верно - тока после raise Delphi прыгнет на конец процедуры, а если у меня после try ... except еще куча кода - он не выполнится... :(((
А на это finally секция есть.
try
try
i:=StrToInt(Edit1.Text);
ShowMessage(IntToStr(i));
except
raise Exception.Create("Бли-и-ин...");
end;
finally
Beep;
end;
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.039 c