Improved error handling.
This commit is contained in:
parent
a6a36ee02c
commit
3482a86f7e
@ -117,6 +117,15 @@ static void abortedHandlerRoutine(const HANDLE &hProc)
|
|||||||
std::cerr << "===========================================================================\n" << std::endl;
|
std::cerr << "===========================================================================\n" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void invalidParameterHandler(const wchar_t*, const wchar_t*, const wchar_t*, unsigned int, uintptr_t)
|
||||||
|
{
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "\n===========================================================================" << std::endl;
|
||||||
|
std::cerr << "GURU MEDITATION: Invalid Parameter Handler Invoked!" << std::endl;
|
||||||
|
std::cerr << "===========================================================================\n" << std::endl;
|
||||||
|
_exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
static BOOL WINAPI ctrlHandlerRoutine(DWORD dwCtrlType)
|
static BOOL WINAPI ctrlHandlerRoutine(DWORD dwCtrlType)
|
||||||
{
|
{
|
||||||
g_aborted = true;
|
g_aborted = true;
|
||||||
@ -126,7 +135,7 @@ static BOOL WINAPI ctrlHandlerRoutine(DWORD dwCtrlType)
|
|||||||
|
|
||||||
static LONG WINAPI crashHandlerRoutine(struct _EXCEPTION_POINTERS *ExceptionInfo)
|
static LONG WINAPI crashHandlerRoutine(struct _EXCEPTION_POINTERS *ExceptionInfo)
|
||||||
{
|
{
|
||||||
static const char *const message = "\n\nUNHANDELED EXCEPTION ERROR !!!\n\n";
|
static const char *const message = "\n\nGURU MEDITATION: UNHANDELED SYSTEM EXCEPTION !!!\n\n";
|
||||||
DWORD bytesWritten;
|
DWORD bytesWritten;
|
||||||
WriteFile(GetStdHandle(STD_ERROR_HANDLE), message, strlen(message), &bytesWritten, NULL);
|
WriteFile(GetStdHandle(STD_ERROR_HANDLE), message, strlen(message), &bytesWritten, NULL);
|
||||||
TerminateProcess(GetCurrentProcess(), UINT(-1));
|
TerminateProcess(GetCurrentProcess(), UINT(-1));
|
||||||
@ -137,19 +146,8 @@ static LONG WINAPI crashHandlerRoutine(struct _EXCEPTION_POINTERS *ExceptionInfo
|
|||||||
// MAIN FUNCTION
|
// MAIN FUNCTION
|
||||||
// =============================================================================================================
|
// =============================================================================================================
|
||||||
|
|
||||||
int _tmain(int argc, _TCHAR* argv[])
|
static int timedExecMain(int argc, _TCHAR* argv[])
|
||||||
{
|
{
|
||||||
SetUnhandledExceptionFilter(crashHandlerRoutine);
|
|
||||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
|
||||||
|
|
||||||
if(!(g_hAbortEvent = CreateEvent(NULL, TRUE, FALSE, NULL)))
|
|
||||||
{
|
|
||||||
std::cerr << "\nSYSTEM ERROR: Event object could not be created!\n" << std::endl;
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetConsoleCtrlHandler(ctrlHandlerRoutine, TRUE);
|
|
||||||
|
|
||||||
std::ios initFmt(NULL);
|
std::ios initFmt(NULL);
|
||||||
initFmt.copyfmt(std::cerr);
|
initFmt.copyfmt(std::cerr);
|
||||||
|
|
||||||
@ -404,3 +402,75 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =============================================================================================================
|
||||||
|
// APPLICATION ENTRY POINT
|
||||||
|
// =============================================================================================================
|
||||||
|
|
||||||
|
static int mainEx(int argc, _TCHAR* argv[])
|
||||||
|
{
|
||||||
|
int ret = EXIT_FAILURE;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ret = timedExecMain(argc, argv);
|
||||||
|
}
|
||||||
|
catch(std::exception &e)
|
||||||
|
{
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "\n===========================================================================" << std::endl;
|
||||||
|
std::cerr << "GURU MEDITATION: Unhandeled C++ Exception (" << e.what() << ')' << std::endl;
|
||||||
|
std::cerr << "===========================================================================\n" << std::endl;
|
||||||
|
_exit(-1);
|
||||||
|
}
|
||||||
|
catch(std::exception *e)
|
||||||
|
{
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "\n===========================================================================" << std::endl;
|
||||||
|
std::cerr << "GURU MEDITATION: Unhandeled C++ Exception (" << e->what() << ')' << std::endl;
|
||||||
|
std::cerr << "===========================================================================\n" << std::endl;
|
||||||
|
_exit(-1);
|
||||||
|
} catch(...)
|
||||||
|
{
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "\n===========================================================================" << std::endl;
|
||||||
|
std::cerr << "GURU MEDITATION: Unhandeled C++ Exception (Unknown Exception Type)" << std::endl;
|
||||||
|
std::cerr << "===========================================================================\n" << std::endl;
|
||||||
|
_exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _tmain(int argc, _TCHAR* argv[])
|
||||||
|
{
|
||||||
|
int ret = EXIT_FAILURE;
|
||||||
|
|
||||||
|
#ifndef _DEBUG
|
||||||
|
SetUnhandledExceptionFilter(crashHandlerRoutine);
|
||||||
|
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||||
|
_set_invalid_parameter_handler(invalidParameterHandler);
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
if(!(g_hAbortEvent = CreateEvent(NULL, TRUE, FALSE, NULL)))
|
||||||
|
{
|
||||||
|
std::cerr << "\n\nSYSTEM ERROR: Event object could not be created!\n" << std::endl;
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetConsoleCtrlHandler(ctrlHandlerRoutine, TRUE);
|
||||||
|
|
||||||
|
#ifndef _DEBUG
|
||||||
|
__try
|
||||||
|
{
|
||||||
|
ret = mainEx(argc, argv);
|
||||||
|
}
|
||||||
|
__except(crashHandlerRoutine(GetExceptionInformation()))
|
||||||
|
{
|
||||||
|
for(;;) _exit(-1);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
ret = timedExecMain(argc, argv);
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user