Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

raise Exception   Найти похожие ветки 

 
Juice ©   (2007-02-06 12:06) [0]

Есть процедура, в ней цикл, в цикле при выполнении определенного логического условия я деляю raise Exception.Create("..."). Обработчиков внутри процедуры никаких нет. Исключительно на одной единственной машине при попадании в это условие генерится исключение и ... продолжает работать цикл !


procedure CalcStateOnDate(ADate : TDate; OriCoupons:TCoupons);
var
 i : integer;
 CurRate : Extended;
begin
 CurRate := 0;
 for i:=0 to High(OriCoupons) do
 begin
    ...
    else raise Exception.Create("Logical Error in CALCSTATEONDATE [{6084186F-143B-443E-B79A-200E360EBDF5}]");
 end;//for i:=0 to High(OriCoupons) ...
end;


 
Сергей М. ©   (2007-02-06 12:16) [1]

procedure CalcStateOnDate(ADate : TDate; OriCoupons:TCoupons);
...
begin
 try
.....
 except
   on e: Exception do begin
     ShowMessage(e.classname + " " + e.message); //сообщение видишь ?
     raise;
 end;
end;


 
Juice ©   (2007-02-06 12:33) [2]

Да, вижу.


 
Juice ©   (2007-02-06 12:44) [3]

Так в чем прикол что приходиться делать так:

procedure CalcStateOnDate(ADate : TDate; OriCoupons:TCoupons);
...
begin
try
.....
except
    raise;
end;
end;

???
Получается, что стандартный обработчик возвращает управление "по-адресу" ? Какая может быть причина почему так происходит?


 
tesseract ©   (2007-02-06 12:53) [4]


> Так в чем прикол что приходиться делать так:


Потому как не всегда нужно возбуждать raise. Иногда ошибку можно просто задавить.


 
Juice ©   (2007-02-06 13:06) [5]


> Потому как не всегда нужно возбуждать raise

Вот именно и интересует это. Нужно или можно ? Ну задавлю я ее в данном случае а вылезит в другом неожиданном месте. Интересует с чем связано такое  поведение , насколько я знаю оно не влазит в рамки того как должно быть. Может кто-то думает иначе?


 
Leonid Troyanovsky ©   (2007-02-06 13:11) [6]


> Juice ©   (06.02.07 13:06) [5]

> Вот именно и интересует это. Нужно или можно ? Ну задавлю

Не нужно и не можно.

> знаю оно не влазит в рамки того как должно быть. Может кто-
> то думает иначе?

Для того, чтобы начать думать нужно больше информации,
чем приведено.
Пока похоже, что у тебя некая наведенная ошибка, т.е.,
возникает она где-то в другом месте,
а в данном - лишь проявляется.

--
Regards, LVT.


 
Сергей М. ©   (2007-02-06 13:15) [7]


> Juice ©   (06.02.07 12:33) [2]


Это означает лишь одно - твое утверждение


> генерится исключение и ... продолжает работать цикл


ложно.


 
Juice ©   (2007-02-06 13:26) [8]


> Сергей М. ©   (06.02.07 13:15) [7]

Почему же это ? Когда я помещаю код в try ... except это уже совсем другой код. Так что мое утверждение истинно на все 100%, я сказал как есть. Тут на лицо один факт - если исключение самому обернуть в секцию то все нормально, а если нет то стандартный обработчик ведет себя не должным образом.


 
Juice ©   (2007-02-06 13:27) [9]

Кстати, это ноутбук Hewlett-Packard


 
Kolan ©   (2007-02-06 13:35) [10]

А ты с потоками работаешь?


 
Сергей М. ©   (2007-02-06 13:36) [11]


> мое утверждение истинно на все 100%


Экий ты упрямый)

Пробуй так:

procedure CalcStateOnDate(ADate : TDate; OriCoup
ons:TCoupons);
...
begin
 for i:=1 to 2 do begin
     ShowMessage(IntToStr(i)+"я итерация цикла");
     raise Exception.Create("");
 end;
end;

Что видишь ?


> это ноутбук Hewlett-Packard


По барабану что это.

SEH - механизм программный, он специфичен для ОС, а не для  железа.


 
Juice ©   (2007-02-06 14:05) [12]

Извиняюсь, я вас малость в заблуждение ввел. Все оказывается еще хуже.

> Сергей М. ©   (06.02.07 12:16) [1]

-оказалось что вижу только в том случае когда я иду пошагово отладчиком. А не вижу во всех остальных случаях:
1) Если запустить программу отдельно (исп.файл)
2) Если запустить через Run с выкл. Stop On Delphi Exceptions
3) Не вижу даже в том случае когда возникает исключение, происходит отсанов и я нажимаю Run. А если тут нажать StepOver то все нормально, попадаем в обработчик. Ну как вам такое поведение ? Честное слово даю все так и есть, слово в слово.


> А ты с потоками работаешь?

нет.


 
Сергей М. ©   (2007-02-06 14:11) [13]


> Juice ©   (06.02.07 14:05) [12]


см. [11]
запускай без отладчика

?


 
Juice ©   (2007-02-06 14:19) [14]


> Сергей М. ©   (06.02.07 14:11) [13]

Так нормально, 1я и все.


 
Сергей М. ©   (2007-02-06 14:21) [15]


> Juice ©   (06.02.07 14:19) [14]


> Так нормально, 1я и все.
>


Ну а чем код в [11] принципиально отличается от твоего кода ? Ничем)


 
Kolan ©   (2007-02-06 14:26) [16]

>  else raise Exception.Create("Logical Error in CALCSTATEONDATE
> [{6084186F-143B-443E-B79A-200E360EBDF5}]");

А возникает ли эксепшн? Може все дело в форматировании кода?

Напиши raise на другой строке...
else
 raise Exception.Create("Logical Error in CALCSTATEONDATE [{6084186F-143B-443E-B79A-200E360EBDF5}]");


 
Juice ©   (2007-02-06 14:36) [17]

Принципаильно нет, принципиально работать и так и так должно. Я только не могу понять ЧТО и как может повлиять настолько чтобы raise который стоит прямо перед except работал таким образом, да и еще с разницой под отладчиком оно или нет ?


 
Juice ©   (2007-02-06 14:37) [18]


> разницой

разницЕй


 
DiamondShark ©   (2007-02-06 19:08) [19]


> Я только не могу понять ЧТО и как может повлиять настолько
> чтобы raise который стоит прямо перед except работал таким
> образом, да и еще с разницой под отладчиком оно или нет
> ?

Очень даже простое "ЧТО" -- весь остальной код от begin до raise, который ты поскипал.
Кто тебя знает, может ты там стек портишь.


 
GrayFace ©   (2007-02-06 21:56) [20]

tesseract ©   (06.02.07 12:53) [4]
Потому как не всегда нужно возбуждать raise. Иногда ошибку можно просто задавить.

В крайне редких случаях.


 
GrayFace ©   (2007-02-06 22:01) [21]

RaiseExceptionProc ты, наверняка, не меняешь? Хотя какой-нибудь странный компонент может и менять.



Страницы: 1 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.03 c
4-1151045297
novill
2006-06-23 10:48
2007.02.25
Не могу остановить свой сервис


6-1158300229
dwar
2006-09-15 10:03
2007.02.25
TCP сервер на INDY. 18000 одновременных подлючений


3-1165211588
Yaros-hoi
2006-12-04 08:53
2007.02.25
Подключение к mdb через ADO на удаленной машине


15-1170559011
Лирик
2007-02-04 06:16
2007.02.25
Шарик падает вдоль стенки и начинает её касаться без проскальзыва


6-1158428475
kernel
2006-09-16 21:41
2007.02.25
Console&Socket