forked from Mirrorlandia_minetest/minetest
Improve debug stack printing interface
This commit is contained in:
parent
e5650bb549
commit
6153a2fb10
@ -101,7 +101,7 @@ void DebugStack::print(FILE *file, bool everything)
|
|||||||
for(int i=0; i<stack_max_i; i++)
|
for(int i=0; i<stack_max_i; i++)
|
||||||
{
|
{
|
||||||
if(i == stack_i && everything == false)
|
if(i == stack_i && everything == false)
|
||||||
continue;
|
break;
|
||||||
|
|
||||||
if(i < stack_i)
|
if(i < stack_i)
|
||||||
fprintf(file, "#%d %s\n", 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");
|
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;
|
core::map<threadid_t, DebugStack*> g_debug_stacks;
|
||||||
JMutex g_debug_stacks_mutex;
|
JMutex g_debug_stacks_mutex;
|
||||||
@ -122,6 +140,21 @@ void debug_stacks_init()
|
|||||||
g_debug_stacks_mutex.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()
|
void debug_stacks_print()
|
||||||
{
|
{
|
||||||
JMutexAutoLock lock(g_debug_stacks_mutex);
|
JMutexAutoLock lock(g_debug_stacks_mutex);
|
||||||
|
@ -145,6 +145,7 @@ struct DebugStack
|
|||||||
{
|
{
|
||||||
DebugStack(threadid_t id);
|
DebugStack(threadid_t id);
|
||||||
void print(FILE *file, bool everything);
|
void print(FILE *file, bool everything);
|
||||||
|
void print(std::ostream &os, bool everything);
|
||||||
|
|
||||||
threadid_t threadid;
|
threadid_t threadid;
|
||||||
char stack[DEBUG_STACK_SIZE][DEBUG_STACK_TEXT_SIZE];
|
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 JMutex g_debug_stacks_mutex;
|
||||||
|
|
||||||
extern void debug_stacks_init();
|
extern void debug_stacks_init();
|
||||||
|
extern void debug_stacks_print_to(std::ostream &os);
|
||||||
extern void debug_stacks_print();
|
extern void debug_stacks_print();
|
||||||
|
|
||||||
class DebugStacker
|
class DebugStacker
|
||||||
|
Loading…
Reference in New Issue
Block a user