![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
обработка исключений в консольном приложении
Ditrix © (2007-11-12 10:34:00)Приветствую.
собственной обработчик исключений в приложени "подключается" напр след образом
/ procedure TForm1.FormCreate(Sender: TObject);
// begin
// Application.OnException:= MyExceptionManager;
// end;
есть ли подобный прием для консольного приложения?
т.е. при отсутствии объекта Application
Reindeer Moss Eater (2007-11-12 12:34:00) [1]Если в юзез добавить Forms и использовать событие, то будет то же самое.
До первого исключения.
Ditrix (2007-11-12 12:29:00) [2]>>Reindeer Moss Eater [22]
в этом случае алгоритм работает до первого исключения.
не то....
Reindeer Moss Eater (2007-11-12 12:24:00) [3]только обработка "рассеяна" по коду. и не все отлавливает.
begin
try
except
end;
end .
Где и что здесь "рассеяно" по всему коду?
Финальную паскалевскую точку не заметил?
Ditrix (2007-11-12 12:23:00) [4]>>Это что консольное приложение?
это был пример реализации для Windows приложения
Anatoly Podgoretsky (2007-11-12 12:20:00) [5]> Ditrix (12.11.2007 12:08:13) [13]
> ShowMessage(E.Message);
Это что консольное приложение?
Ditrix (2007-11-12 12:20:00) [6]>>Обычная процедура
только обработка "рассеяна" по коду. и не все отлавливает.
Anatoly Podgoretsky (2007-11-12 12:12:00) [7]> Ditrix (12.11.2007 11:53:09) [9]
Обычная процедура
Reindeer Moss Eater (2007-11-12 12:11:00) [8]для консольного - не вижу решения, из за отсутствия Application
Зачем тебе Application, если тебе на самом деле нужен Exception?
Ditrix (2007-11-12 12:11:00) [9]>>Dib@zol [14]
...и консольные приложения писать на "С" ;)
Reindeer Moss Eater (2007-11-12 12:09:00) [10]begin
try
except
//А это что по твоему?
end;
end.
Ditrix (2007-11-12 12:08:00) [11]нет. волшебство тут не причем.
код обработчика может быть следующим
procedure MyExceptionManager(Sender: TObject; E:Exception);
begin
ShowMessage(E.Message);
MyWriteToLog(E.Message);
// вот это я не хочу вставлять каждый раз в
// try..except, тем более что не все исключения попадут в лог, а только
// явно мною обработаные. а мне нужны все!
end;
для Windows приложения это реализуется легко
для консольного - не вижу решения, из за отсутствия Application
Dib@zol (2007-11-12 12:08:00) [12]Тады выход один - не юзать Classes. Classes и SysUtils это зло :) Ловить надо рантаймы, а не ТЕксепшны =))))
Reindeer Moss Eater (2007-11-12 12:01:00) [13]И это конечно же посредством волшебства, а не обработки try except
Ditrix (2007-11-12 12:00:00) [14]>>Reindeer Moss Eater [10]
если есть Application можно использовать свой обработчик исключений.
где бы и кем бы они не инициировались.
Reindeer Moss Eater (2007-11-12 11:55:00) [15]А типа если есть Application, то это типа вариант без try except.
Приплыли.
Ditrix (2007-11-12 11:53:00) [16]2 Anatoly Podgoretsky [8]
HandleException - метод класса TApplication
экземпляра которого в консольномприложении нет.
выходит, что кроме как try..except вариантов нет ?
Anatoly Podgoretsky (2007-11-12 11:40:00) [17]Справка говорит следующее:
> An exception block that contains no exception handlers,
> but instead consists only of a list of statements, handles
> all exceptions. For example,
>
> try
> ...
> except
> HandleException;
> end;
>
> Here, the HandleException routine handles any exception
> that occurs as a result of executing the statements between
> try and except.
Reindeer Moss Eater (2007-11-12 11:08:00) [18]У меня он уже обернут. Целиком весь.
Ditrix (2007-11-12 11:07:00) [19]ну да. не ограничивает.
только не избавляет от необходимости держать руку на пульсе, не забывать оборачивать код в try except
Reindeer Moss Eater (2007-11-12 11:03:00) [20]Мой пример не ограничивает тебя в количестве модулей