То, как обработать seg, дает сбой в соответствии с Windows?

Как Приложение Windows может обработать отказы сегментации? 'Дескриптором' я имею в виду, прерывают их и возможно производят описательное сообщение. Кроме того, способность восстановиться от них была бы хороша также, но я предполагаю, что это слишком сложно.

7
задан Nathan Osman 2 January 2010 в 20:56
поделиться

4 ответа

Используйте SEH для ранней обработки исключений, и используйте SetUnhandledExceptionFilter для отображения описательного сообщения.

.
3
ответ дан 7 December 2019 в 01:22
поделиться

Если вы добавите аргумент компилятора /EHa, то try {} catch(...) перехватит все исключения для вас, включая исключения SEH.
. Вы также можете использовать __try {} __ кроме {}, что дает вам больше гибкости в том, что делать, когда поймано исключение. ставя __try {} __ кроме {} на всей вашей функции main() в некоторой степени эквивалентно использованию SetUnhandeledExceptionFilter().

Тем не менее, вы также должны использовать правильную терминологию. "seg-fault" - это термин UNIX. в Windows нет ошибок сегментации. На окнах они называются "Access Violation exceopnts"

.
2
ответ дан 7 December 2019 в 01:22
поделиться

То, что вы хотите сделать здесь, зависит от того, с какими недостатками вы имеете дело. Если у вас небрежный код, который подвержен более или менее случайным общим нарушениям защиты, то ответ @Paul Betts - это то, что вам нужно.

Если у вас есть код, который имеет хорошую причину почитать плохие указатели, и вы хотите восстановить его, начните с предложения @whunmr о SEH. Вы можете справиться и действительно восстановить, если у вас есть достаточно четкий контроль над вашим кодом, чтобы точно знать, в каком состоянии он находится в момент ошибки и как идти к восстановлению.

.
0
ответ дан 7 December 2019 в 01:22
поделиться

Пусть они аварийно завершат свою работу, и пусть Windows Error Reporting обработает это - под Vista+, вы также должны подумать о регистрации в Restart Manager, чтобы у вас была возможность сохранить работу пользователя и перезапустить приложение (например, что делает Word/Excel/etc...)

.
5
ответ дан 7 December 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: