aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/debug.cpp35
-rw-r--r--src/debug.h2
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