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 | |
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.
-rw-r--r-- | src/utils/checkutils.cpp | 34 | ||||
-rw-r--r-- | src/utils/checkutils.h | 6 |
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) |