summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/utils/checkutils.cpp34
-rw-r--r--src/utils/checkutils.h6
2 files changed, 40 insertions, 0 deletions
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 <execinfo.h>
+#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)