Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
ВнизЧто-то вот подумалось. Подавить ошибки, кто-то когдато спрашивал Найти похожие ветки
← →
Vlad Oshin © (2007-07-27 09:56) [0]ставим сюда: Application.OnException := MyProc;
вот такое в своем модуле:
procedure TMyComp.MyProc(Sender: TObject; E: Exception);
begin
if EnabledM then showmessage(e.Message);
Fmessage:=datetimetostr(now)+"|"+e.Message;
end;
и программа не вывалит какое либо окно, необработанное или не подавленное нами же
За метлой уже пошел :)
← →
ya00011 (2007-07-27 09:58) [1]Гыы... долго думал то?:)))
← →
Kolan © (2007-07-27 10:17) [2]> За метлой уже пошел :)
Еще есть такой класс ApplicationEvents…
> и программа не вывалит какое либо окно
Я лично вывод окна тоже подавляю, так как обычно это прерывает работу пользователя(в том же фотошопе меня это просто бесит)…
← →
umbra © (2007-07-27 10:22) [3]
> и программа не вывалит какое либо окно, необработанное или
> не подавленное нами же
И что, при этом работа продолжится как ни в чем не бывало?
← →
Alkid © (2007-07-27 10:26) [4]
> и программа не вывалит какое либо окно, необработанное или
> не подавленное нами же
Дурь какая-то. Смысл-то в это какой? Я всегда, дурак, думал, что надо код писать так, что бы он сам свои ошибки обрабатывал и юзеру эксепшенов не выбрасывал. Оказывается я ошибался. Пишем кривую программу, а потом хором глушим все сообщения об ошибках динамитом. Красота!
← →
DVM © (2007-07-27 10:31) [5]
> Alkid ©
Ты конечно прав, но все учесть невозможно, а бывают ситуации, когда лучше, чтобы приложение продолжило работу, проглотив исключение и записав эту информацию, например в лог, чем вообще остановилось. Пусть даже утечка памяти возникнет. Потом по логу проблему можно быстрее устранить будет.
← →
Vlad Oshin © (2007-07-27 10:38) [6]
> И что, при этом работа продолжится как ни в чем не бывало?
нет, дальше не будет работать, просто ошибка не вывалит
> Я всегда, дурак, думал, что надо код писать так, что бы
> он сам свои ошибки обрабатывал и юзеру эксепшенов не выбрасывал
100%
Например, на демонстрации или поджимают сроки
надо просто все заглушить и все. Потом доделать, разумеется.
← →
SlymRO © (2007-07-27 10:39) [7]Vlad Oshin © (27.07.07 10:38) [6]
Что в россии временно... то навсегда :(
← →
Игорь Шевченко © (2007-07-27 10:42) [8]
> Потом доделать, разумеется.
нет ничего более постоянного, чем временное.
И все-таки, лишний раз убеждаюсь, что программистов мало. Это удручает.
← →
Sandman29 © (2007-07-27 11:07) [9]Java рулит в этом отношении, потому как заставляет программистов задуматься над тем, что делать с каждой ошибкой.
← →
DiamondShark © (2007-07-27 11:51) [10]
> потому как заставляет программистов задуматься
Почему жаба не заставляет в коде, содержащем выражение типа
x = a / b * c
написать отлов арифметического переполнения и деления на ноль или задекларировать их в throws?
← →
Alkid © (2007-07-27 11:56) [11]
> Java рулит в этом отношении, потому как заставляет программистов
> задуматься над тем, что делать с каждой ошибкой.
Ой, Джава - это другой перебор :)
ИХМО checked exceptions - это пример смирительной рубашки. Не зря же там ввели RunTime Exception, при помощи которой можно класть болт на декларацию исключений.
← →
Sandman29 © (2007-07-27 12:14) [12]DiamondShark © (27.07.07 11:51) [10]
А я и не говорил, что она лишена недостатков. Но уж лучше хоть что-то, чем вообще ничего.
Зы. Ни разу не видел исключение при делении на ноль в своих java-программах :)
← →
Sandman29 © (2007-07-27 12:17) [13]Alkid © (27.07.07 11:56) [11]
Ага, а Error ввели, чтобы каждый оператор не заворачивать в обработчик системной ошибки виртулаьной машины? :)
← →
clickmaker © (2007-07-27 14:46) [14]
> программистов мало. Это удручает
почему?
меньше конкуренции... )
← →
Игорь Шевченко © (2007-07-27 14:55) [15]clickmaker © (27.07.07 14:46) [14]
> почему?
> меньше конкуренции... )
Отсутствие конкуренции ведет к застою. А кому приятно ощущать себя застоявшимся ? :)
← →
oxffff © (2007-07-27 15:30) [16]
> Vlad Oshin © (27.07.07 09:56)
Так наверно будет удобнее.
procedure Suppresser(Obj:Tobject;Sender: TObject; E: Exception);
const SuppressException:TMethod=(Code:@Suppresser;Data:nil);
procedure Suppresser(Obj:Tobject;Sender:TObject;E:Exception);
begin
//Do not use obj ref
end;
Application.OnException:=TExceptionEvent(SuppressException);
Или даже так.
procedure Suppresser;
const SuppressException:TMethod=(Code:@Suppresser;Data:nil);
procedure Suppresser;
begin
end;
Application.OnException:=TExceptionEvent(SuppressException);
← →
Dimka Maslov © (2007-07-27 17:23) [17]Kolan © (27.07.07 10:17) [2] Прав. Есть такая штука как ApplicationEvents. Будучи один раз кинута на форму она переопределяет внутрение указатели на события объекта Application, после чего до них уже недостучаться. Я тоже долгно ломал голову, пока не протрассировал модкль Forms.
← →
P_ (2007-07-27 18:39) [18]Зачем же так?
try
...наш код...
except on E:Exception do
Logger.ErrorLog("имя модуля, метода и метки в методе", E.Message);
end;
← →
Petr V. Abramov © (2007-07-27 19:45) [19]> P_ (27.07.07 18:39) [18]
не уфигеешь? вот если соединить с форматтером Call-стека, который предлагал Alex Konshin - тогда да, да на верхнем каком-нить уровне.
← →
P_ (2007-07-27 20:02) [20]
> Petr V. Abramov © (27.07.07 19:45) [19]
>
> > P_ (27.07.07 18:39) [18]
> не уфигеешь? вот если соединить с форматтером Call-стека,
> который предлагал Alex Konshin - тогда да, да на верхнем
> каком-нить уровне.
DELPHI32.DCI на что?
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.063 c