I'm examining hardware and software exceptions in visual studio 2013. I know that I can catch hardware exceptions by setting 'Enable C++ Exceptions' option to /EHa (Yes with SEH Exceptions). I'm trying to catch the following exceptions:
EXCEPTION_ARRAY_BOUNDS_EXCEEDED - didn't catch
EXCEPTION_ACCESS_VIOLATION - caught
EXCEPTION_INT_OVERFLOW - didn't catch
EXCEPTION_INT_DIVIDE_BY_ZERO - caught
This is an example of code.
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);
}
It catches only divide by zero exception. Is this dependent of processor, or there is something else? One more little question, is there any difference between debug and release builds?
__try __except
. See msdn.microsoft.com/en-us/library/ms681409%28v=vs.85%29.aspx – Icterus/EHa
causes C++ exception handling to use Structured Exception Handling and OS exceptions will be caught bycatch (...)
– Wikiup