|
Обработка ошибок при вызове процедуры из процедуры
|
|||
---|---|---|---|
#18+
Народ, доброго всем времени суток! Понимаю, тема скорее всего изъезженная, но чего-то то ли я не могу нормальный контекст в поиске забить, то ли может я чего не догоняю... Вобщем, запускается процедура. В ней написан обработчик ошибок: On Error Go To, выход, метки и т.д. Из этой процедуры запускается вторая процедура. В ней тоже есть свой собственный обработчик ошибок. Вопрос: при срабатывании ошибки во второй процедуре, обработчик отрабатывает из первой процедуры... Помню, кажется, Саныч говорил, что Акс так делает то ли всегда, то ли по умолчанию... А всегда ли? Нет вариантов сделать так, что если ошибка в первой процедуре, то срабатывает ее обработчик, если во второй, то, соответственно, обработчик второй? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2018, 16:04 |
|
Обработка ошибок при вызове процедуры из процедуры
|
|||
---|---|---|---|
#18+
Я давно использую 2 типа обработчиков - обычный, который всегда срабатывает в текущей процедуре и всплывающий, который регистрирует ошибку в текущей процедуре и передает ее в вызвавшую процедуру, т.е. на верхнем уровне мы получаем сообщение об ошибке со стеком вызовов. Обычный обработчик ставится в процедурах верхнего уровня, которые непосредственно взаимодействуют с пользователем, а всплывающие - в модулях и классах. Код: vbnet 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.
Resume, который никогда не выполняется нужен для отладки, чтобы перейти на строку с ошибкой, Debug.Assert - чтобы при отладке ошибка не всплывала, а останавивалась в процедуре, где возникла. Эти строки удаляются в релизе. Есть еще пара типов обработчиков, но это уже детали ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2018, 06:16 |
|
Обработка ошибок при вызове процедуры из процедуры
|
|||
---|---|---|---|
#18+
MrShin, это интересно LogError -сохраняет лог в таблице, что такое Erl? а какие ещё типы обработчиков применяете? (если это не ноу хау конечно) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2018, 10:16 |
|
Обработка ошибок при вызове процедуры из процедуры
|
|||
---|---|---|---|
#18+
Да, LogErr сохраняет ошибку в таблице и выводит ее на экран в виде сообщения, вот текст: Код: vbnet 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.
Erl - это номер линии, Erl не равно нулю, только если строка с ошибкой пронумерована в коде, использую MZ-Tools для нумерации во всех модулях и в некоторых случаях свой использую нумератор на VBA, но MZ-Tools работает быстрее, в моем не все баги выловлены - если несколько раз добавить номера и убрать, кое-в каких местах нарушаются отступы, все не дойдут руки доделать. Еще один полезный обработчик - всплывающий с финальным кодом: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Есть еще модификации, но они уже заточены под конкретные приложения, идея в них та же. Обработчики генерируются MZ-Tools одной кнопкой, очень удобно. Не ставлю обработчики только в самые простые процедуры типа возврата значения обычной переменной, в остальных, где принципиально может возникнуть ошибка, всегда ставлю обработчик. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 07:48 |
|
Обработка ошибок при вызове процедуры из процедуры
|
|||
---|---|---|---|
#18+
Да, STOP_AT_ERROR и IS_DEV - просто глобальные булевские константы, первая включает остановку во всплывающих обработчиках, вторая - если True, то приложение в находится режиме разработки, используется не только в обработчиках, но и других местах кода для облегчения отладки. Выполнение не останавливается в любом случае, если IS_DEV = False. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 07:53 |
|
|
start [/forum/topic.php?fid=45&msg=39592183&tid=1611758]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 271ms |
total: | 417ms |
0 / 0 |