Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-1208189486
Бэтман
2008-04-14 20:11
2009.03.29
Компонент tRadioGroup


15-1232283018
saNat
2009-01-18 15:50
2009.03.29
Нет доступа к сетевым папкам


15-1232646798
Kerk
2009-01-22 20:53
2009.03.29
mod_negotiation


3-1216950454
Konrads
2008-07-25 05:47
2009.03.29
Смена пароля в FireBird 2.0


2-1233735843
npr2
2009-02-04 11:24
2009.03.29
Проверка в Grid