Обработка исключений в Linux - PullRequest
5 голосов
/ 30 августа 2011

Я портирую программу для Windows на Linux.Моя программа использует структурированную обработку исключений Windows (SEH).Linux не поддерживает структурированную обработку исключений, однако обеспечивает обработку сигналов.Мы можем переопределить сигнал для развития SEH, как парадигма.

После того как вы сможете отфильтровать исключение, Windows предоставляет три альтернативных потока управления выполнением:

1) EXCEPTION_EXECUTE_HANDLER: обработчик выполнения 2) EXCEPTION_CONTINUE_SEARCH: перенаправить исключение в следующий блок (если не существует, затемОС) 3) EXCEPTION_CONTINUE_EXECUTION: Продолжить исключение из инструкции, где произошло прерывание.

Как мне добиться этого управления потоками в Linux .В Linux после обработки сигнала программа начинает выполнение с того места, где он был прерван. Как разработать парадигмы continue_search и execute_handler?

Заранее спасибо

1 Ответ

5 голосов
/ 30 августа 2011

Нет простого способа сделать то, что вы хотите, здесь, в C ++. Ваши инструменты - это стандартный механизм исключений C ++ и sigaction. Обработчик sigaction может вернуть управление туда, где он остановился. Это может бросить, хотя был спор о безопасности этого. Кто-то скажет, что он должен установить атомарную переменную и вернуться. (Проблема в том, что компилятор не видит возможности броска и поэтому не готовится к нему.)

Если вы работаете в C, у вас есть дополнительные сложные опции, включающие sigsetjmp, что более или менее относится к стероидам, рискам и всем прочим.

Поскольку вы не указали язык или какое исключительное условие вы пытаетесь решить, нецелесообразно предлагать более конкретный рецепт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...