-
Вот, помнится, Рихтер, при разборе сообщений системного журнала рекомендовал заворачивать вызов FormatMessage в блок обработки исключений а исключения игнорировать... А там вылезти может все что угодно, вплоть до Access violation.
-
> oxffff (17.01.2009 0:25:56) [56]
Я за то, что солнце встает на западе, кто ЗА
-
> vuk © (17.01.09 01:10) [60]
>
> Вот, помнится, Рихтер...
Не понял. Это пост ЗА или ПРОТИВ?
:)
-
to Германн © (17.01.09 01:30) [62]:
А чего непонятного-то? Ну бывают случаи, когда на исключение нужно забить. И если это действительно нужно, то я не понимаю, зачем делать догму из наличия кода в обработчике.
-
> vuk © (17.01.09 01:35) [63]
>
> to Германн © (17.01.09 01:30) [62]:
> А чего непонятного-то? Ну бывают случаи, когда на исключение
> нужно забить.
Да я-то понял. Но Рихтер не дельфист. (Не. Кто-то из мастеров, по-моему я знаю кто, написал в шутку, что Рихтер "пишет книгу по Дельфи, но "в стол""). Но в Дельфи немного другая ситуация. Дельфи - это в первую очередь RAD-система рассчитанная на использование компонент. А вот уже при написании компонент такой подход недопустим ни в коем случае!
-
to Германн © (17.01.09 01:43) [64]:
>Да я-то понял. Но Рихтер не дельфист.
А какая разница-то, на чем писать код игнорирующий исключения?
>Дельфи - это в первую очередь RAD-система
Это средство программирования. И задачи разные бывают. Я, вот, системный журнал парсил.
-
> vuk © (17.01.09 01:46) [65]
>
> to Германн © (17.01.09 01:43) [64]:
> >Да я-то понял. Но Рихтер не дельфист.
> А какая разница-то, на чем писать код игнорирующий исключения?
>
>
Вот я лично нарвался на серьёзную проблему при использовании стороннего компонента, в котором в одном из методов был тот самый пустой блок except. Программа моя вылетала молча. А я никак не мог понять почему!
P.S. Я уже не первый раз на этом форуме об этом конкретном случае говорю. И автор сего компонента - весьма уважаемый среди дельфистов. (По времени своего появления сравним с автором QR. По своей грамотности - гораздо выше).
А что знает Джеффри про некие компоненты?
-
to Германн © (17.01.09 02:05) [66]:
>Вот я лично нарвался на серьёзную проблему при использовании
>стороннего компонента, в котором в одном из методов был тот самый
>пустой блок except.
Ну написал кто-то кривой компонент. Так ведь из кривизны конкретного компонента вовсе не следует, что обработчик должен быть пустым или не пустым. Потому что с равной вероятностью обработчик может быть написан так, что будет приводить к неверному функционированию.
>А что знает Джеффри про некие компоненты?
А зачем оно ему? Он книжку писал про разработку под W2K. А уж на чем писать, тут разницы нет.
-
> vuk © (17.01.09 02:18) [67]
>
> to Германн © (17.01.09 02:05) [66]:
> >Вот я лично нарвался на серьёзную проблему при использовании
> >стороннего компонента, в котором в одном из методов был
> тот самый
> >пустой блок except.
>
> Ну написал кто-то кривой компонент. Так ведь из кривизны
> конкретного компонента вовсе не следует, что обработчик
> должен быть пустым или не пустым. Потому что с равной вероятностью
> обработчик может быть написан так, что будет приводить к
> неверному функционированию.
-
Случайно нажал "Добавить".
В методе того компонента был тот самый пустой блок except. Но в том методе вызывался пользовательский обработчик. Так вот ошибка была именно в нём. Я ожидал, что, если будет ошибка, то будет и сообщение об ощибке! Ан нет.
-
vuk © (17.01.09 02:18) [67]
> >А что знает Джеффри про некие компоненты?
> А зачем оно ему? Он книжку писал про разработку под W2K.
> А уж на чем писать, тут разницы нет.
В стол :)
А если по теме, то можно использовать и пустой блок except end и goto, Аллах простит. И компилятор откомпилирует без хинтов и предупреждений.
Хотя лично я за то, что если в программе ошибка, то пусть она вылетает с максимально громким треском - ее найти при этом проще.
-
> Игорь Шевченко © (17.01.09 03:06) [70]
>
> vuk © (17.01.09 02:18) [67]
>
>
> > >А что знает Джеффри про некие компоненты?
> > А зачем оно ему? Он книжку писал про разработку под W2K.
>
> > А уж на чем писать, тут разницы нет.
>
>
> В стол :)
В стол.
Не. Ну это не ты первый упомянул сей термин, зафиксированный в Орешнике! Или ты?
В общем-то без разницы, лишь ради исторической справедливости.
-
Игорь Шевченко © (17.01.09 03:06) [70]
Не обязательно вылетать, часть ошибок можно обработать.
oxffff © (17.01.09 00:09) [54]
Тебе дадут на сопровождение прогу которая писалась 5 лет назад с пустыми исключениями, может тогда поймеш в чем зло этого подхода.
-
test (17.01.09 08:40) [72]
+1
Кстати хотелось бы увидеть пример и описание условий в которых может произойти ЛЮБОЕ исключение и нельзя написать on E:Tконкретный класс исключений ;
-
Вот раздули.... :) Какая разница пустой блок или не пустой, нужно писать грамотно и с трезвой головой с учетом на будущее, а там не важно как ты пишешь.... или хотите сказать так не бывает? Бывает.
-
> test (17.01.09 08:40) [72]
Не нужно перегибать палку.
Я привел пример, когда это востребовано и оправдано.
А ты пытаешься перефразировать мои слова на свой лад.
>Sergey Masloff (17.01.09 10:52) [73]
Есть мой многопоточный планировщик запуска некоторых заданий в зависимости от изменений в файловой системе. Если мне не изменяет память построен на IOComplentionPort. Причем само задание и логирование его исполнения - это ислючительно контракт.
Итак упрощенно есть ITask, ILog.
Cхема у меня в реальном проекте на несколько уровней try больше.
Упрощено так.
try
ILog.Infrom('Task Start');
try
ITask.Start;
except
ILog.Infrom('Task Error');
raise;
end;
ILog.Infrom('Task End');
except
//Попадаем сюда в случае сбоя ILog или при сбоя ITask.
end;
-
oxffff © (17.01.09 11:46) [75]
То есть никто у тебя не стартовал, лог тоже сбойнул никто про это не узнал все хорошо. Спасибо, следующий ;-)))
-
> Sergey Masloff (17.01.09 11:53) [76]
> oxffff © (17.01.09 11:46) [75]
> То есть никто у тебя не стартовал, лог тоже сбойнул никто
> про это не узнал все хорошо. Спасибо, следующий ;-)))
Ты что глупый?
Во первых
>Cхема у меня в реальном проекте на несколько уровней try больше.
В главных
Лог это возможность информировать пользователя.
Если он сбойнул, то этой возможности нет.
-
> Sergey Masloff (17.01.09 11:53) [76]
Ты слышал про Double Fault?
-
> Sergey Masloff (17.01.09 11:53) [76]
На самом деле у меня ILog.Infrom('Task Start') тоже оборачиваются.
Но я специально упростил, чтобы было понятней.