summaryrefslogtreecommitdiff
path: root/frontends/monkey
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2020-01-10 21:53:30 +0000
committerDaniel Silverstone <dsilvers@digital-scurf.org>2020-01-10 21:53:30 +0000
commitccffb95f03f1710ecfa2d1b9a20a28ba94d08290 (patch)
treee8c3e0ad4c9c55ee296614de565dd58e5670d83a /frontends/monkey
parent5632c9c8c0e8ddf3b5945fd36b19dff7367851c5 (diff)
downloadnetsurf-ccffb95f03f1710ecfa2d1b9a20a28ba94d08290.tar.gz
netsurf-ccffb95f03f1710ecfa2d1b9a20a28ba94d08290.tar.bz2
monkey: On assert failure, print a backtrace
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'frontends/monkey')
-rw-r--r--frontends/monkey/main.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/frontends/monkey/main.c b/frontends/monkey/main.c
index e1c2a382c..a89314440 100644
--- a/frontends/monkey/main.c
+++ b/frontends/monkey/main.c
@@ -316,6 +316,29 @@ static void monkey_run(void)
}
}
+#ifndef NDEBUG
+#include <execinfo.h>
+static void *backtrace_buffer[4096];
+
+void
+__assert_fail(const char *__assertion, const char *__file,
+ unsigned int __line, const char *__function)
+{
+ int frames;
+ fprintf(stderr, "MONKEY: Assertion failure!\n%s:%d: %s: Assertion `%s` failed.\n",
+ __file, __line, __function, __assertion);
+
+ frames = backtrace(&backtrace_buffer[0], 4096);
+ if (frames > 0 && frames < 4096) {
+ fprintf(stderr, "Backtrace:\n");
+ fflush(stderr);
+ backtrace_symbols_fd(&backtrace_buffer[0], frames, 2);
+ }
+
+ abort();
+}
+#endif
+
int
main(int argc, char **argv)
{