On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 10
Зарегистрирован: 18.05.05
ссылка на сообщение  Отправлено: 22.08.06 19:04. Заголовок: Обработчик ошибок


Нужен самопальный обработчик ошибок, которій по максимуму просекает все возможные ошибки в ходе работы программы, пишет детальный лог-файл и старается удержать программу "на плаву".

Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 13 [только новые]







Пост N: 29
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 22.08.06 20:34. Заголовок: Re:


А что, такой в природе есть?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 58
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 23.08.06 12:50. Заголовок: Re:


смотри в SOURCE\SYS\errorsys.prg

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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 11
Зарегистрирован: 18.05.05
ссылка на сообщение  Отправлено: 29.08.06 10:01. Заголовок: Re:


suv2
Юра... Нужен готовый, чтобы прикрутил и пошло-поехало... лопатить стандартный не охота :(

ЗЫ. неужели ты думаешь, что первой мыслью не было смотреть именно в SOURCE\SYS\errorsys.prg ??? :)

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 32
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 29.08.06 10:14. Заголовок: вот на, попробуй. для 5.2e


[code]
/***
* Errorsys.prg
*
* Компилировать с опциями /m/n/w
*/


#include "error.ch"

ANNOUNCE _ntxerr

// Вывод сообщений на устройство STDERR - заблокирован - вывод в файл
// #command ? <list,...> => ?? Chr(13) + Chr(10) ; ?? <list>
// #command ?? <list,...> => OutErr(<list>)


// Используется ниже
#ifndef NTRIM
#define NTRIM(n) ( LTrim(Str(n)) )
#endif


/***
* ErrorSys()
*
* Замечание: Автоматически запускается при начале работы
*/


PROC ErrorSys()
ErrorBlock( {|e| DefError(e)} )
RETURN

FUNC ErrorExitProgram()
DefError(ERRORNEW())
RETURN

/******************************
* DefError()
*******************************/
STATIC FUNC DefError(e)

LOCAL i, cMessage, aOptions, nChoice
LOCAL fname:="report.log"

IF (e:genCode == EG_ZERODIV) // По умолчанию деление на ноль дает ноль
RETURN (0)
ENDI

IF (e:SubSystem == 'DBFNTX') .AND. ; // специфика dbfntx & Win2K based servers
(e:SubCode == 1035) .AND. ;
(e:tries < 25)
RETURN (.T.)
ENDI

IF (e:genCode == EG_LOCK) .AND. e:canDefault
// обработка специфич.ошибки ntx в 5.2e
RETURN (.F.)
ENDI

IF (e:genCode == EG_OPEN) .AND. (e:osCode == 32) .AND. e:canDefault
// Для ошибки открытия файла в сетевом окружении..установка NETERR()
// и значения SUBSYSTEM по умолчанию
NetErr(.T.)
RETURN (.F.) // NOTE
ENDI

IF (e:genCode == EG_APPENDLOCK) .AND. e:canDefault
// Для ошибки блокировки во время APPEND BLANK..установка NETERR()
// и значения SUBSYSTEM по умолчанию
NetErr(.T.)
RETURN (.F.) // NOTE
END

IF err_dejavu // определи где-нибудь перемнную PUBLIC или STATIC модуля
QUIT
ENDI
err_dejavu:=.T.

// Построение сообщения об ошибке

cMessage := ErrorMessage(e)

// Построение массива позиций для выбора
// aOptions := {"Прервать", "Завершить"} // 1,2
aOptions := {"Завершить"} // 1
IF (e:canRetry)
AAdd(aOptions, "Повторить") // 2
END
IF (e:canDefault)
AAdd(aOptions, "Пропустить") // 3
END

// активизация ALERT-меню
nChoice := 0
WHILE ( nChoice == 0 )
IF ( Empty(e:osCode) )
nChoice := Alert( cMessage, aOptions )
ELSE
nChoice := Alert( cMessage + ;
";(Код DOS-ошибки: "+NTRIM(e:osCode)+") = "+DosErrText(e:osCode), ;
aOptions )
END
IF (nChoice == NIL); EXIT; ENDI
END

IF !EMPTY(nChoice) // Выполнение по инструкции оператора
IF nChoice == 2 // Повторить - Retry
err_dejavu:=.F.
RETURN (.t.)
ELSEIF (nChoice == 3) // Пропустить - Default
err_dejavu:=.F.
RETURN (.f.)
END
END

// Отображение сообщения и стека вызов процедур (при Завершить)
IF !EMPTY(e:osCode)
cMessage += CHR(13)+CHR(10)+"Код DOS-ошибки: "+NTRIM(e:osCode)+" ("+DosErrText(e:osCode)+")"
END

SET DEFAULT TO
SET CONSOLE ON
SET ALTERNATE TO (fname) ADDITIVE
SET ALTERNATE ON

//////////////// ниже используются некоторые сист..переменные и мои функции -
//////////////// для определения условий, в которых произошла ошибка
?
? DATE(), TIME(), current_user[2],"@",work_dir,"#e =",NTRIM(err_count)
IF TYPE("t_edit_params") = "A"
? LINE(30)
? "Версия :",ALLTRIM(STR(t_edit_counter)),"от",t_edit_date
ENDI
? cMessage
?
i := 2
WHILE (!EMPTY(PROCNAME(i)))
? "Вызов из ", TRIM(PROCNAME(i)) + "(" + NTRIM(PROCLINE(i)) + ")"
i++
END
SaveVars() // моя функйция сохранения переменных, можно выкинуть
? "Информация сохранена."
?
SET ALTERNATE OFF
CLOSE ALTERNATE

// пытаемся слить состояние памяти
STRFILE(CRLF+ShowFreeMem(,,,TRUE)+CRLF,fname,TRUE) // можно выкинуть
// Возврат в DOS

ERRORLEVEL(1) // ошибка!
ExitProgram()
err_dejavu:=.F.

RETURN (.f.)
* -------------------------------- *
STATIC FUNC DosErrText(nCode)
LOCAL res:=NTRIM(nCode)
IF nCode= 2; res:="Файл не найден"
ELSEIF nCode= 3; res:="Путь доступа не найден"
ELSEIF nCode= 4; res:="Слишком много откр.файлов,;нет свободных дескрипторов"
ELSEIF nCode= 5; res:="Отказ в доступе"
ELSEIF nCode= 6; res:="Недействительный дескриптор файла"
ELSEIF nCode= 7; res:="Нарушен блок упр.распред.памяти"
ELSEIF nCode= 8; res:="Недостаточно памяти"
ELSEIF nCode=32; res:="Ошибка совместного доступа к файлу"
ELSEIF nCode=51; res:="Удаленный компьютер не отвечает"
ELSEIF nCode=53; res:="Сетевое имя не найдено"
ELSEIF nCode=80; res:="Файл уже существует"
ENDI
RETURN res

* ----------------------- *
STATIC FUNC ErrorMessage(e)

LOCAL cMessage

// Начало сообщения об ошибке
cMessage := IIF( e:severity > ES_WARNING, "Ошибка ", "Предупреждение " )

// добавление имени подсистемы (если доступно)
IF ( VALTYPE(e:subsystem) == "C" ); cMessage += e:subsystem()
ELSE; cMessage += "???"
ENDI

// добавление SUBSYSTEM кода ошибки (если доступно)
IF ( VALTYPE(e:subCode) == "N" ); cMessage += ("/" + NTRIM(e:subCode))
ELSE; cMessage += "/???"
ENDI

// добавление описания ошибки (если доступно)
IF ( VALTYPE(e:description) == "C" )
cMessage += (" " + e:description)
ENDI

// добавление либо FILENAME, либо названия операции
IF (!EMPTY(e:filename)); cMessage += (": " + e:filename)
ELSEIF (!Empty(e:operation)); cMessage += (": " + e:operation)
ENDI

RETURN (cMessage)

[/code]


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 12
Зарегистрирован: 18.05.05
ссылка на сообщение  Отправлено: 30.08.06 19:25. Заголовок: Re:


Sergy
спасибо за реальную помощь... попробую прикрутить

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 59
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 31.08.06 15:34. Заголовок: Re:


DeF пишет:

 цитата:
suv2
Юра... Нужен готовый, чтобы прикрутил и пошло-поехало... лопатить стандартный не охота :(

ЗЫ. неужели ты думаешь, что первой мыслью не было смотреть именно в SOURCE\SYS\errorsys.prg ??? :)



шо щзначит "готовый"? Чем тебе тот не готовый?

зы. Ошибки маскировать - послденее дело. Ошибки - сигнал о том, шо шо-то неправильно

я вот даже деление на ноль не маскирую... не говоря уже о том, чтобы маскировать всякую сетевуху!!! вываливается - пизды админу, значит у него сеть хуевая, рипитеры сслабые и глючные, концы обжаты хреново, сеть перегружена, пусть программирует маршруты и тп.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 60
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 31.08.06 15:34. Заголовок: Re:


админ будет хуи пинать, а ты его плохую работу будешь в еррорсис маскировать? пшел он на хуй

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 33
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 01.09.06 12:53. Заголовок: А если без эмоций ?


Юра, подскажи пожалуйста, в каком месте нужно у винды "подкрутить", чтобы не приходилось маскировать эти ошибки ?

Дело в том, что DBFNTX/1035 возникает при ЛОКАЛЬНОМ размещении таблицы, а об EG_LOCK написано на ОФИЦИАЛЬНОМ NG!

Можно, конечно, свалить всё на админа , опустить ему почки, наставить фингалов под глазами , но если разобраться по сути...



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 62
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 06.09.06 17:20. Заголовок: Re:


ХЗ.... Все время читаю страшные вещи про жуткие траблы с досом в XP... То сетевые устройства она кэширует в досе, то что-то там долго держит и не отпускает. И даже предлагаются какие-то там параметры в реестре менять...

хрен вас знает, где вы такие винды берете...

Ставим нормальную WinXP SP2 на нормальное железо - все работает сразу и без нареканий.

Никаких ошибок блокироваки тем более на локальнмо устройстве быть не может и не должно.

Если есть - сносите все нах и переставляейте винды

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 35
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 07.09.06 15:00. Заголовок: Re:


Win XP SP2 - сервером ????????????
Речь шла про Win2003
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
с WinXP как раз - никаких проблем. (тьфу*3)


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 08.09.06 08:38. Заголовок: Re:


Ну и где речь шла про сервер Win2003?
Вопрос был общего плана.


Спасибо: 0 
Цитата Ответить
постоянный участник




Пост N: 68
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 08.09.06 14:11. Заголовок: Re:


Sergy пишет:

 цитата:
Win XP SP2 - сервером ????????????
Речь шла про Win2003



фрагменты "сервер" и "2003" в этой теме ДО твоего сообщения не встречаются

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 38
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 13.09.06 14:18. Заголовок: Re:


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

и заглушка для ошибки DBFNTX/1035 появилась в этом обработчике именно по такой причине.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет