Обработка критических ошибок с помощью VEH
Обработка критических ошибок с помощью VEH
Продолжение темы, начатой в статье про обработку ошибок, где для этого используется механизм SEH. Принципиальное отличие VEH (Vectored Exception Handling) от SEH (Structured Exception Handling) в том, что обработчики VEH глобальны для процесса и позволяют обрабатывать абсолютно все исключения для всех потоков, тогда как при использовании SEH нужно писать отдельный обработчик на каждый поток.
В остальном принцип работы VEH схож с SEH, точно так же создается цепочка из одного или нескольких обработчиков, а при возникновении критической ситуации они поочередно вызываются. Для добавления собственного обработчика в цепочку VEH используется штатная функция AddVectoredExceptionHandler. Первым параметром задается положение обработчика в цепочке: нулевое значение - обработчик будет вызван в последнюю очередь, ненулевое значение - обработчик будет вызван самым первым.
Code (Assembler) : Убрать нумерацию
- ; Установить обработчик ошибок
- invoke AddVectoredExceptionHandler,1,ExceptionFilter
Мой подход к обработке ошибок остается неизменным. Если возникла нештатная ситуация, то уведомляем об этом пользователя, записываем ошибку в лог и завершаем работу.
Большое облегчение, что все структуры и даже сам обработчик VEH абсолютно идентичны тем, что используются в SEH, поэтому дублировать их здесь я не буду, ссылка указана в начале статьи. Это значительно ускорит переход от использования SEH на использование более прогрессивного VEH в ваших приложениях.
В приложении пример программы с исходным текстом, которая использует VEH для обработки ошибок.
Просмотров: 1008 | Комментариев: 3
Внимание! Статья опубликована больше года назад, информация могла устареть!
Добавить комментарий
Заполните форму для добавления комментария