Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

Отлов обработанных исключений...   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.051 c
14-1118425239
NightStranger
2005-06-10 21:40
2005.07.11
Smile (part 2)


1-1118661678
voe
2005-06-13 15:21
2005.07.11
TDateTimePicker отдельно месяц год и число


1-1118668385
Erik1
2005-06-13 17:13
2005.07.11
Использование BinarySearch в DeCAL?


3-1117044062
syte_ser78
2005-05-25 22:01
2005.07.11
сортировка данных


1-1119346635
Гость233
2005-06-21 13:37
2005.07.11
Отловить появляение вертикальной полосы прокрутки в TListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский