|
Обработка ошибок
|
|||
---|---|---|---|
#18+
Уважаемые знатоки! ))) Посмотрите, пожалуйста код, на предмет необходимости обработки ошибок, поскольку я с данным вопросом что-то пока не разобрался. Не пойму, где нужна, а где можно без этого обойтись. Не буду против конструктивной критики самого кода)))) Код: 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. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 21:06 |
|
Обработка ошибок
|
|||
---|---|---|---|
#18+
Поставь себе надстройку MZTools и там обработчик ошибок ставится нажатием одной кнопки. Ставь везде и не парься рассуждениями надо-не надо. Раз затрудняешься определить, то ставь. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 09:15 |
|
Обработка ошибок
|
|||
---|---|---|---|
#18+
Так у вас практически никакой обработки ошибок и нет - пользователь не увидит никакого сообщения об ошибке и не сможет ничего сообщить разработчику, он даже скорее всего не поймет, что что-то не работает. Обработчики нужны во всех процедурах, которые вызываются системой (события), иначе при ошибке возникнет необработанная ошибка и пользователя может выкинуть в код, это недопустимо. Поцедуры, которые вызываются из кода могут и не иметь обработчика, ошибка будет передана в вызывающую процедуру, но при этом код и текст ошибки не будут соответствовать той линии кода, где ошибка действительно возникла, остановка будет на вызове процедуры без обработчика и сообщение об ошибки будет весьма невнятным. Еще момент - обработчик ошибок должен проводить финальные операции типа закрытия рекордсетов или разрушения переменных даже при возникновении ошибок, иначе это может привести к нестабильности системы. Я использую два типа обработчиков, каждый имеет несколько модификаций, но это не принципиально. Первый тип - для событий и кода, который непосредственно взаимодествует с пользователем Код: 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.
Второй тип - для процедур, вызываемых из кода: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Здесь задача обработчика - добавить к описанию ошибки информацию о процедуре и линии, где возникла ошибка, новое описание передается в вызвавшую процедуру. В результате, если в вызвавшей процедуре будет обработчик первого типа, то появится сообщение со теком вызова процедур, что поможет определить причину гораздо проще. Debug.Assert в обработчике второго типа нужен для отладки - если обе булевские глобальные константы STOP_AT_ERROR и IS_DEV (определены в стандартном модуле) установлены в True, то код остановится в этом месте в случае возникновения ошибки без возврата в вызывающую процедуру, что позволит очень легко найти строку с ошибкой с помощью Resume, проанализировать переменные, при необходимости исправить код и повторить выполнение без перезапуска процедуры. Есть модификация обработчика второго типа с финальной секцией для закрытия курсоров и т.п.: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Я также всегда нумерую строки кода, чтобы в сообщении об ошибке выводился номер строки, где возникла ошибка. Для генерации обработчиков и нумерации использую MZ-Tools, очень удобный инструмент, не представляю без него нормальной работы. Обработчики и нумерация есть и в бесплатной 3-й версии, но 8-я намного удобнее, я ее даже купил, хотя можно постоянно сбрасывать пробный месячный период. Текст LogError: Код: 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. 62. 63. 64.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 10:01 |
|
Обработка ошибок
|
|||
---|---|---|---|
#18+
Забыл добавить номера строк в 2 примера. Они должны быть в продакшне и тесте. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 10:03 |
|
Обработка ошибок
|
|||
---|---|---|---|
#18+
MrShinТак у вас практически никакой обработки ошибок и нет Lekks... поскольку я с данным вопросом что-то пока не разобрался... )))) JossСтавь везде и не парься рассуждениями надо-не надо. Так и поступлю))) Пойду MZTools качать))) Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 17:00 |
|
|
start [/forum/topic.php?fid=45&tid=1611052]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 128ms |
0 / 0 |