From 22795c4301cd6b62a8270b45a72a850ed888daf8 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 30 Apr 2016 01:41:34 +0300 Subject: Add function for report call stack. --- src/utils/checkutils.cpp | 34 ++++++++++++++++++++++++++++++++++ src/utils/checkutils.h | 6 ++++++ 2 files changed, 40 insertions(+) (limited to 'src') diff --git a/src/utils/checkutils.cpp b/src/utils/checkutils.cpp index 8aa82bc11..2fc471d7e 100644 --- a/src/utils/checkutils.cpp +++ b/src/utils/checkutils.cpp @@ -24,6 +24,10 @@ #include "logger.h" +#if defined __linux__ || defined __linux +#include +#endif // defined __linux__ || defined __linux + #include "debug.h" bool reportFalseReal(const bool val, const char *const file, @@ -42,4 +46,34 @@ bool reportTrueReal(const bool val, const char *const file, return val; } +void reportStack(const char *const file, + const unsigned int line, + const char *const func, + const char *const name, + const char *const text) +{ +#if defined __linux__ || defined __linux + void *array[15]; + int size; + char **strings; + int i; +#endif // defined __linux__ || defined __linux + + logger->log("--- %s --------------------------------------------", + name); + logger->log("%s:%u: '%s' in function `%s'", + file, + line, + text, + func); +#if defined __linux__ || defined __linux + size = (int)backtrace(array, 15); + strings = backtrace_symbols(array, size); + for (i = 0; i < size; i++) + logger->log1(strings[i]); + free(strings); +#endif // defined __linux__ || defined __linux + +} + #endif // ENABLE_ASSERTS diff --git a/src/utils/checkutils.h b/src/utils/checkutils.h index ce4fcdc61..21f439743 100644 --- a/src/utils/checkutils.h +++ b/src/utils/checkutils.h @@ -35,6 +35,12 @@ bool reportFalseReal(const bool val, const char *const file, bool reportTrueReal(const bool val, const char *const file, const unsigned line); +void reportStack(const char *const file, + const unsigned int line, + const char *const func, + const char *const name, + const char *const text); + #else // ENABLE_ASSERTS #define reportFalse(val) (val) -- cgit v1.2.3-60-g2f50