Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обработка ошибок / 18 сообщений из 18, страница 1 из 1
17.01.2008, 14:47
    #35068590
faustt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
Привет!
Делаю проет на ВФП9. Проект довольно большой и вкаждую форму и процедуру добавлять обработчик ошибок не красиво. Можно ли както сделать чтобы на все ошибки сгенерированные программой вызывалась определенная програмка, к примеру:

Procedure errhand
Parameter merror, Mess, mess1, mprog, mlineno

fp=Fopen('errlog.txt',1)

If fp=-1
Messagebox("Unable to open errlog.txt",16)
Else
Fputs(fp,"---------------------" + Transform(Datetime()) + "---------------------")
Fputs(fp,"Error number: " + Ltrim(Str(merror)))
Fputs(fp,"Error message: " + Mess)
Fputs(fp,"Line of code with error: " + mess1)
Fputs(fp,"Line number of error: " + Ltrim(Str(mlineno)))
Fputs(fp,"Program with error: " + mprog)
Fclose(fp)
Endif

Спасибо.
...
Рейтинг: 0 / 0
17.01.2008, 14:52
    #35068617
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
faustt... Проект довольно большой и вкаждую форму и процедуру добавлять обработчик ошибок не красиво. Можно ли както сделать чтобы на все ошибки сгенерированные программой вызывалась определенная програмка, к примеру:


Согласен, не красиво, поэтому надо добавлять обработку ошибок в классы обьектов, а уж потом принимать решение вызывать или нет глобальный обработчик.
...
Рейтинг: 0 / 0
17.01.2008, 14:53
    #35068620
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
Код: plaintext
on error do MyError with error(),program(),message(),message( 1 ),lineno()
где MyError твой обработчик ошибок.
Метод Error() имеет приоритет перед ON ERROR, поэтому должен быть пустой
...
Рейтинг: 0 / 0
17.01.2008, 15:05
    #35068693
faustt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
Dima T
Код: plaintext
on error do MyError with error(),program(),message(),message( 1 ),lineno()
где MyError твой обработчик ошибок.
Метод Error() имеет приоритет перед ON ERROR, поэтому должен быть пустой

Эта команда вызовет обработчик, это я знаю как сделать. Я не знаю где мне ее прописать, чтобы она выполнялась глобально - не зависимо от формы.
...
Рейтинг: 0 / 0
17.01.2008, 15:06
    #35068701
faustt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
PaulWist faustt... Проект довольно большой и вкаждую форму и процедуру добавлять обработчик ошибок не красиво. Можно ли както сделать чтобы на все ошибки сгенерированные программой вызывалась определенная програмка, к примеру:


Согласен, не красиво, поэтому надо добавлять обработку ошибок в классы обьектов, а уж потом принимать решение вызывать или нет глобальный обработчик.

А где дефинируется глобальный обработчик?
...
Рейтинг: 0 / 0
17.01.2008, 15:07
    #35068707
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
faustt Dima T
Код: plaintext
on error do MyError with error(),program(),message(),message( 1 ),lineno()
где MyError твой обработчик ошибок.
Метод Error() имеет приоритет перед ON ERROR, поэтому должен быть пустой

Эта команда вызовет обработчик, это я знаю как сделать. Я не знаю где мне ее прописать, чтобы она выполнялась глобально - не зависимо от формы.
Обычно его в стартовом модуле прописывают.
...
Рейтинг: 0 / 0
17.01.2008, 15:09
    #35068712
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
faustt[quot Dima T]... чтобы она выполнялась глобально - не зависимо от формы.
Если у формы/контрола Error() пустой, то вызовется по ON ERROR иначе вызов из Error() прописывать.
...
Рейтинг: 0 / 0
17.01.2008, 15:10
    #35068719
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
...
Рейтинг: 0 / 0
17.01.2008, 15:14
    #35068740
faustt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
Dima T faustt[quot Dima T]... чтобы она выполнялась глобально - не зависимо от формы.
Если у формы/контрола Error() пустой, то вызовется по ON ERROR иначе вызов из Error() прописывать.

А все понял, благодарствую.
...
Рейтинг: 0 / 0
17.01.2008, 15:15
    #35068745
faustt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
ВладимирМ Главный (стартовый) файл проекта

Спасибо, почитаю. Полезная инфа.
...
Рейтинг: 0 / 0
17.01.2008, 15:27
    #35068824
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
faustt Dima T faustt[quot Dima T]... чтобы она выполнялась глобально - не зависимо от формы.
Если у формы/контрола Error() пустой, то вызовется по ON ERROR иначе вызов из Error() прописывать.

А все понял, благодарствую.

По любому Вам придется перегружать метод Error контролов, поэтому лучше сразу в классе прописать вызов глобального обработчика или вызов соответствующего метода родительского обьекта. Это необходимо сделать, поскольку в дальнейшем возникнут ситуации когда нужно будет подавить ошибку в методе Error или наоборот инициировать.
...
Рейтинг: 0 / 0
17.01.2008, 15:37
    #35068897
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
PaulWistПо любому Вам придется перегружать метод Error контролов, поэтому лучше сразу в классе прописать вызов глобального обработчика или вызов соответствующего метода родительского обьекта. Это необходимо сделать, поскольку в дальнейшем возникнут ситуации когда нужно будет подавить ошибку в методе Error или наоборот инициировать.
Насчет "По любому" не согласен. Error() крайне редко использую. Тем более в VFP9 есть TRY ... CATCH что еще сильнее сужает область применения Error()
...
Рейтинг: 0 / 0
17.01.2008, 16:19
    #35069104
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
Dima T
Насчет "По любому" не согласен. Error() крайне редко использую. Тем более в VFP9 есть TRY ... CATCH что еще сильнее сужает область применения Error()

Не понял, Вы любую конструкцию в любом методе оборачиваете в TRY ... CATCH, или ON Error ловит все ошибки?
...
Рейтинг: 0 / 0
17.01.2008, 16:57
    #35069270
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
PaulWist
Не понял, Вы любую конструкцию в любом методе оборачиваете в TRY ... CATCH, или ON Error ловит все ошибки? ON ERROR ловит все ошибки. некоторые обрабатывает, на остальные спрашивает "Пропустить", "Повторить", "Выход". Во многих случаях достаточно сказать юзеру "пропустить" больное место, а потом разбираться с причиной ошибки.

TRY ... CATCH если невозможно быть уверенным в отсутствии ошибок во фрагменте кода. Например обработка чужой DBF у которой может быть испорчен заголовок. Ошибка при открытии.

Error() - только в одном случае использовал с объектом IE он почему-то периодически ошибку 1426 дает. Глобально ее проигнорировать неправильно. и в TRY ... CATCH не обернуть.

Error() еще не люблю за неудобность пользоваться отлачиком. ON ERROR в стартовом модуле, который при разработке на запускается, а штатный обработчик сам по кнопке SUSPEND отладчик вызывает на строке с ошибкой. Удобно.
...
Рейтинг: 0 / 0
18.01.2008, 09:30
    #35070399
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
Dima T
Error() - только в одном случае использовал с объектом IE он почему-то периодически ошибку 1426 дает. Глобально ее проигнорировать неправильно. и в TRY ... CATCH не обернуть.

Метод .Refresh() у IE забейте NODEFAULT. Скорей всего, ошибки 1426 не будет в таком разе.
...
Рейтинг: 0 / 0
18.01.2008, 10:32
    #35070599
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
Kruchinin Pahan Dima T
Error() - только в одном случае использовал с объектом IE он почему-то периодически ошибку 1426 дает. Глобально ее проигнорировать неправильно. и в TRY ... CATCH не обернуть.

Метод .Refresh() у IE забейте NODEFAULT. Скорей всего, ошибки 1426 не будет в таком разе.
Спасибо. Попробую
...
Рейтинг: 0 / 0
18.01.2008, 19:20
    #35072640
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
>>> Error() еще не люблю за неудобность пользоваться отлачиком. ON ERROR в стартовом модуле, который при разработке на запускается, а штатный обработчик сам по кнопке SUSPEND отладчик вызывает на строке с ошибкой. Удобно.

ПОДПИСЛАСЯ
1 момент добавлю
ИМХО лучфше добавлять инфо об ошибке не в текст. файл
а в дбф -
удобней тем что если вдруг тебе понадобится
скажем list stat , list memo их можно в мемо поля файла ошибок запихнуть
и лучше писать этот файл на СЕТЬ -от разных юзеров - чтобы не бегать по лок. машинам
- ну а структуру ты можешь любую как твоя душа пожелает :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
16.02.2009, 10:05
    #35818892
Alex-ZZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок
Вопрос по поводу PROGRAM(). В ней надо задать уровень вложенности выполняемой программы если ничего не задавать то покажет ту которая выполняеться на данный момент если 0 или 1 то основную программу. Вопрос тако у меня выполняеться prg, в ней выполняеться процедура и PROGRAM() выдает мне имя процедуры а prg уже приходиться искать вручную, как мне определить уровень вложенности, чтобы показывало имя prg?
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обработка ошибок / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]