From 4b5e005d57e6007a465f8db59508ff13daffbdfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Tvrd=C3=ADk?= Date: Fri, 3 Apr 2015 12:42:49 +0200 Subject: [PATCH] Birdtest: Add printing backtrace while segfault --- test/birdtest.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/test/birdtest.c b/test/birdtest.c index e6e78628..00471425 100644 --- a/test/birdtest.c +++ b/test/birdtest.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -89,6 +90,16 @@ bt_init(int argc, char *argv[]) exit(3); } +static void +dump_stack(void) +{ + static void *backbuf[50]; + int levels; + + levels = backtrace(backbuf, 50); + backtrace_symbols_fd(backbuf, levels, STDERR_FILENO); +} + void bt_test_case5(int (*test_fn)(void), const char *test_id, const char *dsc, int forked, int timeout) { @@ -143,7 +154,10 @@ bt_test_case5(int (*test_fn)(void), const char *test_id, const char *dsc, int fo if (sn == SIGALRM) bt_log("Timeout expired"); else if (sn == SIGSEGV) - bt_log("Segmentation fault"); + { + bt_log("Segmentation fault:"); + dump_stack(); + } else if (sn != SIGABRT) bt_log("Signal %d received", sn); }