/* (c) 2010 Perttu Ahola */ /* Debug stack and assertion */ #ifndef DEBUG_HEADER #define DEBUG_HEADER #include #include #include #include #include "common_irrlicht.h" /* Compatibility stuff */ #if (defined(WIN32) || defined(_WIN32_WCE)) typedef DWORD threadid_t; #define __NORETURN __declspec(noreturn) #define __FUNCTION_NAME __FUNCTION__ #else typedef pthread_t threadid_t; #define __NORETURN __attribute__ ((__noreturn__)) #define __FUNCTION_NAME __PRETTY_FUNCTION__ #endif inline threadid_t get_current_thread_id() { #if (defined(WIN32) || defined(_WIN32_WCE)) return GetCurrentThreadId(); #else return pthread_self(); #endif } /* Debug output */ #define DEBUGSTREAM_COUNT 2 extern FILE *g_debugstreams[DEBUGSTREAM_COUNT]; extern void debugstreams_init(bool disable_stderr, const char *filename); extern void debugstreams_deinit(); #define DEBUGPRINT(...)\ {\ for(int i=0; i g_debug_stacks; extern JMutex g_debug_stacks_mutex; extern void debug_stacks_init(); extern void debug_stacks_print(); class DebugStacker { public: DebugStacker(const char *text); ~DebugStacker(); private: DebugStack *m_stack; bool m_overflowed; }; #define DSTACK(...)\ char __buf[DEBUG_STACK_TEXT_SIZE];\ snprintf(__buf,\ DEBUG_STACK_TEXT_SIZE, __VA_ARGS__);\ DebugStacker __debug_stacker(__buf); #endif