Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  18:09[Войти] | [Зарегистрироваться]
Обсуждение темы:
Централизованная обработка ошибок

Введение.
Как обработать ошибку в клиентской проге: самый простой способ засунуть все опасные места в try except и выводить юзеру красные окошки.

Задача:
А вот если мы имеем некоторый самописный сервер (appServer, ChatServer, почтовый), который крутится на сервере в серверной комнате, возможно как сервис, и к нему периодически коннектится админ, чтобы посмотреть как дела. Ошибки (и важные события, достойные попасть в лог) могут быть самые разные: деление на ноль, файловые ошибки, нехваток памяти, попытка неавторизованного доступа, ошибки операционной системы, SQL сервера и тд и тп.

У разных типов ошибок/сообщений может быть разный набор параметров (например: EWin32Error имеет поле ErrorCode)

Как это красиво и централизованно оформить?

Причем интересует не только и не столько сохранение в файле, а идеи о Variant'e для ошибок.

 Andrew Rybin

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 10 сообщений

Добавить свое сообщение

Отслеживать это обсуждение


Смотрите также обсуждения:
Тестирование проекта. Отладка.
  • Подводные камни
  • Бета-тестирование
  • Давайте учиться на ошибках.
  • Почему программисты допускают ошибки?
  • Автоматизированные тесты для GUI
  • О системах контроля ошибок
  • Вопросы оптимизации кода

  • 10—1
    Всего сообщений в теме: 10; страниц: 1; текущая страница: 1


    № 10   06-03-2002 17:26 Ответить на это сообщение Ответить на это сообщение с цитированием
    Кстати, схожие идеи приходят в голову многим людям:
    http://www.codeproject.com/csharp/multiexception.asp


    № 9   04-03-2002 23:36 Ответить на это сообщение Ответить на это сообщение с цитированием
    > Интересные у Вас наработки, честное слово. Ещё интереснее, что Вы
    > напридумали ещё (не в плане обработки ошибок).

    Кхммм... Серебряную пулю еще не придумал :)))

    Одним из достойных своих трудов считаю библиотеку для работы с file mapping. Есть мечта сделать из нее продукт. Ну а так... по мелочам, как у всех :)

    Наверно Вы все же больше напридумали :)

    > Да, касательно того труда - я не совсем согласен с автором статьи
    > концептуально. Номер строки есть хорошо и полезно.
    > Просто надо подменить AssertErrorProc, чтобы эта працедура выводила
    > ещё и билд проекта (всё через outputdebugstring  и в лог).

    Лично мне удобнее использовать в качестве идентификатора часть GUID. При получении ошибки достаточно сделать Find in Files, чтобы найти это место. Причем нет никакой привязки к версии исходников. После прохождения исключения по стеку (либо просто через несколько обработчиков исключений) я получаю примерно следующее:

    F04AF7D4|E4BB3981|81E029DB|EE5E439C

    т.е. путь исключения. Зачастую после получения от юзера такой строчки совместно с классом исключения и сообщением многое становится понятно :)

    Впрочем, любая централизованная обработка ошибок требует высокой внутренней культуры написания, а исключения становятся стержнем, вокруг которого крутится работа любого продукта. Поэтому часто ловлю себя на том, что скатываюсь на обычный стиль написания (думать можно меньше). Приходится мысленно давать себе пинка :)


    № 8   04-03-2002 15:54 Ответить на это сообщение Ответить на это сообщение с цитированием
    2 Uno: Интересные у Вас наработки, честное слово. Ещё интереснее, что Вы напридумали ещё (не в плане обработки ошибок).

    Да, касательно того труда - я не совсем согласен с автором статьи концептуально. Номер строки есть хорошо и полезно.
    Просто надо подменить AssertErrorProc, чтобы эта працедура выводила ещё и билд проекта (всё через outputdebugstring  и в лог).


    № 7   03-03-2002 00:23 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ну и ещё не забываем про наличие функции OutputDebugString и утилит типа DebugView от SysInternals. Подчас самый удобный способ, и по сети мониторить можно.


    № 6   17-06-2001 02:14 Ответить на это сообщение Ответить на это сообщение с цитированием
    to Evgeny:

    Спасибо за ссылку. Я тоже не просто почитал тот материал :) В моей реализации это дополнительный модуль, в котором содержатся базовая иерархия исключений (именно базовая, несколько классов всего :), функции работы с исключениями (копирование экземпляров, модификация и т.д.) и класс ExceptionList.

    Наверно будет криво тут описывать все возможности этого модуля. Скажу лишь, что его применение позволяет без усилий отслеживать прохождение по стеку каждого исключения, а ExceptionList позволяет генерировать исключения не сразу, а складывать их в список. Далее список может быть сам возбужден (raised) как исключение вручную или автоматически (например, при добавлении в него фатального исключения). Его применение может быть полезно, например, при обработке множества файлов, когда ошибка одного файла не должна мешать работе с другими. А в конце можно выдать общий результат детально.

    Ну все, понесло :) Одним словом, буйной фантазии есть, где развернуться. Нужно лишь помнить:

    1) Исключение - это обычный объект
    2) Этот объект автоматически уничтожится после обработки (on ...)
    3) raise можно применить к экземпляру ЛЮБОГО класса (а не только потомка Exception)
    4) Экземпляр исключения можно создать/поюзать/уничтожить вовсе не возбуждая его и не работая с ним как с исключением.
    5) Класс исключения может содержать любые поля и методы (как и любой другой)

    Успехов :)


    № 5   16-06-2001 16:07 Ответить на это сообщение Ответить на это сообщение с цитированием


    № 4   17-05-2001 00:58 Ответить на это сообщение Ответить на это сообщение с цитированием
    для начала по этой теме очень полезно прочитать вот этот труд:
    http://delphi.mastak.ru/articles/errors/index.html


    № 3   16-05-2001 19:40 Ответить на это сообщение Ответить на это сообщение с цитированием
    Централизованное управление давно придумано, у WinNT есть EventLog и MMC (Microsoft Management Console) - все это доступно 1) для встраивания в другие программы 2) доступно для управления/просмотра по сети. Кроме того в *nix существует SysLog сервис. Можно использовать его а можно поискать аналогичный сервис под NT (у сервиса SysLog вроде даже существует какое-то RFC). Программы, которые не поддерживают такого рода сервисы, но пишут логи, можно обмануть, написав соответствующий сервис/программу для периодического переноса их логов в стандартный (сервис сам периодически включает парсер или программа повешена на cron-е или на Scheduler service (команда AT) в NT).


    № 2   16-05-2001 17:53 Ответить на это сообщение Ответить на это сообщение с цитированием
    А те же try-catch, только в серверной программе...
    Ну и использование классов исключений в соответствии с используемой средой. Это внутренние ошибки. А прикладные кроме журнала еще и клиенту передавать надо.


    № 1   16-05-2001 17:10 Ответить на это сообщение Ответить на это сообщение с цитированием
    IMHO об этом нужно думать гуру из Microsoft. Иначе все равно универсального решения не получится.


    10—1
    Всего сообщений в теме: 10; страниц: 1; текущая страница: 1


    Добавить свое сообщение

    Отслеживать это обсуждение

    Дополнительная навигация:
    Количество сообщений на странице

    Порядок сортировки сообщений
    Новое сообщение вверху списка (сетевая хронология)
    Первое сообщение вверху списка (обычная хронология)

    Перейти на конкретную страницу по номеру
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования