Текущий архив: 2009.03.29;
Скачать: CL | DM;
Вниз
Тем, кто утверждает, что тело except не должно быть пустым Найти похожие ветки
← →
Германн © (2009-01-18 02:18) [200]
> Существует категория людей, спорить с которыми не нужно.
Вот это точно. Бо они заточены именно на споры. Суть спора их не очень волнует.
← →
Eraser © (2009-01-18 02:41) [201]> [137] oxffff © (17.01.09 20:33)
подобные ошибки должны логироваться централизованно, а не на местах, с пом. спец. средств, например JCL. все исключения, кроме ряда специализированных (например в Indy некоторые исключения сигнализируют далеко не об ошибке) нужно логировать. не обработанные исключения тоже нужно логировать, но при этом сообщая через UI о том, что произошла ошибка.
← →
oxffff © (2009-01-18 02:47) [202]Удалено модератором
← →
oxffff © (2009-01-18 02:57) [203]
> Eraser © (18.01.09 02:41) [201]
> > [137] oxffff © (17.01.09 20:33)
>
> подобные ошибки должны логироваться централизованно, а не
> на местах, с пом. спец. средств, например JCL. все исключения,
> кроме ряда специализированных (например в Indy некоторые
> исключения сигнализируют далеко не об ошибке) нужно логировать.
> не обработанные исключения тоже нужно логировать, но при
> этом сообщая через UI о том, что произошла ошибка.
Это generic алгоритм, который испоняется на отдельной тачке без GUI с возможным падением логгера и единственной возможностью сообщить только через него. Такова поставновка задачи.
С ограниченной фукнциональностью контрактов. Такова поставновка задачи.
Естественно я приводил данный упрощенный код для выявления потребности в пустом except end. А в итоге мы уже далеко отошли от этого.
Оппонент по факту признался в невозможности решения в [181].
Однако официально не признает этого.
Мог бы получить союзника, а так получат опонента пожизненно.
← →
Eraser © (2009-01-18 03:15) [204]> Это generic алгоритм, который испоняется на отдельной тачке
> без GUI с возможным падением логгера и единственной возможностью
> сообщить только через него. Такова поставновка задачи.
так ответили же уже - записывать в системный журнал. если и при этом ошибка, можно записывать в самопальный лог, ввиде текстового файла. если и там ошибка - генерировать не обрабатываемое исключение, либо закрывать поиложение с определенным кодом ошибки.
← →
test (2009-01-18 06:38) [205]procedure DoTask(const Task:ITask;const Log:ILog);
begin
try
Log.Inform("Task Start");
Task.Start;
Log.Inform("Task End");
except
try
Task.TryToCloseTask;
except
try
Log.Inform("Task close Error");
except
on e:Exception do MessageDlg(e.message,mtError,[mbOK],0);
end;
end;
try
Log.Inform("Task Error");
except
on e:Exception do MessageDlg(e.message,mtError,[mbOK],0);
end;
end;
end;
← →
test (2009-01-18 06:42) [206]on e:Exception do MessageDlg(e.message,mtError,[mbOK],0);
Можно менять на что угодно, но информация о том что произошла ошибка должна быть, хочеш тут завершай приклад, хочеш пиши самопальный лог.
Да еще вопросик а почему ты информацию о задании в лог не пишешь?
Как потом из всего множества заданий искать тот в котором произошла ошибка?
← →
oxffff © (2009-01-18 11:19) [207]
>Eraser © (18.01.09 03:15) [204]
> test (18.01.09 06:38) [205]
Почему мы опять игнорируем пункт задания.
Все сообщения пользователя идут только ILOG(в задании сказано логирование у yнас только внешнее). У нас нет никаких внутренних журналов.
Это принципильный вопрос ребята.
Теперь конкретно по реалиазции не связанныго с моим заданием
test (18.01.09 06:38) [205]
try
Log.Inform("Task Start");
Task.Start;
Log.Inform("Task End");
except
try
Task.TryToCloseTask;
except
try
Log.Inform("Task close Error");
except
on e:Exception do MessageDlg(e.message,mtError,[mbOK],0);
end;
end;
try
Log.Inform("Task Error");
except
on e:Exception do MessageDlg(e.message,mtError,[mbOK],0);
end;
end;
Любое исключение в Log.Inform("Task Start")| Task.Start;| Log.Inform("Task приведет к Task.TryToCloseTask, Log.Inform("Task Error"). Что некорректно.
+ как следствие дизинфоромация пользователя.
Теперь по оформлению, если не классификации исключений (обрабатываюстя все исключения) достаточно вместо
on e:Exception do MessageDlg(e.message,mtError,[mbOK],0);
написать
MessageDlg(ExceptObject.message,mtError,[mbOK],0);
Теперь главный вопрос почему сделано предположение о том, что сам
MessageDlg(e.message,mtError,[mbOK],0); не вызовет исключение?
Ведь 100% уверенности что в том, что это он не сделает нет. Тем более на машине на которой никто не сидит и не видит этих сообщений.
(Рано или поздно кончатся ресурсы)
Это не параноидальный подход.
Это когда нужно гарантировать выполнение следующих заданий, опять же по условию задачи.
← →
oxffff © (2009-01-18 11:22) [208]
> Да еще вопросик а почему ты информацию о задании в лог не
> пишешь?
> Как потом из всего множества заданий искать тот в котором
> произошла ошибка?
Ответ простой. Получить это информацию о задании нет возможности, есть только возожность ее выполнить. Таков контракт по заданию.
Во первых все информацию о работе (в том числе и о ислючениях)паралельно может писать Task внутри свой внешней реализации, которая нам не доступна. Почему то никто до этого не смог догадаться.
Но может также и не писать. Это вопрос реалиазции Task.
← →
oxffff © (2009-01-18 11:25) [209]
> on e:Exception do MessageDlg(e.message,mtError,[mbOK],0);
>
> написать
> MessageDlg(ExceptObject.message,mtError,[mbOK],0);
Здесь звиняй, не прав я. ExceptObject тип Tobject.
← →
oxffff © (2009-01-18 11:30) [210]
> oxffff © (18.01.09 11:25) [209]
Однако писать для обработки всех исключений
on e:Exception do MessageDlg(e.message,mtError,[mbOK],0);
некорректно.
Поскольку никто не запрещает нам например сделать
raise Tform1.create(nil);
← →
vuk © (2009-01-18 11:59) [211]to oxffff © (18.01.09 11:19) [207]:
>Все сообщения пользователя идут только ILOG(в задании сказано
>логирование у yнас только внешнее). У нас нет никаких внутренних
>журналов.
>Это принципильный вопрос ребята.
Я уже здесь писал, что догматизм вреден. В том числе в той форме, когда в ущерб возможности понимания того, что есть проблемы (о которых можно сообщить в системном журнале) начинается бессмысленное упирание в крувую постановку задачи.
← →
oxffff © (2009-01-18 13:43) [212]Удалено модератором
Примечание: Предупреждаю: еще один переход на личности - будешь забанен. Надоело твою грязь чистить.
← →
Anatoly Podgoretsky © (2009-01-18 13:44) [213]> oxffff (17.01.2009 23:59:03) [183]
> except
> ErrorInfo:="Task Unknown Error";
> end;
Я уже тебе приводил правильный код, не надо прятать реальную ошибку. Пользователь будет очень рад подобному жизнерадостному сообщению.
except
on E:Exception do
ErrorInfo:= "Task Unknown Error: " + E.Message;
end;
← →
Anatoly Podgoretsky © (2009-01-18 14:00) [214]> oxffff (18.01.2009 13:43:32) [212]
Зачем приписываешь свои мысли другим.
Ты уже начал кидаться на участников, оскорблять их.
Чувствую ветка доживает свои последнии часы.
← →
oxffff © (2009-01-18 14:01) [215]
> Anatoly Podgoretsky © (18.01.09 13:44) [213]
Неправильно. А как насчет raise Tform.create(nil), не с корнем в
Exception?
> Я уже тебе приводил правильный код, не надо прятать реальную
> ошибку. Пользователь будет очень рад подобному жизнерадостному
> сообщению.
>
> except
> on E:Exception do
> ErrorInfo:= "Task Unknown Error: " + E.Message;
> end;
Для уже написал, что исключение внешение.
У вас будет только Message="External Exception".
Опять додумываете. Куда вы бутите слать его логер дает исключение?
cм. [212] внимательно пожалуйста на слова обобщенный алгоритм, спасибо.
← →
Petr V. Abramov © (2009-01-18 14:04) [216]
> oxffff © (18.01.09 13:43) [212]
> Учитесь думать обобщенно. А я вам в этом помогу.
не надо :)))
вот смотри: у тебя есть некий плагин, который может свалиться даже на записи своих ошибок, житейская вещь. если это происходит, в самом фиговом случае мы видим чистый лог и полное отсутствие результатов работы плагина. Админ будет чесать репу очень долго и поминать тебя плохими словами.
Чтобы этого не было, неплохо завести лог ошибок логгирования, в реализации простой, как три копейки. Плагины - не твое твое творчество, с т.з. системы им доверять нельзя, в них может происходить что угодно по опеределнию. Но и при его работе могут возникнуть исключения (диск переполнился). Можно, конечно, завести еще один уровень, который будет писать в журнал, над ним еще, который будет писать письмо путину и т.д. Не здОрово.
можно гасить исключения, приходим к тому, от чего ушли, но с меньшими вероятностями.
Выход можно содрать у оракловых утилит: в настройках указаывается, на какой по счету ошибке обработки им с треском сваливаться. Т.е. в нашем случае если, например, плагин 100 раз вызвал ошибку и не смог ее записать в лог, и мы в своем логе не можем ее отразить, потому что диск вылетел, этот плагин явно надо срубать, ничего хорошего от него не выйдет сегодня.
А число 100 пусть подбирает админ.
← →
oxffff © (2009-01-18 14:11) [217]
> oxffff © (18.01.09 13:43) [212]
> Удалено модератором
> Примечание: Предупреждаю: еще один переход на личности -
> будешь забанен. Надоело твою грязь чистить.
Хорошо я напишу, корректней.
Есть обобщенней алгоритм:
Есть неизвестное задание А, и неизвестный логер B. Согласно обобщенного алгоритма при возникновенеии исключение
в А, должно быть сообщено в B. Однако исключение в B не должно рушить приложение. А и B генерируют неизвестные, внешние исключения, т.е. это будет экземпляр EExternalException.
Любое сообщение пользователю должно идти через B(ILogger), таким образом предложения писать в системный лог идут в разрез в самой идеей генерализации. Фактически в таком случае нужно вообще отказаться от идеи генерализации логирования.
← →
oxffff © (2009-01-18 14:12) [218]
>
> Petr V. Abramov © (18.01.09 14:04) [216]
Славо богу хоть ты успел прочитать.
← →
oxffff © (2009-01-18 14:26) [219]
> Petr V. Abramov © (18.01.09 14:04) [216]
>
> > oxffff © (18.01.09 13:43) [212]
> > Учитесь думать обобщенно. А я вам в этом помогу.
>
> не надо :)))
>
> вот смотри: у тебя есть некий плагин, который может свалиться
> даже на записи своих ошибок, житейская вещь. если это происходит,
> в самом фиговом случае мы видим чистый лог и полное отсутствие
> результатов работы плагина. Админ будет чесать репу очень
> долго и поминать тебя плохими словами.
> Чтобы этого не было, неплохо завести лог ошибок логгирования,
> в реализации простой, как три копейки. Плагины - не твое
> твое творчество, с т.з. системы им доверять нельзя, в них
> может происходить что угодно по опеределнию. Но и при его
> работе могут возникнуть исключения (диск переполнился).
> Можно, конечно, завести еще один уровень, который будет
> писать в журнал, над ним еще, который будет писать письмо
> путину и т.д. Не здОрово.
Плагины это как пример использования идеи генерализации.
Я намеренно упросил задачу, для выявления пустого except end
Можно например представаить код который выполняется в дополнительном потоке, с его логированием.
Можно например представаить работа с СУБД в дополнительном потоке, с его логированием.
Возможности получить описания исключения нет(упрощено, можно делегировать этот контракт ITask в качестве решения, но не в этом суть).
Важно!!! Что любое логирование идет через обобщенный контракт.
Вот здесь [216] ты намеренно пытаешься уйди о идеи генерализации. Ты предлагаешь завязаться на конкретном варианте логирования(фактически расширив его и специализировав).
То есть хорошо давай предположим, что есть то я бы предложил в твоей версии
Есть генерализация
(IAbstractTask, IAbstractLogger, IAbstractLoggerOfLoggeerErrors).
Ты предлагаешь сузить генерализацию до
(ITask, ILogger, ConcreteWin32SystemEvent).
фактически ограничив ее, что противоречит условию задачи.
Алгоритм должен быть обобщен.
Однако и в том и в другом случае нет возможности гарантировать не защитив Logger, что за него уйдет исключение.
Я надеюсь ты меня понял.
← →
oxffff © (2009-01-18 14:38) [220]Удалено модератором
Примечание: Вас предупреждали ? Предупреждали. Отдыхайте
← →
Petr V. Abramov © (2009-01-18 14:40) [221]
> Есть генерализация
>
> (IAbstractTask, IAbstractLogger, IAbstractLoggerOfLoggeerErrors).
>
>
> Ты предлагаешь сузить генерализацию до
>
> (ITask, ILogger, ConcreteWin32SystemEvent).
>
> фактически ограничив ее, что противоречит условию задачи.
>
> Алгоритм должен быть обобщен.
ну тогда пустой try..except
админам в темном переулке будешь про обобщенные алгоритмы расказывать
Страницы: 1 2 3 4 5 6 вся ветка
Текущий архив: 2009.03.29;
Скачать: CL | DM;
Память: 1.05 MB
Время: 0.067 c