tag:blogger.com,1999:blog-1688132520265708820.post8267282594490804775..comments2023-04-02T16:52:35.787+03:00Comments on Блог GunSmoker-а (переводы): Ваш обработчик исключения тоже может возбудить исключениеGunSmokerhttp://www.blogger.com/profile/15611696588191431330noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-1688132520265708820.post-67704991443774083572010-03-29T13:49:18.411+04:002010-03-29T13:49:18.411+04:00Примерно так и делаю. Только не по e-mail, а прост...Примерно так и делаю. Только не по e-mail, а просто пишу информацию об исключении в лог. Вобщем, Вы полностью подтвердили мои соображения, убедился, что я иду правильным путем :)Cthulhuhttps://www.blogger.com/profile/06334081941413993360noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-65387402034272438652010-03-29T13:29:54.091+04:002010-03-29T13:29:54.091+04:00Ну, я имел ввиду только ваш код, конечно же.
Когд...Ну, я имел ввиду только ваш код, конечно же.<br /><br />Когда же речь заходит о взаимодействии со сторонним кодом, то часто приходится вставлять код, исправляющий чужие косяки и то, "что никогда не может произойти". А "убедить этих" - забудьте об этом. Это данность, которую нужно принять.<br /><br />Если протокол плагинов под вашим контролем - попробуйте добавить в инфу о плагине e-mail автора и автоматом высылать ему отчёт о проблемах с его плагином. Вот поймали исключение в его функции очистки - отправили отчёт. Ну это просто как пример.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-41499455260564215632010-03-29T13:23:48.133+04:002010-03-29T13:23:48.133+04:00Спасибо за ответ. Итак, деструкторы (и прочие мето...Спасибо за ответ. Итак, деструкторы (и прочие методы финализации) не должны выпускать исключения наружу. Осталось только убедить в этом безответственных товарищей, которые пишут плагины к моему приложению :) Потому что обидно, когда МОЯ программа рушится из-за того, что КТО-ТО некорректно написал деструктор...<br /><br />P.S. Давно и с удовольствием читаю Ваши блоги и статьи на КД; отдельное спасибо за статью про обработку ошибок :)Cthulhuhttps://www.blogger.com/profile/06334081941413993360noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-75307664036831725002010-03-29T11:31:10.261+04:002010-03-29T11:31:10.261+04:00Идеологически правильное решение: любой деструктор...Идеологически правильное решение: любой деструктор и деструктор-like метод <b>обязаны</b> обрабатывать все свои исключения. Иными словами: очистка обязана быть успешной. Почему? Потому что вы не можете предложить ни одного способа восстановления после исключения в деструкторе или любом методе очистки.<br /><br />Наводящие вопросы: является ли объект, в котором произошло исключение в деструкторе, удалённым? Нет? Тогда, является ли он валидным? А как тогда удалять его повторно? И т.п.<br /><br />Если же деструктор выпускает наружу исключение, то это исключение должно рассматриваться как фатальное (типа AV в менеджере памяти). Программа должна быть перезапущена немедленно.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-20783999313399478812010-03-29T10:15:55.182+04:002010-03-29T10:15:55.182+04:00Как раз столкнулся с этой проблемой. Какие есть ва...Как раз столкнулся с этой проблемой. Какие есть варианты решения? Есть идея заключить блок finally, в котором могут возникнуть исключения, в дополнительный обработчик try..except:<br />try<br /> ...<br />finally<br /> try<br /> ...<br /> except<br /> HandleFinallyException;<br /> end<br />end;<br />Поискал в исходниках VCL, нигде подобной конструкции не видел. Разработчики видимо свято верят, что код в их блоках finally никогда не возбудит исключения?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-7627423911391528352010-03-24T16:10:49.242+03:002010-03-24T16:10:49.242+03:00Обработчик исключениЕ не активенОбработчик исключениЕ не активенAnonymousnoreply@blogger.com