Я рассматриваю аппаратные и программные исключения в visual studio 2013. Я знаю, что могу уловить аппаратные исключения, установив опцию «Включить исключения C++» в/EHa (Да с SEH Исключения). Я пытаюсь поймать следующие исключения:C++ блок try-catch не улавливает аппаратное исключение
EXCEPTION_ARRAY_BOUNDS_EXCEEDED - не расслышал
EXCEPTION_ACCESS_VIOLATION - пойманы
EXCEPTION_INT_OVERFLOW - не расслышал
EXCEPTION_INT_DIVIDE_BY_ZERO - поймал
Это пример кода.
try {
a = std::numeric_limits<int>::max();
a += 5;
}
catch (...){
std::cout << "EXCEPTION_INT_OVERFLOW Exception Caught" << std::endl;
exit(1);
}
try {
int h = 0;
b = b/h;
}
catch (...){
std::cout << "EXCEPTION_INT_DIVIDE_BY_ZERO Exception Caught" << std::endl;
exit(1);
}
Он ловит только разделение на нулевое исключение. Является ли это зависимым от процессора, или есть что-то еще? Еще один маленький вопрос, есть ли разница между сборками debug и release?
Согласно [это] (http://stackoverflow.com/questions/4754826/vs2008-enable-c-exception-with-seh), вам необходимо использовать '__try __except'. См. Https://msdn.microsoft.com/en-us/library/ms681409%28v=vs.85%29.aspx –
@RobertHarvey: Нет, '/ EHa' заставляет обработку исключений C++ использовать операции структурированного исключения и исключения ОС будут пойманы 'catch (...)' –