Обитатели "сумеречной зоны", или из "морга в реанимацию"
Хотите узнать, как заставить приложение продолжить нормальную работу после появления сообщения о критической ошибке? Это действительно очень актуально. Представьте, что "рухнуло" приложение, содержащее уникальные и еще не сохраненные данные. По минимуму их придется набивать заново, по максимуму–— они потеряны для вас навсегда. На рынке имеется некоторое количество утилит, нацеленных на эту задачу (взять те же Norton Utilities), но их интеллектуальность оставляет желать лучшего и в среднем они срабатывают один раз из десяти. В тоже самое время, ручная реанимация программыа воскрешает ее в 75%?90% случаев.
Строго говоря, гарантированно восстановить работоспособность "обрушавшейся" программы нельзя, равно как и невозможно выполнить откат тех действий, что предшествовали ее "обрушению". В лучшем случае вам удастся сохранить свои данные на диск до того, как программа полностью потеряет нить управления и пойдет вразнос. Но и это неплохо!
Существует по меньшей мере три различных способа реанимации:
q а) принудительный выход из функции, возбудившей исключение;
q б) "раскрутка" стека с передачей управления назад;
q в) передача управления на функцию обработки сообщений.
Рассмотрим каждый из этих способов на примере приложения testt.exe, копию которого вы можете ### скачать с нашего сервера[Y89] .
Забегая вперед, отметим, что реанимации поддаются лишь те сбои, которыечто вызваны алгоритмическими, а не аппаратными ошибками (т. е. сбоем оборудования). Если информация, хранящаяся в оперативной памяти, оказалась искажена в результате физического дефекта последней, то восстановить работоспособность "упавшего" приложения скорее всего уже не удастся, хотя если сбой не затронул жизненно важные структуры данных, некоторая надежда на благополучный исход все-таки есть.