Improve debug stack printing interface

experimental
Perttu Ahola 2011-11-25 17:42:12 +02:00
parent e5650bb549
commit 6153a2fb10
2 changed files with 36 additions and 1 deletions

View 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);

View 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