X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fdebug.cpp;h=d0d2e047ba5b37c0fb46073efdb2469e5bcd056c;hb=d0ea6f9920d30f46d1f5d44e8823a8d932f9f29d;hp=346405939fd229b65fccbe0b9ee8f9965fdcb7f2;hpb=0604f3f2eedb93d75ac20422849e4e710427621a;p=dragonfireclient.git diff --git a/src/debug.cpp b/src/debug.cpp index 346405939..d0d2e047b 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -3,16 +3,16 @@ Minetest-c55 Copyright (C) 2010 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ @@ -22,15 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#ifdef _WIN32 - #define WIN32_LEAN_AND_MEAN - #include - #define sleep_ms(x) Sleep(x) -#else - #include - #define sleep_ms(x) usleep(x*1000) -#endif - /* Debug output */ @@ -41,6 +32,8 @@ void debugstreams_init(bool disable_stderr, const char *filename) { if(disable_stderr) g_debugstreams[0] = NULL; + else + g_debugstreams[0] = stderr; if(filename) g_debugstreams[1] = fopen(filename, "a"); @@ -72,9 +65,9 @@ Nullstream dummyout; void assert_fail(const char *assertion, const char *file, unsigned int line, const char *function) { - DEBUGPRINT("\nIn thread %x:\n" + DEBUGPRINT("\nIn thread %lx:\n" "%s:%d: %s: Assertion '%s' failed.\n", - (unsigned int)get_current_thread_id(), + (unsigned long)get_current_thread_id(), file, line, function, assertion); debug_stacks_print(); @@ -82,8 +75,6 @@ void assert_fail(const char *assertion, const char *file, if(g_debugstreams[1]) fclose(g_debugstreams[1]); - //sleep_ms(3000); - abort(); } @@ -96,17 +87,18 @@ DebugStack::DebugStack(threadid_t id) threadid = id; stack_i = 0; stack_max_i = 0; + memset(stack, 0, DEBUG_STACK_SIZE*DEBUG_STACK_TEXT_SIZE); } void DebugStack::print(FILE *file, bool everything) { - fprintf(file, "DEBUG STACK FOR THREAD %x:\n", - (unsigned int)threadid); + fprintf(file, "DEBUG STACK FOR THREAD %lx:\n", + (unsigned long)threadid); for(int i=0; i g_debug_stacks; JMutex g_debug_stacks_mutex; @@ -127,6 +137,21 @@ void debug_stacks_init() g_debug_stacks_mutex.Init(); } +void debug_stacks_print_to(std::ostream &os) +{ + JMutexAutoLock lock(g_debug_stacks_mutex); + + os<<"Debug stacks:"<::Iterator + i = g_debug_stacks.getIterator(); + i.atEnd() == false; i++) + { + DebugStack *stack = i.getNode()->getValue(); + stack->print(os, false); + } +} + void debug_stacks_print() { JMutexAutoLock lock(g_debug_stacks_mutex); @@ -202,3 +227,35 @@ DebugStacker::~DebugStacker() } } + +#ifdef _MSC_VER +#if CATCH_UNHANDLED_EXCEPTIONS == 1 +void se_trans_func(unsigned int u, EXCEPTION_POINTERS* pExp) +{ + dstream<<"In trans_func.\n"; + if(u == EXCEPTION_ACCESS_VIOLATION) + { + PEXCEPTION_RECORD r = pExp->ExceptionRecord; + dstream<<"Access violation at "<ExceptionAddress + <<" write?="<ExceptionInformation[0] + <<" address="<ExceptionInformation[1] + <