Как Приложение Windows может обработать отказы сегментации? 'Дескриптором' я имею в виду, прерывают их и возможно производят описательное сообщение. Кроме того, способность восстановиться от них была бы хороша также, но я предполагаю, что это слишком сложно.
Используйте SEH для ранней обработки исключений, и используйте SetUnhandledExceptionFilter для отображения описательного сообщения.
. Если вы добавите аргумент компилятора /EHa
, то try {} catch(...)
перехватит все исключения для вас, включая исключения SEH.
.
Вы также можете использовать __try {} __ кроме {}
, что дает вам больше гибкости в том, что делать, когда поймано исключение. ставя __try {} __ кроме {}
на всей вашей функции main()
в некоторой степени эквивалентно использованию SetUnhandeledExceptionFilter()
.
Тем не менее, вы также должны использовать правильную терминологию. "seg-fault" - это термин UNIX. в Windows нет ошибок сегментации. На окнах они называются "Access Violation exceopnts"
.То, что вы хотите сделать здесь, зависит от того, с какими недостатками вы имеете дело. Если у вас небрежный код, который подвержен более или менее случайным общим нарушениям защиты, то ответ @Paul Betts - это то, что вам нужно.
Если у вас есть код, который имеет хорошую причину почитать плохие указатели, и вы хотите восстановить его, начните с предложения @whunmr о SEH. Вы можете справиться и действительно восстановить, если у вас есть достаточно четкий контроль над вашим кодом, чтобы точно знать, в каком состоянии он находится в момент ошибки и как идти к восстановлению.
.Пусть они аварийно завершат свою работу, и пусть Windows Error Reporting обработает это - под Vista+, вы также должны подумать о регистрации в Restart Manager, чтобы у вас была возможность сохранить работу пользователя и перезапустить приложение (например, что делает Word/Excel/etc...)
.