|
|
|
Проблема обработки ошибок (Error Event)
|
|||
|---|---|---|---|
|
#18+
У меня возникла проблема с обработкой ошибок в готовых приложениях. Свои приложения я разрабатываю в 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2007, 00:23 |
|
||
|
Проблема обработки ошибок (Error Event)
|
|||
|---|---|---|---|
|
#18+
Честно говоря, Project Wizrads - не пользовался. Могу только предположить, что эта штука создана, в основном, для обучения. На этапе разработки. Кроме того, объекты из _base.vcx используются в стандартном проекте примеров Solution.pjx. Т.е. тоже явно для обучения. Возможно, именно этим и объясняется такое условие. Ну, и не следует забывать, что код примеров писали люди. А людям свойственно ошибаться. Вообще-то, примеры слишком "навороченные". Там предпринята попытка учесть вообще все возможные варианты. Вероятно, это тоже сыграло свою роль. Где-то, как-то, такой код оправдан, а в другом месте и при других условиях просто забыли проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 00:45 |
|
||
|
Проблема обработки ошибок (Error Event)
|
|||
|---|---|---|---|
|
#18+
Я переводил одну из статей Дага Хеннига по обработке ошибок в VFP: http://kodu.neti.ee/~juri4/vfp60/dg_error_handling_cleaned.html надеюсь, что будет полезна Никогда не говори "невозможно", просто попробуй сделать иначе! JS (at FoxClub) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 01:30 |
|
||
|
Проблема обработки ошибок (Error Event)
|
|||
|---|---|---|---|
|
#18+
думаю, что твои приложения состоят не из единственной формы и думаю что событие error происходит только если ошибка произошла в том же объекте. предлагаю не пользоватся событиями error написать програмку procedure fox_err parameters _error, _programs, _line ... в которой и обработать всевозможные ошибки в первом методе первой формы on error do fox_err with error(), programs(), line() этот способ тоже описан в примерах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 08:48 |
|
||
|
Проблема обработки ошибок (Error Event)
|
|||
|---|---|---|---|
|
#18+
Уважамый Алексей О! Спасибо за ответ. Я пользуюсь обработчиком ошибок типа предложенного Вами Алексей О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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 02:28 |
|
||
|
Проблема обработки ошибок (Error Event)
|
|||
|---|---|---|---|
|
#18+
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. Эта ошибка приводит к тому, что если готовое приложение запускается как обычный exe-файл (_vfp.StartMode=4), то при его работе ошибки run time просто-напросто игнорируются. Это все равно, как еcли бы Вы при стандартном обработчике "Cancel/Ignore" нажимали "Ignore". Последствия понятны. Таким образом, полагаю, что можно утверждать: Приложения, разработанные на основе Foundation классов Visual Foxpro, игнорируют ошибки run time, будучи запущены самым естественным способом - как обычный exe-файл. Собственно говоря, я, прежде всего, хочу обратить внимание коллег на этот прискорбный факт, если, конечно, он им еще не известен. Ну и, во-вторых, хотелось бы выработать какой-либо общий способ исправления этой ситуации. Хотя, конечно, на мой взгляд, исправлять Foundation классы должны разрботчики FoxPro, тем более, что они рекомендуют эти классы именно как инструмент разработчика приложений. Но как их к этому подвигнуть? С уважением, Dinozavr. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 01:23 |
|
||
|
Проблема обработки ошибок (Error Event)
|
|||
|---|---|---|---|
|
#18+
почему Вы считаете,что авторТем более обидно, что все это сводится на-нет досадной ошибкой из кода метода еррор классов я вижу наоборот хитроумную задумку не показать под рантаймом ошибок и не дать приложению упасть (неплохо-бы прикрутить просто там вывод этих ошибок в какой-нибудь лог-файл) а под разработчиком Вы уже можете видеть эти ошибки так разработчики из фокстим придумали. вот и всего делов. тем-более Вам никто не мешает, действительно подправить эти классы. никто не мешает пронаследовать классы и у классов-наследников переписать неустраивающие Вас методы. далее. в принципе эти классы являются неплохим примером и в них можно чего-то полезное подсмотреть, а так к примеру все пишут библиотеки для себя сами, я к примеру никогда не пользовался ими (единственное - подсматриваю иногда). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 10:10 |
|
||
|
Проблема обработки ошибок (Error Event)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, уважаемые коллеги! Сердечно благодарю всех за обсуждение проблемы использования Foundation классов Visual Foxpro! Похоже на то, что никто, кроме меня, этими классами всерьез не пользуется, а значит и проблем с игнорированием ошибок не имеет. Что касается причины такого поведения этих классов, то она вполне понятна - так в них написана обработка ошибок. Лично для себя я знаю и пути решения проблемы, а больше никому это, повидимому, и не нужно. Поэтому предлагаю эту тему закрыть. Всегда Ваш, Dinozavr. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2007, 01:20 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34420028&tid=1589627]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 390ms |

| 0 / 0 |
