remove STACK_TRACE macro definition and supporting classes/functions
This commit is contained in:
parent
3993326711
commit
39c8ee2a79
|
@ -2,16 +2,12 @@
|
|||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
#include <crt/snprintf.h>
|
||||
|
||||
#include "log.h"
|
||||
#include "util/msgbox.h"
|
||||
|
||||
const int32_t STACK_ENTRY_STACK_SIZE = 32;
|
||||
const int32_t STACK_ENTRY_BUFFER_SIZE = 512;
|
||||
const int32_t STACK_TRACE_BUFFER_SIZE = 2048;
|
||||
const int32_t DEBUG_ASSERT_BUFFER_SIZE = 2048;
|
||||
|
||||
void DebugInit()
|
||||
|
@ -38,16 +34,6 @@ int DebugAssert(const char *expression, const char *file, unsigned long line, co
|
|||
char buffer[DEBUG_ASSERT_BUFFER_SIZE];
|
||||
int ret = 0;
|
||||
|
||||
#ifdef DEBUG_STACK_TRACE
|
||||
snprintf(buffer, DEBUG_ASSERT_BUFFER_SIZE,
|
||||
"ASSERT FAILED\n\n"
|
||||
"EXPRESSION: %s\n"
|
||||
"FILE: %s\n"
|
||||
"LINE: %ld\n"
|
||||
"FUNCTION: %s\n\n"
|
||||
"STACK TRACE:\n%s\n",
|
||||
expression, file, line, function, DebugStackTrace());
|
||||
#else
|
||||
snprintf(buffer, DEBUG_ASSERT_BUFFER_SIZE,
|
||||
"ASSERT FAILED\n\n"
|
||||
"EXPRESSION: %s\n"
|
||||
|
@ -55,7 +41,6 @@ int DebugAssert(const char *expression, const char *file, unsigned long line, co
|
|||
"LINE: %ld\n"
|
||||
"FUNCTION: %s\n",
|
||||
expression, file, line, function);
|
||||
#endif
|
||||
|
||||
LOG_ERROR(LOGCAT_DEBUG, buffer);
|
||||
MSGBOX_RESULT result = MsgBox_AbortRetryIgnore(MSGBOX_TYPE_WARNING, buffer, "Assert Failed");
|
||||
|
@ -80,75 +65,3 @@ int DebugAssert(const char *expression, const char *file, unsigned long line, co
|
|||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char* DebugStackTrace()
|
||||
{
|
||||
#ifdef DEBUG_STACK_TRACE
|
||||
return StackTrace::Instance().GetTrace();
|
||||
#endif
|
||||
return "";
|
||||
}
|
||||
|
||||
StackTrace::StackTrace()
|
||||
{
|
||||
m_traceBuffer = new char[STACK_TRACE_BUFFER_SIZE];
|
||||
m_entryStack = new char*[STACK_ENTRY_STACK_SIZE];
|
||||
for (int i = 0; i < STACK_ENTRY_STACK_SIZE; ++i)
|
||||
m_entryStack[i] = new char[STACK_ENTRY_BUFFER_SIZE];
|
||||
m_entryStackPointer = 0;
|
||||
Clear();
|
||||
}
|
||||
|
||||
StackTrace::~StackTrace()
|
||||
{
|
||||
delete[] m_traceBuffer;
|
||||
for (int i = 0; i < STACK_ENTRY_STACK_SIZE; ++i)
|
||||
delete[] m_entryStack[i];
|
||||
delete[] m_entryStack;
|
||||
Clear();
|
||||
}
|
||||
|
||||
StackTrace& StackTrace::Instance()
|
||||
{
|
||||
static StackTrace stackTrace;
|
||||
return stackTrace;
|
||||
}
|
||||
|
||||
void StackTrace::Push(char *entry)
|
||||
{
|
||||
assert(m_entryStackPointer < STACK_ENTRY_STACK_SIZE);
|
||||
snprintf(m_entryStack[m_entryStackPointer], STACK_ENTRY_BUFFER_SIZE, "%s", entry);
|
||||
++m_entryStackPointer;
|
||||
}
|
||||
|
||||
void StackTrace::Pop()
|
||||
{
|
||||
--m_entryStackPointer;
|
||||
m_entryStack[m_entryStackPointer][0] = '\0';
|
||||
}
|
||||
|
||||
void StackTrace::Clear()
|
||||
{
|
||||
m_entryStackPointer = 0;
|
||||
}
|
||||
|
||||
char* StackTrace::GetTrace()
|
||||
{
|
||||
*m_traceBuffer = '\0';
|
||||
for (int pointer = m_entryStackPointer; pointer >= 0; --pointer)
|
||||
snprintf(m_traceBuffer, STACK_TRACE_BUFFER_SIZE, "%s%s\n", m_traceBuffer, m_entryStack[pointer]);
|
||||
|
||||
return m_traceBuffer;
|
||||
}
|
||||
|
||||
StackEntry::StackEntry(const char *file, unsigned long line, const char *function)
|
||||
{
|
||||
static char buffer[STACK_ENTRY_BUFFER_SIZE];
|
||||
snprintf(buffer, STACK_ENTRY_BUFFER_SIZE, "%s:%ld:%s", file, line, function);
|
||||
StackTrace::Instance().Push(buffer);
|
||||
}
|
||||
|
||||
StackEntry::~StackEntry()
|
||||
{
|
||||
StackTrace::Instance().Pop();
|
||||
}
|
||||
|
|
|
@ -19,20 +19,6 @@
|
|||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_STACK_TRACE
|
||||
/**
|
||||
* Call stack tracing macro. Simply include this at the top of
|
||||
* any function to be tracked in the stack history.
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
#define STACK_TRACE StackEntry __stackEntry(__FILE__, __LINE__, __PRETTY_FUNCTION__)
|
||||
#else
|
||||
#define STACK_TRACE StackEntry __stackEntry(__FILE__, __LINE__, __FUNCSIG__)
|
||||
#endif
|
||||
#else
|
||||
#define STACK_TRACE
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
/**
|
||||
* Toggles a breakpoint in an attached debugger.
|
||||
|
@ -92,70 +78,12 @@
|
|||
*/
|
||||
#define STATIC_ASSERT(exp) typedef int _STATIC_ASSERT_TEST(static_assert_test_var_, __LINE__)[(exp) ? 1 : -1]
|
||||
|
||||
/**
|
||||
* Maintains a list of call stack entries. Entries need to be
|
||||
* manually pushed/popped off this list.
|
||||
*
|
||||
* This class should not be used directly. Instead use the STACK_TRACE
|
||||
* macro and DebugStackTrace() function.
|
||||
*/
|
||||
class StackTrace
|
||||
{
|
||||
public:
|
||||
static StackTrace& Instance();
|
||||
|
||||
StackTrace();
|
||||
~StackTrace();
|
||||
|
||||
/**
|
||||
* Add new entry onto the top of call stack history.
|
||||
* @param entry the entry to add
|
||||
*/
|
||||
void Push(char *entry);
|
||||
|
||||
/**
|
||||
* Remove top entry off the call stack history.
|
||||
*/
|
||||
void Pop();
|
||||
|
||||
/**
|
||||
* Remove all entries from the call stack history.
|
||||
*/
|
||||
void Clear();
|
||||
|
||||
int GetSize() { return m_entryStackPointer + 1; }
|
||||
|
||||
/**
|
||||
* @return formatted string containing the call stack
|
||||
* entries top-to-bottom
|
||||
*/
|
||||
char* GetTrace();
|
||||
|
||||
private:
|
||||
char *m_traceBuffer;
|
||||
char **m_entryStack;
|
||||
int m_entryStackPointer;
|
||||
};
|
||||
|
||||
/**
|
||||
* Used by the STACK_TRACE macro to push/pop entries onto the
|
||||
* actual stack.
|
||||
*
|
||||
* This class should not be used directly.
|
||||
*/
|
||||
class StackEntry
|
||||
{
|
||||
public:
|
||||
StackEntry(const char *file, unsigned long line, const char *function);
|
||||
~StackEntry();
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializes the debug framework.
|
||||
*/
|
||||
void DebugInit();
|
||||
|
||||
/*
|
||||
/**
|
||||
* Closes up the debug framework.
|
||||
*/
|
||||
void DebugClose();
|
||||
|
@ -171,10 +99,4 @@ void DebugClose();
|
|||
*/
|
||||
int DebugAssert(const char *expression, const char *file, unsigned long line, const char *function, int *ignore);
|
||||
|
||||
/**
|
||||
* Gets the current call stack as recorded by the STACK_TRACE macros.
|
||||
* @return formatted string containing the call stack
|
||||
*/
|
||||
const char* DebugStackTrace();
|
||||
|
||||
#endif
|
||||
|
|
Reference in a new issue