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

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

Не ловится исключительная ситуация: [D7, XP]


smaller ©   (2007-02-07 15:18:00) 

try
  Y:= 0;
  Z:= X/Y;
 except
  on EDivByZero do begin
                           if MessageDlg ('  Деление на ноль ',
                           mtError, [mbAbort],0) = mrAbort then EXIT;
                          end
 end;
Сообщения не появляется, программа вываливается в Debugger.
В чем тут м. быть дело?


RASkov   (2007-02-08 06:33:00) [1]

> Вспомнил Ketmar'а.

Кстати, без него как-то скучно..., а куда он делся?


Германн   (2007-02-08 01:36:00) [2]


> Одному трудно ловить, а толпой в угол загнали :)

Вспомнил Ketmar'а. Точнее одну из его любимых книг. :(


RASkov   (2007-02-07 21:16:00) [3]

> [14] smaller   (07.02.07 20:33)

> 1.не настроил Debugger

А дебагер лучше не трогать, имхо, он кстати и подсказывает какой Exception вылетает...
Имеею ввиду Stop On Delphi exceptions.

> [15] vrem   (07.02.07 20:45)

Одному трудно ловить, а толпой в угол загнали :)


vrem   (2007-02-07 20:45:00) [4]

поймал, да? :)


smaller   (2007-02-07 20:33:00) [5]

Благодарю всех за помощь - проблему решил!
Моих две ошибки:
1.не настроил Debugger
2.использовал  EDivByZero вместо EZeroDivide
Спасибо ...


RASkov   (2007-02-07 17:46:00) [6]

> Z:= X/0;

 Z:= X/Y;


RASkov   (2007-02-07 17:44:00) [7]

> [9] smaller   (07.02.07 16:07)

Не тот Exception обрабатываешь

procedure TForm1.Button1Click(Sender: TObject);
var X,Y,Z: Extended; N: Integer;
begin
try
 Y:= 0;
 X:=1;
 Z:= X/0;
 N:=Round(Z);
except
 on EZeroDividedo begin
  if MessageDlg ('Деление на ноль', mtError, [mbAbort],0) = mrAbort then EXIT;
 end;
end;
end;


Все нормально, после вылета в дебагер (если Stop On Delphi exceptions) жми F9 и твой обработчик сработает


sniknik   (2007-02-07 16:27:00) [8]

> Этот код я проверил - результат тот же самый - программа прерывается, Debugger  делает замечание.
этот код не решение твоей проблемы (она как таковая не озвучена), а показать класс эксепта для сравнения с тем что ловишь ты, в том коде что показан ...

если твоя программа прерывается и не может продолжить (не доходит до сообщения) выполни его в новой программе, сделанной специально для данного кода...


Сергей М.   (2007-02-07 16:11:00) [9]


> Debugger  делает замечание.
>


Опция дебагера Stop On Delphi exceptions для пушкина писана ?


smaller   (2007-02-07 16:07:00) [10]

Sniknik - у
Этот код я проверил - результат тот же самый - программа прерывается, Debugger  делает замечание.


smaller   (2007-02-07 15:49:00) [11]

DiamondShark- у
F9 - а когда его нажимать - все время что-ли держать

novill- у
1. Если запустить программу не из Дельфи, тогда cистема делает замечание, что произошло деление на ноль, мое сообщение при этом не показывается
2. Подумав, можно сказать, что может быть надо как-то настроить Debugger или еще что-то в среде - чтобы прерывание сообщающее о делении на ноль обрабатывалось в программе, а не в среде или в системе
3. Справку читал - около часа, но ничего полезного не нашел

Z тут не при чем, проверил


novill   (2007-02-07 15:48:00) [12]

> [4] smaller   (07.02.07 15:30)

Попробуй ;)

var x,y,z:double;
begin
try
 x:=1;
 Y:= 0;
 Z:= X/Y;
 ShowMessage(FloatToStr(Z));
except
 on EDivByZero do begin
                          if MessageDlg ('  Aaeaiea ia iieu ',
                          mtError, [mbAbort],0) = mrAbort then EXIT;
                         end;
 on e:exception do ShowMessage('Error classname '+e.ClassName+' with message '+e.Message);
end;
end;


sniknik   (2007-02-07 15:39:00) [13]

+, выполни
procedure TForm1.Button1Click(Sender: TObject);
var X, Y, Z: double;
begin
 try
   Y:= 0;
   Z:= X/Y;
   ShowMessage(FloatToStr(Z));
 except
   on E: Exception do ShowMessage(E.ClassName);
 end;
end;


sniknik   (2007-02-07 15:32:00) [14]

Z не используется? может быть выкинут оптимизатором, вместе с делением...


smaller   (2007-02-07 15:30:00) [15]

Здесь вроде трудно ошибиться - по моему, здесь нужно ожидать появления Message (на фоне моего приложения) а его нету  - при этом программа прерывается


novill   (2007-02-07 15:30:00) [16]

> [0] smaller   (07.02.07 15:18)

1. запустить программу не из дельфи
2. подумать
3. Если не получился п.2 почитать справку


DiamondShark   (2007-02-07 15:23:00) [17]


> Сообщения не появляется, программа вываливается в Debugger.

а если F9 нажать?


Сергей М.   (2007-02-07 15:21:00) [18]


> Не ловится исключительная ситуация


Врешь, ловится.


Наверх

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