Improve debug stack printing interface
authorPerttu Ahola <celeron55@gmail.com>
Fri, 25 Nov 2011 15:42:12 +0000 (17:42 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:51 +0000 (19:13 +0200)
src/debug.cpp
src/debug.h

index befd73a382a1d7ab27a16879cfb436369e5e6ab4..ad02c5110583c1c979e1773694a22d8acd6ab042 100644 (file)
@@ -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);
index 98fe6e129525377ac4d82f4ad8b02c34d8b68ebc..5150758be13506d070b9ed8cca5bcd6ed4fd3f1b 100644 (file)
@@ -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