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 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/utils/checkutils.cpp') 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 -- cgit v1.2.3-60-g2f50