diff --git a/src/common/capwap_debug.c b/src/common/capwap_debug.c index 1bdae74..3bd24bd 100644 --- a/src/common/capwap_debug.c +++ b/src/common/capwap_debug.c @@ -160,3 +160,26 @@ int capwap_check_memory_leak(int verbose) { return ((g_memoryblocks != NULL) ? 1 : 0); } + +/* Backtrace call stack */ +void capwap_backtrace_callstack(void) { + int i; + int count; + char** functions; + void* buffer[BACKTRACE_BUFFER]; + + /* */ + count = backtrace(buffer, BACKTRACE_BUFFER); + if (count) { + functions = backtrace_symbols(buffer, count); + if (functions) { + + /* Skipping capwap_backtrace_callstack function print out */ + for (i = 1; i < count; i++) { + capwap_logging_debug("\t%s", functions[i]); + } + + free(functions); + } + } +} diff --git a/src/common/capwap_debug.h b/src/common/capwap_debug.h index a622944..ef59284 100644 --- a/src/common/capwap_debug.h +++ b/src/common/capwap_debug.h @@ -19,6 +19,8 @@ void capwap_free_debug(void* p, const char* file, const int line); int capwap_check_memory_leak(int verbose); void capwap_dump_memory(void); +void capwap_backtrace_callstack(void); + #else #define DEBUG_BREAKPOINT() @@ -30,6 +32,7 @@ void capwap_dump_memory(void); #define capwap_free(x) free(x) #define capwap_check_memory_leak(x) (0) #define capwap_dump_memory() (0) +#define capwap_backtrace_callstack() (0) #endif