Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Exception или нет в finally


Дмитрий С ©   (2013-05-19 04:14:00) 

Можно как-нибудь узнать выполнение внутрь finally...end; попало в результате исключения или в результате штатного выхода из области try...finally?
И желательно получить ссылку на это исключение.
try except внутри try finally не хочется городить.


Германн   (2013-05-21 02:17:00) [1]


> Rouse_ ©   (20.05.13 19:55) [13]
>
> Иcключения в Delphi крайне куцие (зарезаны по самое не балуйся).
>

Большинству и этого достаточно.


Rouse_   (2013-05-20 19:55:00) [2]

Иcключения в Delphi крайне куцие (зарезаны по самое не балуйся).
Об этом я много раз говорил, что здесь:
http://www.delphimaster.net/view/4-1256386078
Что здесь:
http://alexander-bagel.blogspot.ru/2012/11/debuger-3.html
(function _except_handler)


Dimka Maslov   (2013-05-20 19:48:00) [3]


>  clickmaker ©   (19.05.13 22:53) [11]


procedure TForm5.Button1Click(Sender: TObject);
begin
 try
   Abort;
 finally
   if ExceptObject <> nil then ShowMessage('Всё, кердык')
     else ShowMessage('Всё ничтяк');
 end;
end;


В Delphi 2009 таки кердык, а вот в винтажной Delphi 5 действительно ничтяк.


clickmaker   (2013-05-19 22:53:00) [4]

> [10] Dimka Maslov ©   (19.05.13 22:12)

в finally в любом случае будет все ничтяк


Dimka Maslov   (2013-05-19 22:12:00) [5]

if not Assigned(ExceptObject) then ShowMessage('Всё ничтяк!')
 else ShowMessage('Всё, кердык!')


Inovet   (2013-05-19 15:00:00) [6]

> [6] Дмитрий С ©   (19.05.13 13:56)
> Жаль что exception достать не удастся.

Можно в exept сохранить и снова поднять.


Дмитрий С   (2013-05-19 14:30:00) [7]


> System.AcquireExceptionObject

внутри блока finally эта функция не работает как ожидается.


> Вместе с тем, try-except-end - самое правильное решение

Да понимаю ))


Exception   (2013-05-19 14:27:00) [8]

> Жаль что exception достать не удастся.

System.AcquireExceptionObject

> try except внутри try finally не хочется городить.

Вместе с тем, try-except-end - самое правильное решение, для того, собственно, и предназначенное. А флажки, особенно в данном случае, как раз далеко не самое лучшее решение.


Дмитрий С   (2013-05-19 13:56:00) [9]


> clickmaker ©   (19.05.13 11:22) [3]

Хороший вариант. Жаль что exception достать не удастся.


clickmaker   (2013-05-19 13:34:00) [10]

> [4] Exception   (19.05.13 12:46)


> Можно как-нибудь узнать выполнение внутрь finally...end


Exception   (2013-05-19 12:46:00) [11]

> clickmaker ©   (19.05.13 11:22) [3]


try
 ...
 ShowMessage('No exception raised.');
finally
 ...
end;


clickmaker   (2013-05-19 11:22:00) [12]

> попало в результате исключения или в результате штатного
> выхода

try
 ...
 allDone := true;
finally
 if not allDone then ShowMessage('Some exception raised.');
end;


Дмитрий С   (2013-05-19 04:57:00) [13]

Похоже действительно придется. Предварительные эксперименты не дали никаких результатов.


Германн   (2013-05-19 04:41:00) [14]


> try except внутри try finally не хочется городить.

А придётся! Не надо экономить на копейках!
Тем более что эти два блока весьма отличаются по своей сути.
Первый занимается обработкой исключений и ему абсолютно пофигу что дальше происходит с памятью. Второго интересует только память и ему плевать на все те исключения, которые могли возникнуть.


Наверх

Титульная страница Поиск, карта сайта Написать письмо