В мире софта столько говорят об обработке ошибок, о грамотном управлении ошибками, о полезности ошибок, что привыкаешь, написав хорошую обработку ошибок, чувствовать себя защищённым от любых случайностей.
А между тем, контроль ошибок, assertionы и прочее – это, скорее, защита от случайно допущенных закономерностей. Настоящая случайная ошибка – это когда процессор сложил два и два и получил пять. Никакие try…except до конца от этого не защитят.
Слава богу, что такое редкость.
А если какие-то апи-функции возвращают ошибки? А если все?
Голый минимум того, на что можно рассчитывать – стек в сторону уменьшения и обратно до этой же величины; уже выделенная память и объекты; корректное исполнение кода на процессоре. Если что-то из этого недоступно, происходящее уже вообще не поддаётся контролю никак. В голом минимуме нельзя вызывать никакие внешние функции, нельзя, вообще говоря, даже обращаться к выгруженным страницам кода – физической памяти может не быть.
Понятно, что в таких условиях ничего не сделать, поэтому приходится добавлять право обращаться к неким стандартным страницам памяти своего приложения, или даже ко всему приложению, и вызывать некоторый минимум функций, ну хотя бы ExitProcess всякие. Сможет ваше приложение обработать ошибки до такого уровня? Мои не смогут, если что
)