diff options
author | Perttu Ahola <celeron55@gmail.com> | 2010-12-27 14:34:17 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2010-12-27 14:34:17 +0200 |
commit | fa64103aa87a8f0f2a3351bb4a54e93e8ade1082 (patch) | |
tree | 689986c383e3444cba35a16864e03f61593c5686 /src/debug.h | |
parent | 847a4227b850bc943d11c5b8191fb6bcbce1920a (diff) | |
download | minetest-fa64103aa87a8f0f2a3351bb4a54e93e8ade1082.tar.gz minetest-fa64103aa87a8f0f2a3351bb4a54e93e8ade1082.tar.bz2 minetest-fa64103aa87a8f0f2a3351bb4a54e93e8ade1082.zip |
better debug output in segfaults and stack overflows in windows
Diffstat (limited to 'src/debug.h')
-rw-r--r-- | src/debug.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/debug.h b/src/debug.h index 3f269176a..8faa65eb8 100644 --- a/src/debug.h +++ b/src/debug.h @@ -27,6 +27,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "common_irrlicht.h" #include "threads.h" #include "gettime.h" +#include "constants.h" +#include "exceptions.h" + +#ifdef _WIN32 + #define WIN32_LEAN_AND_MEAN + #include <windows.h> + #include <eh.h> +#else +#endif /* Debug output @@ -215,6 +224,60 @@ private: core::map<u16, u16> m_packets; }; +/* + These should be put into every thread +*/ + +#if CATCH_UNHANDLED_EXCEPTIONS == 1 + #define BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER try{ + #define END_PORTABLE_DEBUG_EXCEPTION_HANDLER\ + }catch(std::exception &e){\ + dstream<<std::endl<<DTIME\ + <<"ERROR: An unhandled exception occurred: "\ + <<e.what()<<std::endl;\ + assert(0);\ + } + #ifdef _WIN32 // Windows + +/*class SE_Exception : public std::exception +{ +private: + unsigned int nSE; +public: + SE_Exception() {} + SE_Exception( unsigned int n ) : nSE( n ) {} + ~SE_Exception() {} + unsigned int getSeNumber() { return nSE; } +};*/ + +void se_trans_func(unsigned int, EXCEPTION_POINTERS*); + +class FatalSystemException : public BaseException +{ +public: + FatalSystemException(const char *s): + BaseException(s) + {} +}; + + #define BEGIN_DEBUG_EXCEPTION_HANDLER \ + BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER\ + _set_se_translator(se_trans_func); + + #define END_DEBUG_EXCEPTION_HANDLER \ + END_PORTABLE_DEBUG_EXCEPTION_HANDLER + + #else // Posix + #define BEGIN_DEBUG_EXCEPTION_HANDLER\ + BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER + #define END_DEBUG_EXCEPTION_HANDLER\ + END_PORTABLE_DEBUG_EXCEPTION_HANDLER + #endif +#else + // Dummy ones + #define BEGIN_DEBUG_EXCEPTION_HANDLER + #define END_DEBUG_EXCEPTION_HANDLER +#endif #endif // DEBUG_HEADER |