diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-01-10 21:53:30 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-01-10 21:53:30 +0000 |
commit | ccffb95f03f1710ecfa2d1b9a20a28ba94d08290 (patch) | |
tree | e8c3e0ad4c9c55ee296614de565dd58e5670d83a | |
parent | 5632c9c8c0e8ddf3b5945fd36b19dff7367851c5 (diff) | |
download | netsurf-ccffb95f03f1710ecfa2d1b9a20a28ba94d08290.tar.gz netsurf-ccffb95f03f1710ecfa2d1b9a20a28ba94d08290.tar.bz2 |
monkey: On assert failure, print a backtrace
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
-rw-r--r-- | frontends/monkey/main.c | 23 |
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) { |