|
|
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Привет всем: Сабдж собственно. Нужно для правильного еррор хендлинга. Во всех функциях есть он-еррор обработчики.... Но как решить пришло ли время покызывать меседж о непредвиденном ерроре или можно рейзить его вверх? Нарвавшись на <Non-Basic Code> в стеке приложение улетит.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 12:15:55 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Err.Source ? Но я не очень понимаю фразу Alexander Kot Но как решить пришло ли время покызывать меседж о непредвиденном ерроре или можно рейзить его вверх? Ошибку в любом случае надо поднять наверх до уровня отображения. Чтобы показать весь стек. Скажем если возникла ошибка на сервере БД - это ошибка в <Non-Basic Code> , но имеет смысл показать какие методы каких классов не отработали и так до самого верхнего уровня (до нажатия на кнопку например) Alexander KotНарвавшись на <Non-Basic Code> в стеке приложение улетит.... Не улетит, если <Non-Basic Code> грамотно написан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 12:36:16 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
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 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 12:47:03 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Alexander Kot Что именно значит грамотно написанн? Не всегда этот <Non-Basic Code> подконтролен Пример: в обработчике события Recordset - a WillChangeRecord сделайте Err.Raise..... Вызовите Update у рекордсета И как получить этот самый ексепшн в той функции что дернула Update? Куда уж грамотнее чем MDAC :) В данном случае никак, увы. Но это не только к ADODB.Recordset-у относится, с VB событиями тоже самое. Решением проблемы может быть: 1 в обработчике WillChangeRecord запоминание объекта Err в переменную, без поднятия ошибки. 2 В методе, где вызывается Update после его вызова проверить: если эта переменная не пустая - поднять ошибку с ней наверх. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 13:25:15 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
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 эту информацию откудото берет..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 13:32:30 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Alexander Kot Дык это был только частный пример...... Собственно меня може т спасти только определение что данный процедур был вызван из <Non-Basic Code> Даже аккуратное накопление - раскрутка стека в еррор хендлере не поможет, через нее это не определить..... Но ведь среда по Ctrl-L эту информацию откудото берет..... Ну если под <Non-Basic Code> понимать код не вашего приложения, то проблемы нет - вы всегда можете определить это вы подняли ошибку или нет. Говоря о "частном примере" - а много ли таких ситуаций ? Трудности с ловлей ошибок возникших в обработчиках событий, а главное их ассоциирование с методами, которые привели к вызову обработчика - да, они есть, но они решаемы. Что еще ? По поводу получения Call Stack-а , последний пост. Но я никогда не видел реализацию этого в реальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 14:08:48 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinov Ну если под <Non-Basic Code> понимать код не вашего приложения, то проблемы нет - вы всегда можете определить это вы подняли ошибку или нет. Говоря о "частном примере" - а много ли таких ситуаций ? Трудности с ловлей ошибок возникших в обработчиках событий, а главное их ассоциирование с методами, которые привели к вызову обработчика - да, они есть, но они решаемы. Что еще ? По поводу получения Call Stack-а , последний пост. Но я никогда не видел реализацию этого в реальности. Спасибо за ссылку, покопаюсь..... Еще есть: 1) инициализация разных ActiveX ов и их события..... 2) в приложении есть псевдомодальный режим за счет "повторного входа" в процедуру олбработки месаджей не через басик код... (но это хоть свое) 3) Есть еще несколько хитрых кусков.... 1й самый сложный.... Остальные все "свои" т.е. код доступен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 14:18:04 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Alexander KotЕще есть: 1) инициализация разных ActiveX ов и их события..... 2) в приложении есть псевдомодальный режим за счет "повторного входа" в процедуру олбработки месаджей не через басик код... (но это хоть свое) 3) Есть еще несколько хитрых кусков.... 1й самый сложный.... Остальные все "свои" т.е. код доступен. А что сложного ? Вы приводили пример с ADO - там была проблема с событием, которая решаема. В чем проблема с другими ActiveX ? Бывают правда чудесные компоненты (напр. Crystal Reports), которые вместо нормальной ошибки показывают свой MsgBox. Или сбрасывают ошибки в файл на диске. Или делают еще что-то, что не влияет на объект Err в VB. С ними действительно беда. ОФФ: видил я одну систему с "псевдомодальным" режимом. Тоже большую. Где клиентская часть представляла собой "переплетение событий". Понять что в ней происходит и из-за чего возникла ошибка было очень трудно. Кстати тоже в Киеве сделана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 14:33:48 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Alexey KudinovА что сложного ? Вы приводили пример с ADO - там была проблема с событием, которая решаема. В чем проблема с другими ActiveX ? Бывают правда чудесные компоненты (напр. Crystal Reports), которые вместо нормальной ошибки показывают свой MsgBox. Или сбрасывают ошибки в файл на диске. Или делают еще что-то, что не влияет на объект Err в VB. С ними действительно беда. ОФФ: видил я одну систему с "псевдомодальным" режимом. Тоже большую. Где клиентская часть представляла собой "переплетение событий". Понять что в ней происходит и из-за чего возникла ошибка было очень трудно. Кстати тоже в Киеве сделана. Решаема как..... Анализом некоторого (в худшем случае глобального) ЕррКода после вызова Update и переподемом ексепшена... *60М кода, разные АктивХы (Rcmfmb и Кристал Есть :) = практически не решаема :) Надо все такие вызовы перевызовы найти и обработать..... А имея информацию о том что ниже в стеке <Non-Basic Code> и еррор хендлеры во всех процедурах можно в данном случае показать еррор меседж и выйти екзитом..... (Все же лучше чем Меседж и смерть....) ОФФ: У нашей системы судьба сложная, в Киев она попала уже такая большая навернутая и вообще без еррор хендлинга :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 14:50:41 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Уж проще тогда во всех обработчиках событий показать окно с ошибкой(а не Raise). Потому что почти наверняка там в стеке будет <Non-Basic Code>. ИМХО - связано с внутренней организацией механизма событий. С другой стороны, не всегда, когда в стеке есть <Non-Basic Code> нужно не поднимать событие, а показать окно с ошибкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 15:18:06 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinov нужно не поднимать событие , а показать окно с ошибкой. описка: нужно не поднимать ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 15:23:42 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinov Alexey Kudinov нужно не поднимать событие , а показать окно с ошибкой. описка: нужно не поднимать ошибку Выкрутится безусловно можно..... Но слишком много ручной работы :( При наличии сабджевой информации можно достич тогоже эфекта практически не напрягаясь.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 15:28:49 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinov По поводу получения Call Stack-а , последний пост. Но я никогда не видел реализацию этого в реальности. Если бы еще и ссылочку на саму книгу, да в электронном виде.... :) Или хотя-бы на те файлы что упомянаются в обсуждении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 17:56:00 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
Alexander Kot Alexey Kudinov По поводу получения Call Stack-а , последний пост. Но я никогда не видел реализацию этого в реальности. Если бы еще и ссылочку на саму книгу, да в электронном виде.... :) Или хотя-бы на те файлы что упомянаются в обсуждении. Get Debug Info From Production Apps посмотрите здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 18:33:21 |
|
||
|
VB6: Как определить что некотрая функция была вызвана из <Non-Basic Code>
|
|||
|---|---|---|---|
|
#18+
и еще Find That Crash ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 18:47:25 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32755181&tid=2168691]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 354ms |

| 0 / 0 |
