diff options
-rw-r--r-- | src/debug.cpp | 35 | ||||
-rw-r--r-- | src/debug.h | 2 |
2 files changed, 36 insertions, 1 deletions
diff --git a/src/debug.cpp b/src/debug.cpp index befd73a38..ad02c5110 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -101,7 +101,7 @@ void DebugStack::print(FILE *file, bool everything) for(int i=0; i<stack_max_i; i++) { if(i == stack_i && everything == false) - continue; + break; if(i < stack_i) fprintf(file, "#%d %s\n", i, stack[i]); @@ -113,6 +113,24 @@ void DebugStack::print(FILE *file, bool everything) fprintf(file, "Probably overflown.\n"); } +void DebugStack::print(std::ostream &os, bool everything) +{ + os<<"DEBUG STACK FOR THREAD "<<(unsigned long)threadid<<": "<<std::endl; + + for(int i=0; i<stack_max_i; i++) + { + if(i == stack_i && everything == false) + break; + + if(i < stack_i) + os<<"#"<<i<<" "<<stack[i]<<std::endl; + else + os<<"(Leftover data: #"<<i<<" "<<stack[i]<<")"<<std::endl; + } + + if(stack_i == DEBUG_STACK_SIZE) + os<<"Probably overflown."<<std::endl; +} core::map<threadid_t, DebugStack*> g_debug_stacks; JMutex g_debug_stacks_mutex; @@ -122,6 +140,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:"<<std::endl; + + for(core::map<threadid_t, DebugStack*>::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); diff --git a/src/debug.h b/src/debug.h index 98fe6e129..5150758be 100644 --- a/src/debug.h +++ b/src/debug.h @@ -145,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]; @@ -156,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 |