summaryrefslogtreecommitdiff
path: root/src/debug.h
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2010-12-27 14:34:17 +0200
committerPerttu Ahola <celeron55@gmail.com>2010-12-27 14:34:17 +0200
commitfa64103aa87a8f0f2a3351bb4a54e93e8ade1082 (patch)
tree689986c383e3444cba35a16864e03f61593c5686 /src/debug.h
parent847a4227b850bc943d11c5b8191fb6bcbce1920a (diff)
downloadminetest-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.h63
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