Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

обработка исключений в консольном приложении   Найти похожие ветки 

 
Ditrix ©   (2007-11-12 10:34) [0]

Приветствую.
собственной обработчик исключений  в приложени "подключается"  напр след образом
/ procedure TForm1.FormCreate(Sender: TObject);
// begin
//   Application.OnException:= MyExceptionManager;
// end;

есть ли подобный прием для консольного приложения?
т.е. при отсутствии объекта  Application


 
Reindeer Moss Eater ©   (2007-11-12 10:44) [1]

а зачем он там?

begin
try
except
end;
end.


 
Ditrix ©   (2007-11-12 10:53) [2]

хочется обрабатывать в одном модуле (например вести лог), не заботясь о  "а не забыл ли я try except использовать"


 
Reindeer Moss Eater ©   (2007-11-12 10:59) [3]

Мой пример делает это в одном модуле.
Project1.dpr


 
Ditrix ©   (2007-11-12 11:02) [4]

мне одного модуля не достаточно :)
даже для консольного приложения


 
Reindeer Moss Eater ©   (2007-11-12 11:03) [5]

Мой пример не ограничивает тебя в количестве модулей


 
Ditrix ©   (2007-11-12 11:07) [6]

ну да. не ограничивает.
только не избавляет от необходимости держать руку на пульсе, не забывать оборачивать код в try except


 
Reindeer Moss Eater ©   (2007-11-12 11:08) [7]

У меня он уже обернут. Целиком весь.


 
Anatoly Podgoretsky ©   (2007-11-12 11:40) [8]

Справка говорит следующее:

> 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.


 
Ditrix ©   (2007-11-12 11:53) [9]

2 Anatoly Podgoretsky [8]

HandleException - метод класса TApplication
экземпляра которого в консольном приложении нет.

выходит, что кроме как try..except вариантов нет ?


 
Reindeer Moss Eater ©   (2007-11-12 11:55) [10]

А типа если есть Application, то это типа вариант без try except.
Приплыли.


 
Ditrix ©   (2007-11-12 12:00) [11]

>>Reindeer Moss Eater [10]
если есть Application можно использовать свой обработчик исключений.
где бы и кем бы они не инициировались.


 
Reindeer Moss Eater ©   (2007-11-12 12:01) [12]

И это конечно же посредством волшебства, а не обработки try except


 
Ditrix ©   (2007-11-12 12:08) [13]

нет. волшебство тут не причем.
код обработчика может быть следующим

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) [14]

Тады выход один - не юзать Classes. Classes и SysUtils это зло :) Ловить надо рантаймы, а не ТЕксепшны =))))


 
Reindeer Moss Eater ©   (2007-11-12 12:09) [15]

begin
try
except
//А это что по твоему?
end;
end.


 
Ditrix ©   (2007-11-12 12:11) [16]

>>Dib@zol [14]
...и консольные приложения писать на "С" ;)


 
Reindeer Moss Eater ©   (2007-11-12 12:11) [17]

для консольного - не вижу решения, из за отсутствия Application

Зачем тебе Application, если тебе на самом деле нужен Exception?


 
Anatoly Podgoretsky ©   (2007-11-12 12:12) [18]

> Ditrix  (12.11.2007 11:53:09)  [9]

Обычная процедура


 
Ditrix ©   (2007-11-12 12:20) [19]

>>Обычная процедура
только обработка "рассеяна" по коду.  и не все отлавливает.


 
Anatoly Podgoretsky ©   (2007-11-12 12:20) [20]

> Ditrix  (12.11.2007 12:08:13)  [13]

> ShowMessage(E.Message);

Это что консольное приложение?


 
Ditrix ©   (2007-11-12 12:23) [21]

>>Это что консольное приложение?
это был пример реализации для Windows приложения


 
Reindeer Moss Eater ©   (2007-11-12 12:24) [22]

только обработка "рассеяна" по коду.  и не все отлавливает.

begin
try
except
end;
end.

Где и что здесь "рассеяно" по всему коду?
Финальную паскалевскую точку не заметил?


 
Ditrix ©   (2007-11-12 12:29) [23]

>>Reindeer Moss Eater  [22]
в этом случае алгоритм работает до первого исключения.
не то....


 
Reindeer Moss Eater ©   (2007-11-12 12:34) [24]

Если в юзез добавить Forms и использовать событие, то будет то же самое.
До первого исключения.



Страницы: 1 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.032 c
3-1185587116
wsv
2007-07-28 05:45
2007.12.09
Написать запрос


15-1194337973
Evanescence
2007-11-06 11:32
2007.12.09
Кажется, я убил вирус :)


15-1194525911
Sonia
2007-11-08 15:45
2007.12.09
Может еще кто-то помнит Фортран....


2-1194959385
Kolan
2007-11-13 16:09
2007.12.09
Почему TEditCut работает для TSyncMemo, а TSearchFind нет?


2-1195193315
DevilDevil
2007-11-16 09:08
2007.12.09
помогите выделить TTreeNode