Об ошибках

В мире софта столько говорят об обработке ошибок, о грамотном управлении ошибками, о полезности ошибок, что привыкаешь, написав хорошую обработку ошибок, чувствовать себя защищённым от любых случайностей.

А между тем, контроль ошибок, assertionы и прочее – это, скорее, защита от случайно допущенных закономерностей. Настоящая случайная ошибка – это когда процессор сложил два и два и получил пять. Никакие try…except до конца от этого не защитят.
Слава богу, что такое редкость.

(С другой стороны…

С другой стороны, и предсказуемые ошибки до конца обрабатывать тяжело. Ну-ка представьте себе, что у вас пропало подключение ко всему, кончилось место на диске, кончилась оперативная память, кончился стек – сможет ли ваше приложение корректно сделать что-то? остаться работать? хотя бы завершиться без позорного грохота?
А если какие-то апи-функции возвращают ошибки? А если все?

Голый минимум того, на что можно рассчитывать – стек в сторону уменьшения и обратно до этой же величины; уже выделенная память и объекты; корректное исполнение кода на процессоре. Если что-то из этого недоступно, происходящее уже вообще не поддаётся контролю никак. В голом минимуме нельзя вызывать никакие внешние функции, нельзя, вообще говоря, даже обращаться к выгруженным страницам кода – физической памяти может не быть.

Понятно, что в таких условиях ничего не сделать, поэтому приходится добавлять право обращаться к неким стандартным страницам памяти своего приложения, или даже ко всему приложению, и вызывать некоторый минимум функций, ну хотя бы ExitProcess всякие. Сможет ваше приложение обработать ошибки до такого уровня? Мои не смогут, если что :)

)

Напишите комментарий:

Если хотите, можно залогиниться.

*