Если вы хотите перехватить все сбои, вам нужно сделать больше, чем просто: SetUnhandledExceptionFilter
Я бы также установил обработчик прерывания, обработчик purecall, обработчик неожиданных, завершенных и недопустимых параметров.
#include <signal.h>
inline void signal_handler(int)
{
terminator();
}
inline void terminator()
{
int*z = 0; *z=13;
}
inline void __cdecl invalid_parameter_handler(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t)
{
terminator();
}
А в свой главный поставь вот это:
signal(SIGABRT, signal_handler);
_set_abort_behavior(0, _WRITE_ABORT_MSG|_CALL_REPORTFAULT);
set_terminate( &terminator );
set_unexpected( &terminator );
_set_purecall_handler( &terminator );
_set_invalid_parameter_handler( &invalid_parameter_handler );
Выше будет отправлять все сбои в ваш обработчик необработанных исключений.