powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема обработки ошибок (Error Event)
8 сообщений из 8, страница 1 из 1
Проблема обработки ошибок (Error Event)
    #34413777
Dinozavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня возникла проблема с обработкой ошибок в готовых приложениях. Свои приложения я разрабатываю в VFP 6.0 под Windows98. Впрочем, проблема остается и для VFP 9.0.
Все мои приложения построены так, как это делает Project Wizard. Готовые приложения дистрибутируются в виде exe-файлов, полученных с помощью Setup Wizard.

Короче говоря, я работаю максимально близко к тому, что предлагают разработчики FoxPro (это не принципиальная позиция - так уж случилось).

И вот все идет нормально - приложения работают, пользователи довольны, но вдруг я случайно обнаруживаю, что многие ошибки исполнения игнорируются, несмотря на то, что их обработка предусмотрена (и отлажена) в соответствующих методах объекта Application.

Я, конечно, понимаю, что дело в коде метода Error большинства базовых (Foundation) классов, где практически в начале написано:
....
IF this.lIgnoreErrors OR _vfp.StartMode>0
RETURN .F.
ENDIF
.....

Поскольку _vfp.StartMode = 0 только в случае запуска FoxPro для интерактивной работы, а при запуске его как exe-файла _vfp.StartMode = 4, то ошибка, например, произошедшая в при исполнении кода метода Click кнопки класса _commandbutton, будет игнорирована, а не передана наверх, т.е. в форму и далее - в Application.

Так вот мои вопросы:

1. Такая обработка ошибок методом Error базовых классов имеет глубокий смысл, которого я не понимаю, или это все-таки недостаток системы.
2. Как, по-Вашему следует поступить, чтобы обеспечить обработку ошибок в run-time?

Раньше я просто изменил код метода Error всех базовых классов на:

IF this.lIgnoreErrors OR ВETWEEN(_vfp.StartMode, 1, 3)
RETURN .F.
ENDIF

Но это решение не кажется мне оптимальным с методической точки зрения. Может быть, нужно делать новую библиотеку, где переопределять все Foundation классы? Или что-то иное?

Посоветуйте, пожалуйста, старому динозавру, который помнит еще машинные коды ЭВМ Урал-4.

С уважением, Dinozavr.
...
Рейтинг: 0 / 0
Проблема обработки ошибок (Error Event)
    #34417035
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, Project Wizrads - не пользовался. Могу только предположить, что эта штука создана, в основном, для обучения. На этапе разработки.

Кроме того, объекты из _base.vcx используются в стандартном проекте примеров Solution.pjx. Т.е. тоже явно для обучения.

Возможно, именно этим и объясняется такое условие.

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

Вообще-то, примеры слишком "навороченные". Там предпринята попытка учесть вообще все возможные варианты. Вероятно, это тоже сыграло свою роль. Где-то, как-то, такой код оправдан, а в другом месте и при других условиях просто забыли проверить.
...
Рейтинг: 0 / 0
Проблема обработки ошибок (Error Event)
    #34417055
Jurisfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я переводил одну из статей Дага Хеннига по обработке ошибок в VFP:

http://kodu.neti.ee/~juri4/vfp60/dg_error_handling_cleaned.html

надеюсь, что будет полезна

Никогда не говори "невозможно", просто попробуй сделать иначе!
JS (at FoxClub)
...
Рейтинг: 0 / 0
Проблема обработки ошибок (Error Event)
    #34417239
Алексей О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
думаю, что твои приложения состоят не из единственной формы и думаю что событие error происходит только если ошибка произошла в том же объекте.
предлагаю не пользоватся событиями error
написать програмку
procedure fox_err
parameters _error, _programs, _line
...
в которой и обработать всевозможные ошибки

в первом методе первой формы
on error do fox_err with error(), programs(), line()
этот способ тоже описан в примерах
...
Рейтинг: 0 / 0
Проблема обработки ошибок (Error Event)
    #34420028
Dinozavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважамый Алексей О!

Спасибо за ответ.

Я пользуюсь обработчиком ошибок типа предложенного Вами

Алексей Оon error do fox_err with error(), programs(), line()

Однако дело в том, что при запуске exe-приложения из папки (как обычной программы), этот обработчик не срабатывает, а при запуске из окна FoxPro - все в порядке.

Боюсь, что здесь дело именно в Foundation классах FoxPro. В этом случае, все приложения, построенные на этих классах - дефектны.

Если это так, то надо это как-то довести до сведения разработчиков FoxPro, но я не знаю как.

С уважением, Dinozavr.

P.S. Я этот вопрос поднял также на форуме foxclub.ru. Но поскольку я Dinozavr, то я еще не научился указывать в сообщении ссылки, а там я привел код тестовой программы, где все явно видно.

Поэтому повторю его здесь:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
* TestErr_Main.prg

PUBLIC oform1

SET CLASSLIB TO ("c:\microsoft visual foxpro 9\ffc\_base.vcx") ADDITIVE

ON ERROR DO ErrTrap WITH Error()

oform1=NEWOBJECT("form1")
oform1.Show

READ EVENTS

IF VARTYPE(oform1) = "O" 
	RELEASE oform1
ENDIF

CANCEL

*-------------------------------------*

PROCEDURE ErrTrap
LPARAMETERS liErrNo
MESSAGEBOX("Я поймал ошибку № "+TRANSFORM(liErrNo) + " !")
RETURN
*------------------------*

DEFINE CLASS form1 AS _form

	Height =  169 
	Width =  375 
	DoCreate = .T.
	AutoCenter = .T.
	Caption = "Form1"
	MaxButton = .F.
	MinButton = .F.
	Name = "Form1"

	ADD OBJECT cmderror AS _commandbutton WITH ;
		Top =  72 , ;
		Left =  60 , ;
		Caption = "Ошибка №5", ;
		Name = "cmdError"

	ADD OBJECT cmdcancel AS _commandbutton WITH ;
		Top =  72 , ;
		Left =  216 , ;
		Caption = "Выход", ;
		Name = "cmdCancel"

	PROCEDURE Unload
		CLEAR EVENTS
	ENDPROC

	PROCEDURE cmderror.Click
		ERROR  5 		&& Генерация ошибки - номер может быть любым																		
	ENDPROC

	PROCEDURE cmdcancel.Click
		ThisForm.Release()
	ENDPROC

ENDDEFINE
*
*-- EndDefine: form1
**************************************************
...
Рейтинг: 0 / 0
Проблема обработки ошибок (Error Event)
    #34423245
Dinozavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JurisfoxЯ переводил одну из статей Дага Хеннига по обработке ошибок в VFP:
http://kodu.neti.ee/~juri4/vfp60/dg_error_handling_cleaned.html
надеюсь, что будет полезна

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

Однако дело не в том, как надо организовывать обработку ошибок, а в том, как она фактически организована в Foundation классах Visual FoxPro, т.е. в классах, которые разработчиками FoxPro предлагаются нам в качестве надстройки над базовыми классами и основы для разработки наших приложений.

Насколько я разобрался в ситуации, в методах Error всех классов библиотеки ...\ffc\_base.vcx допущена одна и та же ошибка, а именно:

Код: plaintext
1.
2.
3.
IF this.lIgnoreErrors OR _vfp.StartMode> 0  && Здесь this.lIgnoreErrors=.F. 
     RETURN .F.
ENDIF
   ... далее - запуск глобальногo обработчика ошибок, заданного командой ON ERROR

Эта ошибка приводит к тому, что если готовое приложение запускается как обычный exe-файл (_vfp.StartMode=4), то при его работе ошибки run time просто-напросто игнорируются. Это все равно, как еcли бы Вы при стандартном обработчике "Cancel/Ignore" нажимали "Ignore". Последствия понятны.

Таким образом, полагаю, что можно утверждать:

Приложения, разработанные на основе Foundation классов Visual Foxpro, игнорируют ошибки run time, будучи запущены самым естественным способом - как обычный exe-файл.

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

Ну и, во-вторых, хотелось бы выработать какой-либо общий способ исправления этой ситуации. Хотя, конечно, на мой взгляд, исправлять Foundation классы должны разрботчики FoxPro, тем более, что они рекомендуют эти классы именно как инструмент разработчика приложений. Но как их к этому подвигнуть?

С уважением, Dinozavr.
...
Рейтинг: 0 / 0
Проблема обработки ошибок (Error Event)
    #34423598
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему Вы считаете,что
авторТем более обидно, что все это сводится на-нет досадной ошибкой

из кода метода еррор классов
я вижу наоборот хитроумную задумку

не показать под рантаймом ошибок
и не дать приложению упасть
(неплохо-бы прикрутить просто там вывод этих ошибок в какой-нибудь
лог-файл)

а под разработчиком
Вы уже можете видеть эти ошибки

так разработчики из фокстим придумали.
вот и всего делов.

тем-более Вам никто не мешает, действительно
подправить эти классы.

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

далее.
в принципе эти классы являются неплохим примером
и в них можно чего-то полезное подсмотреть,
а так к примеру все пишут библиотеки для себя сами,
я к примеру никогда не пользовался ими
(единственное - подсматриваю иногда).
...
Рейтинг: 0 / 0
Проблема обработки ошибок (Error Event)
    #34426212
Dinozavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые коллеги!

Сердечно благодарю всех за обсуждение проблемы использования Foundation классов Visual Foxpro!

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

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

Поэтому предлагаю эту тему закрыть.

Всегда Ваш, Dinozavr.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема обработки ошибок (Error Event)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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