powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
16 сообщений из 16, страница 1 из 1
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32754514
Alexander Kot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем:
Сабдж собственно.
Нужно для правильного еррор хендлинга.
Во всех функциях есть он-еррор обработчики....
Но как решить пришло ли время покызывать меседж о непредвиденном ерроре или можно рейзить его вверх?
Нарвавшись на <Non-Basic Code> в стеке приложение улетит....
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32754588
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Err.Source ?
Но я не очень понимаю фразу Alexander Kot Но как решить пришло ли время покызывать меседж о непредвиденном ерроре или можно рейзить его вверх? Ошибку в любом случае надо поднять наверх до уровня отображения. Чтобы показать весь стек.
Скажем если возникла ошибка на сервере БД - это ошибка в <Non-Basic Code> , но имеет смысл показать какие методы каких классов не отработали и так до самого верхнего уровня (до нажатия на кнопку например)
Alexander KotНарвавшись на <Non-Basic Code> в стеке приложение улетит.... Не улетит, если <Non-Basic Code> грамотно написан.
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32754637
Alexander Kot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey KudinovErr.Source ?
Но я не очень понимаю фразу Alexander Kot Но как решить пришло ли время покызывать меседж о непредвиденном ерроре или можно рейзить его вверх? Ошибку в любом случае надо поднять наверх до уровня отображения. Чтобы показать весь стек.
Скажем если возникла ошибка на сервере БД - это ошибка в <Non-Basic Code> , но имеет смысл показать какие методы каких классов не отработали и так до самого верхнего уровня (до нажатия на кнопку например)
Alexander KotНарвавшись на <Non-Basic Code> в стеке приложение улетит.... Не улетит, если <Non-Basic Code> грамотно написан.

Я и хочу поднять ее наверх :)
Приложение старое и громадное (60М чистого кода....), в свое время был совершен подвиг и по всему нему расставлен еррор хендлинг, но доделано это увы не было.

Что именно значит грамотно написанн?
Не всегда этот <Non-Basic Code> подконтролен
Пример: в обработчике события Recordset - a WillChangeRecord сделайте Err.Raise.....
Вызовите Update у рекордсета
И как получить этот самый ексепшн в той функции что дернула Update?
Куда уж грамотнее чем MDAC :)
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32754823
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Kot
Что именно значит грамотно написанн?
Не всегда этот <Non-Basic Code> подконтролен
Пример: в обработчике события Recordset - a WillChangeRecord сделайте Err.Raise.....
Вызовите Update у рекордсета
И как получить этот самый ексепшн в той функции что дернула Update?
Куда уж грамотнее чем MDAC :) В данном случае никак, увы. Но это не только к ADODB.Recordset-у относится, с VB событиями тоже самое. Решением проблемы может быть:
1 в обработчике WillChangeRecord запоминание объекта Err в переменную, без поднятия ошибки.
2 В методе, где вызывается Update после его вызова проверить: если эта переменная не пустая - поднять ошибку с ней наверх.
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32754844
Alexander Kot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Kudinov Alexander Kot
Что именно значит грамотно написанн?
Не всегда этот <Non-Basic Code> подконтролен
Пример: в обработчике события Recordset - a WillChangeRecord сделайте Err.Raise.....
Вызовите Update у рекордсета
И как получить этот самый ексепшн в той функции что дернула Update?
Куда уж грамотнее чем MDAC :) В данном случае никак, увы. Но это не только к ADODB.Recordset-у относится, с VB событиями тоже самое. Решением проблемы может быть:
1 в обработчике WillChangeRecord запоминание объекта Err в переменную, без поднятия ошибки.
2 В методе, где вызывается Update после его вызова проверить: если эта переменная не пустая - поднять ошибку с ней наверх.

Дык это был только частный пример......
Собственно меня може т спасти только определение что данный процедур был вызван из <Non-Basic Code>
Даже аккуратное накопление - раскрутка стека в еррор хендлере не поможет, через нее это не определить.....

Но ведь среда по Ctrl-L эту информацию откудото берет.....
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32754949
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Kot
Дык это был только частный пример......
Собственно меня може т спасти только определение что данный процедур был вызван из <Non-Basic Code>
Даже аккуратное накопление - раскрутка стека в еррор хендлере не поможет, через нее это не определить.....

Но ведь среда по Ctrl-L эту информацию откудото берет..... Ну если под <Non-Basic Code> понимать код не вашего приложения, то проблемы нет - вы всегда можете определить это вы подняли ошибку или нет.
Говоря о "частном примере" - а много ли таких ситуаций ? Трудности с ловлей ошибок возникших в обработчиках событий, а главное их ассоциирование с методами, которые привели к вызову обработчика - да, они есть, но они решаемы. Что еще ?
По поводу получения Call Stack-а , последний пост.
Но я никогда не видел реализацию этого в реальности.
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32754974
Alexander Kot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Kudinov Ну если под <Non-Basic Code> понимать код не вашего приложения, то проблемы нет - вы всегда можете определить это вы подняли ошибку или нет.
Говоря о "частном примере" - а много ли таких ситуаций ? Трудности с ловлей ошибок возникших в обработчиках событий, а главное их ассоциирование с методами, которые привели к вызову обработчика - да, они есть, но они решаемы. Что еще ?
По поводу получения Call Stack-а , последний пост.
Но я никогда не видел реализацию этого в реальности.
Спасибо за ссылку, покопаюсь.....

Еще есть:
1) инициализация разных ActiveX ов и их события.....
2) в приложении есть псевдомодальный режим за счет "повторного входа" в процедуру олбработки месаджей не через басик код... (но это хоть свое)
3) Есть еще несколько хитрых кусков....

1й самый сложный....
Остальные все "свои" т.е. код доступен.
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32755012
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander KotЕще есть:
1) инициализация разных ActiveX ов и их события.....
2) в приложении есть псевдомодальный режим за счет "повторного входа" в процедуру олбработки месаджей не через басик код... (но это хоть свое)
3) Есть еще несколько хитрых кусков....

1й самый сложный....
Остальные все "свои" т.е. код доступен. А что сложного ? Вы приводили пример с ADO - там была проблема с событием, которая решаема. В чем проблема с другими ActiveX ?
Бывают правда чудесные компоненты (напр. Crystal Reports), которые вместо нормальной ошибки показывают свой MsgBox. Или сбрасывают ошибки в файл на диске. Или делают еще что-то, что не влияет на объект Err в VB. С ними действительно беда.

ОФФ: видил я одну систему с "псевдомодальным" режимом. Тоже большую. Где клиентская часть представляла собой "переплетение событий". Понять что в ней происходит и из-за чего возникла ошибка было очень трудно. Кстати тоже в Киеве сделана.
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32755059
Alexander Kot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey KudinovА что сложного ? Вы приводили пример с ADO - там была проблема с событием, которая решаема. В чем проблема с другими ActiveX ?
Бывают правда чудесные компоненты (напр. Crystal Reports), которые вместо нормальной ошибки показывают свой MsgBox. Или сбрасывают ошибки в файл на диске. Или делают еще что-то, что не влияет на объект Err в VB. С ними действительно беда.

ОФФ: видил я одну систему с "псевдомодальным" режимом. Тоже большую. Где клиентская часть представляла собой "переплетение событий". Понять что в ней происходит и из-за чего возникла ошибка было очень трудно. Кстати тоже в Киеве сделана.

Решаема как.....
Анализом некоторого (в худшем случае глобального) ЕррКода после вызова Update и переподемом ексепшена...
*60М кода, разные АктивХы (Rcmfmb и Кристал Есть :) = практически не решаема :)
Надо все такие вызовы перевызовы найти и обработать.....
А имея информацию о том что ниже в стеке <Non-Basic Code> и еррор хендлеры во всех процедурах можно в данном случае показать еррор меседж и выйти екзитом..... (Все же лучше чем Меседж и смерть....)

ОФФ: У нашей системы судьба сложная, в Киев она попала уже такая большая навернутая и вообще без еррор хендлинга :)
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32755153
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уж проще тогда во всех обработчиках событий показать окно с ошибкой(а не Raise).
Потому что почти наверняка там в стеке будет <Non-Basic Code>. ИМХО - связано с внутренней организацией механизма событий.
С другой стороны, не всегда, когда в стеке есть <Non-Basic Code> нужно не поднимать событие, а показать окно с ошибкой.
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32755170
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kudinov нужно не поднимать событие , а показать окно с ошибкой. описка: нужно не поднимать ошибку
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32755181
Alexander Kot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Kudinov Alexey Kudinov нужно не поднимать событие , а показать окно с ошибкой. описка: нужно не поднимать ошибку

Выкрутится безусловно можно.....
Но слишком много ручной работы :(
При наличии сабджевой информации можно достич тогоже эфекта практически не напрягаясь....
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32755583
Alexander Kot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Kudinov
По поводу получения Call Stack-а , последний пост.
Но я никогда не видел реализацию этого в реальности.


Если бы еще и ссылочку на саму книгу, да в электронном виде.... :)
Или хотя-бы на те файлы что упомянаются в обсуждении.
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32755691
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Kot Alexey Kudinov
По поводу получения Call Stack-а , последний пост.
Но я никогда не видел реализацию этого в реальности.


Если бы еще и ссылочку на саму книгу, да в электронном виде.... :)
Или хотя-бы на те файлы что упомянаются в обсуждении.
Get Debug Info From Production Apps посмотрите здесь
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32755732
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
    #32760830
Alexander Kot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Kudinovи еще Find That Crash

Спасибо интересные ссылки.
Изучаемс....
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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