Exception'ы не перепередаются

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Exception'ы не перепередаются

Сообщение hinst » 06.08.2011 15:20:33

Собственно, хотел сделать, чтобы из except-блока у меня исключение передавалось дальше, вызывающим методам. Но почему-то не попёрло. Написал отдельно тестовую программку. Что я делаю не так?
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  Classes, SysUtils;

procedure a;
begin
  raise Exception.Create('FFFUUU');
end;

procedure b;
begin
  try
    a;
  except
    on e: Exception do
    begin
      WriteLN('A excepted');
      raise e;
    end;
  end;
end;

begin
  try
    b;
  except
    on e: Exception do
      WriteLN('B excepted');
  end;
  WriteLN('bye');
end.


Вылезает:
Код: Выделить всё
A excepted
An unhandled exception occurred at $004015BE :
Exception object An unhandled exception occurred at $00402285 :
EAccessViolation : Access violation
  $00402285
  $00407221
  $00407AF4
  $00407D69

Хотя, вместо "An unhandled exception" я ожидал увидеть "B excepted"
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Exception'ы не перепередаются

Сообщение Sergei I. Gorelkin » 06.08.2011 16:25:31

О, еще один баг!
Для передачи исключения "дальше" обычно применяют raise без аргументов. Но и приведенный пример уж точно не должен обращаться мимо памяти...

p.s: В Дельфи 7 этот пример тоже падает, только немного позже (во время финализации модулей).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Exception'ы не перепередаются

Сообщение hinst » 06.08.2011 16:53:30

Sergei I. Gorelkin
спасибо, сделал просто raise; теперь работает
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru