- One of the most frequent bug reports is about "terminate called after
throwing an instance of 'sg_io_exception'\nAbandon". And this is caused by compiling fgfs/sg without exception support (unlikely) or linking against a libSDL/libglut that was compiled/linked without execption support. While we can't fix that, we can tell the users who's to blame. :-) - handle const char * exceptions
This commit is contained in:
parent
adcd01d7dc
commit
794f5cc154
1 changed files with 14 additions and 0 deletions
|
@ -144,6 +144,16 @@ void flush_fpe(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void terminate() {
|
||||||
|
cerr << endl <<
|
||||||
|
"Uncaught Exception: you should see a meaningful error message\n"
|
||||||
|
"here, but your GLUT (or SDL) library was apparently compiled\n"
|
||||||
|
"and/or linked without exception support. Please complain to\n"
|
||||||
|
"its provider!"
|
||||||
|
<< endl << endl;
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
int _bootstrap_OSInit;
|
int _bootstrap_OSInit;
|
||||||
|
|
||||||
// Main entry point; catch any exceptions that have made it this far.
|
// Main entry point; catch any exceptions that have made it this far.
|
||||||
|
@ -205,6 +215,7 @@ int main ( int argc, char **argv ) {
|
||||||
// FIXME: add other, more specific
|
// FIXME: add other, more specific
|
||||||
// exceptions.
|
// exceptions.
|
||||||
try {
|
try {
|
||||||
|
std::set_terminate(terminate);
|
||||||
atexit(fgExitCleanup);
|
atexit(fgExitCleanup);
|
||||||
fgMainInit(argc, argv);
|
fgMainInit(argc, argv);
|
||||||
} catch (const sg_throwable &t) {
|
} catch (const sg_throwable &t) {
|
||||||
|
@ -218,6 +229,9 @@ int main ( int argc, char **argv ) {
|
||||||
} catch (const string &s) {
|
} catch (const string &s) {
|
||||||
cerr << "Fatal error: " << s << endl;
|
cerr << "Fatal error: " << s << endl;
|
||||||
|
|
||||||
|
} catch (const char *s) {
|
||||||
|
cerr << "Fatal error: " << s << endl;
|
||||||
|
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
cerr << "Unknown exception in the main loop. Aborting..." << endl;
|
cerr << "Unknown exception in the main loop. Aborting..." << endl;
|
||||||
if (errno)
|
if (errno)
|
||||||
|
|
Loading…
Add table
Reference in a new issue