diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-04-30 01:41:34 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-04-30 01:41:34 +0300 |
commit | 22795c4301cd6b62a8270b45a72a850ed888daf8 (patch) | |
tree | 6180229d4c537ea46d24b187251c67f0131197b4 /src/utils/checkutils.cpp | |
parent | 3fcfe6db5678ecde9ca20ca058c1a603cc8abfc2 (diff) | |
download | manaplus-22795c4301cd6b62a8270b45a72a850ed888daf8.tar.gz manaplus-22795c4301cd6b62a8270b45a72a850ed888daf8.tar.bz2 manaplus-22795c4301cd6b62a8270b45a72a850ed888daf8.tar.xz manaplus-22795c4301cd6b62a8270b45a72a850ed888daf8.zip |
Add function for report call stack.
Diffstat (limited to 'src/utils/checkutils.cpp')
-rw-r--r-- | src/utils/checkutils.cpp | 34 |
1 files changed, 34 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 |