Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.032 c
1-1119440875
Peter_cc
2005-06-22 15:47
2005.07.11
Перенос слов


11-1101963783
BelchonokH
2004-12-02 08:03
2005.07.11
Message типа MouseWheel


9-1112675007
Xeno
2005-04-05 08:23
2005.07.11
Полноэкранный режим


3-1117703774
Леонид
2005-06-02 13:16
2005.07.11
Неполучается сделать update записи.


1-1118397949
A№t0№
2005-06-10 14:05
2005.07.11
В конец RichEdit