Allow server-side teleporting
[oweals/minetest.git] / src / debug.h
index 092bb03a819f67486ecca67964fdbd4855bd773b..5150758be13506d070b9ed8cca5bcd6ed4fd3f1b 100644 (file)
@@ -33,7 +33,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifdef _WIN32
        #define WIN32_LEAN_AND_MEAN
        #include <windows.h>
-       #include <eh.h>
+       #ifdef _MSC_VER
+               #include <eh.h>
+       #endif
 #else
 #endif
 
@@ -83,7 +85,7 @@ public:
                
                return c;
        }
-       int xsputn(const char *s, int n)
+       std::streamsize xsputn(const char *s, std::streamsize n)
        {
                for(int i=0; i<DEBUGSTREAM_COUNT; i++)
                {
@@ -143,6 +145,7 @@ struct DebugStack
 {
        DebugStack(threadid_t id);
        void print(FILE *file, bool everything);
+       void print(std::ostream &os, bool everything);
        
        threadid_t threadid;
        char stack[DEBUG_STACK_SIZE][DEBUG_STACK_TEXT_SIZE];
@@ -154,6 +157,7 @@ extern core::map<threadid_t, DebugStack*> g_debug_stacks;
 extern JMutex g_debug_stacks_mutex;
 
 extern void debug_stacks_init();
+extern void debug_stacks_print_to(std::ostream &os);
 extern void debug_stacks_print();
 
 class DebugStacker
@@ -167,7 +171,10 @@ private:
        bool m_overflowed;
 };
 
-#define DSTACK(...)\
+#define DSTACK(msg)\
+       DebugStacker __debug_stacker(msg);
+
+#define DSTACKF(...)\
        char __buf[DEBUG_STACK_TEXT_SIZE];\
        snprintf(__buf,\
                        DEBUG_STACK_TEXT_SIZE, __VA_ARGS__);\
@@ -230,10 +237,9 @@ private:
 
 #if CATCH_UNHANDLED_EXCEPTIONS == 1
        #define BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER try{
-       #define END_PORTABLE_DEBUG_EXCEPTION_HANDLER\
+       #define END_PORTABLE_DEBUG_EXCEPTION_HANDLER(logstream)\
                }catch(std::exception &e){\
-                       dstream<<std::endl<<DTIME\
-                                       <<"ERROR: An unhandled exception occurred: "\
+                       logstream<<"ERROR: An unhandled exception occurred: "\
                                        <<e.what()<<std::endl;\
                        assert(0);\
                }
@@ -252,24 +258,24 @@ public:
                                BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER\
                                _set_se_translator(se_trans_func);
 
-                       #define END_DEBUG_EXCEPTION_HANDLER \
-                               END_PORTABLE_DEBUG_EXCEPTION_HANDLER
+                       #define END_DEBUG_EXCEPTION_HANDLER(logstream) \
+                               END_PORTABLE_DEBUG_EXCEPTION_HANDLER(logstream)
                #else // Probably mingw
                        #define BEGIN_DEBUG_EXCEPTION_HANDLER\
                                BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER
-                       #define END_DEBUG_EXCEPTION_HANDLER\
-                               END_PORTABLE_DEBUG_EXCEPTION_HANDLER
+                       #define END_DEBUG_EXCEPTION_HANDLER(logstream)\
+                               END_PORTABLE_DEBUG_EXCEPTION_HANDLER(logstream)
                #endif
        #else // Posix
                #define BEGIN_DEBUG_EXCEPTION_HANDLER\
                        BEGIN_PORTABLE_DEBUG_EXCEPTION_HANDLER
-               #define END_DEBUG_EXCEPTION_HANDLER\
-                       END_PORTABLE_DEBUG_EXCEPTION_HANDLER
+               #define END_DEBUG_EXCEPTION_HANDLER(logstream)\
+                       END_PORTABLE_DEBUG_EXCEPTION_HANDLER(logstream)
        #endif
 #else
        // Dummy ones
        #define BEGIN_DEBUG_EXCEPTION_HANDLER
-       #define END_DEBUG_EXCEPTION_HANDLER
+       #define END_DEBUG_EXCEPTION_HANDLER(logstream)
 #endif
 
 #endif // DEBUG_HEADER