Это не рассматривается в стандарте C ++, однако обычные настольные ОС предоставляют средства для этого. В Windows есть Структурная обработка исключений (SEH), для которой доступны соответствующие расширения компилятора, а POSIX обеспечивает обработку сигналов.
Как правило, я бы сказал, что вы не должны отлавливать исключения процессора - они возникают только в том случае, если ваша программа содержит ошибки и в этот момент пришло время отключить отладчик, а не продолжать.
Вы не можете использовать тот же подход - даже в ассемблере. Эти возможности предоставляются ОС - когда процессор выдает исключение, он обращается к ОС, чтобы решить, что с этим делать, а не в пользовательском режиме. Не только это, но я бы сказал, что SEH и обработка сигналов достаточно легко различаются, чтобы оправдать принципиально разные подходы при их использовании в коде, поэтому простой #ifdef
не сократит его.
setjmp
и longjmp
могут работать только для «сигналов», генерируемых кодом пользовательского режима, но не уровнем ОС.