summaryrefslogtreecommitdiff
path: root/src/common/nullpo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/nullpo.c')
-rw-r--r--src/common/nullpo.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/common/nullpo.c b/src/common/nullpo.c
index e61d52257..a8980885f 100644
--- a/src/common/nullpo.c
+++ b/src/common/nullpo.c
@@ -6,11 +6,15 @@
#include "nullpo.h"
+#include "common/showmsg.h"
+
#include <stdio.h>
#include <stdarg.h>
+#include <stdlib.h>
#include <string.h>
-
-#include "../common/showmsg.h"
+#ifdef __GNUC__
+#include <execinfo.h>
+#endif
struct nullpo_interface nullpo_s;
@@ -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 = (int)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);
}