Revert "Fix reporting unhandled exceptions in MSVC"

This reverts commit 4d3a0b6602.

Conflicts:
	src/app/main.cpp
master
krzys-h 2015-08-25 13:32:58 +02:00
parent 65d26733fa
commit 551710646b
3 changed files with 39 additions and 46 deletions

View File

@ -135,8 +135,6 @@ int SDL_MAIN_FUNC(int argc, char *argv[])
InitializeEventTypeTexts(); InitializeEventTypeTexts();
int code = 0; int code = 0;
try
{
CApplication app(systemUtils.get()); // single instance of the application CApplication app(systemUtils.get()); // single instance of the application
ParseArgsStatus status = app.ParseArguments(argc, argv); ParseArgsStatus status = app.ParseArguments(argc, argv);
@ -150,7 +148,6 @@ int SDL_MAIN_FUNC(int argc, char *argv[])
return app.GetExitCode(); return app.GetExitCode();
} }
if (! app.Create()) if (! app.Create())
{ {
code = app.GetExitCode(); code = app.GetExitCode();
@ -163,17 +160,9 @@ int SDL_MAIN_FUNC(int argc, char *argv[])
} }
code = app.Run(); code = app.Run();
}
catch (std::exception& e)
{
CSignalHandlers::HandleUncaughtException(e);
}
catch (...)
{
CSignalHandlers::HandleOtherUncaughtException();
}
logger.Info("Exiting with code %d\n", code); logger.Info("Exiting with code %d\n", code);
return code; return code;
} }

View File

@ -42,6 +42,7 @@ void CSignalHandlers::Init(CSystemUtils* systemUtils)
signal(SIGABRT, SignalHandler); signal(SIGABRT, SignalHandler);
signal(SIGFPE, SignalHandler); signal(SIGFPE, SignalHandler);
signal(SIGILL, SignalHandler); signal(SIGILL, SignalHandler);
std::set_terminate(UnhandledExceptionHandler);
} }
void CSignalHandlers::SignalHandler(int sig) void CSignalHandlers::SignalHandler(int sig)
@ -74,24 +75,30 @@ std::string demangle(const char* name) {
#else #else
// For MSVC and others // For MSVC and others
// In MSVC typeinfo(e).name() should be already demangled // In MSVC typeinfo(e).name() should be already demangled
std::string demangle(const char* name) std::string demangle(const char* name) {
{
return name; return name;
} }
#endif #endif
void CSignalHandlers::HandleUncaughtException(const std::exception& e) void CSignalHandlers::UnhandledExceptionHandler()
{
std::exception_ptr exptr = std::current_exception();
try
{
std::rethrow_exception(exptr);
}
catch (const std::exception& e)
{ {
std::stringstream ss; std::stringstream ss;
ss << "Type: " << demangle(typeid(e).name()) << std::endl; ss << "Type: " << demangle(typeid(e).name()) << std::endl;
ss << "Message: " << e.what(); ss << "Message: " << e.what();
ReportError(ss.str()); ReportError(ss.str());
} }
catch (...)
void CSignalHandlers::HandleOtherUncaughtException()
{ {
ReportError("Unknown unhandled exception (not inherited from std::exception)"); ReportError("Unknown unhandled exception (not inherited from std::exception)");
} }
}
void CSignalHandlers::ReportError(const std::string& errorMessage) void CSignalHandlers::ReportError(const std::string& errorMessage)
{ {

View File

@ -28,9 +28,6 @@ class CSignalHandlers
public: public:
static void Init(CSystemUtils* systemUtils); static void Init(CSystemUtils* systemUtils);
static void HandleUncaughtException(const std::exception& e);
static void HandleOtherUncaughtException();
private: private:
static void SignalHandler(int sig); static void SignalHandler(int sig);
static void UnhandledExceptionHandler(); static void UnhandledExceptionHandler();