Blog. Just Blog

Обработка критических ошибок с помощью VEH

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Обработка критических ошибок с помощью VEH
Обработка критических ошибок с помощью VEH

Продолжение темы, начатой в статье про обработку ошибок, где для этого используется механизм SEH. Принципиальное отличие VEH (Vectored Exception Handling) от SEH (Structured Exception Handling) в том, что обработчики VEH глобальны для процесса и позволяют обрабатывать абсолютно все исключения для всех потоков, тогда как при использовании SEH нужно писать отдельный обработчик на каждый поток.

В остальном принцип работы VEH схож с SEH, точно так же создается цепочка из одного или нескольких обработчиков, а при возникновении критической ситуации они поочередно вызываются. Для добавления собственного обработчика в цепочку VEH используется штатная функция AddVectoredExceptionHandler. Первым параметром задается положение обработчика в цепочке: нулевое значение - обработчик будет вызван в последнюю очередь, ненулевое значение - обработчик будет вызван самым первым.
  1.         ; Установить обработчик ошибок
  2.         invoke  AddVectoredExceptionHandler,1,ExceptionFilter
Функция возвращает хэндл созданного обработчика, который затем можно использовать для удаления обработчика из цепочки, когда он больше не требуется. Это делается при помощи функции RemoveVectoredExceptionHandler.

Мой подход к обработке ошибок остается неизменным. Если возникла нештатная ситуация, то уведомляем об этом пользователя, записываем ошибку в лог и завершаем работу.

Большое облегчение, что все структуры и даже сам обработчик VEH абсолютно идентичны тем, что используются в SEH, поэтому дублировать их здесь я не буду, ссылка указана в начале статьи. Это значительно ускорит переход от использования SEH на использование более прогрессивного VEH в ваших приложениях.

В приложении пример программы с исходным текстом, которая использует VEH для обработки ошибок.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

VEH.Demo.zip (4,769 bytes)


Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 265 | Комментариев: 3

Комментарии

Отзывы посетителей сайта о статье
ManHunter (24.08.2021 в 23:07):
жжоте
User (24.08.2021 в 17:22):
красивое
mini (23.08.2021 в 13:28):
годнота

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0032 сек.) / Память: 4.75 Mb
Наверх