summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-05-26 01:07:08 +0300
committerAndrei Karas <akaras@inbox.ru>2015-05-30 22:11:34 +0300
commitc5ff02958806ea5a672dcc9371602a6c090c6758 (patch)
tree93231ea05f6b30310f343b9635da07da901b96bc /src/common
parentdaf5312ee4d1de6dd43b23f719e94427aeb33e5d (diff)
downloadhercules-c5ff02958806ea5a672dcc9371602a6c090c6758.tar.gz
hercules-c5ff02958806ea5a672dcc9371602a6c090c6758.tar.bz2
hercules-c5ff02958806ea5a672dcc9371602a6c090c6758.tar.xz
hercules-c5ff02958806ea5a672dcc9371602a6c090c6758.zip
Dump stack in nullpo*/Assert* function.
Also enable in configure linker flag -rdynamic.
Diffstat (limited to 'src/common')
-rw-r--r--src/common/nullpo.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/common/nullpo.c b/src/common/nullpo.c
index e61d52257..97b206835 100644
--- a/src/common/nullpo.c
+++ b/src/common/nullpo.c
@@ -8,7 +8,11 @@
#include <stdio.h>
#include <stdarg.h>
+#include <stdlib.h>
#include <string.h>
+#ifdef __GNUC__
+#include <execinfo.h>
+#endif
#include "../common/showmsg.h"
@@ -24,6 +28,12 @@ struct nullpo_interface nullpo_s;
* @param title Message title to display (i.e. failed assertion or nullpo info)
*/
void assert_report(const char *file, int line, const char *func, const char *targetname, const char *title) {
+#ifdef __GNUC__
+ void *array[10];
+ int size;
+ char **strings;
+ int i;
+#endif
if (file == NULL)
file = "??";
@@ -32,6 +42,13 @@ void assert_report(const char *file, int line, const char *func, const char *tar
ShowError("--- %s --------------------------------------------\n", title);
ShowError("%s:%d: '%s' in function `%s'\n", file, line, targetname, func);
+#ifdef __GNUC__
+ size = backtrace (array, 10);
+ strings = backtrace_symbols (array, size);
+ for (i = 0; i < size; i++)
+ ShowError("%s\n", strings[i]);
+ free (strings);
+#endif
ShowError("--- end %s ----------------------------------------\n", title);
}