From 5991d3000f2ce27cef04197dd3bf7fa4e8f2aff6 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Mon, 20 Jul 2015 13:09:06 +0300 Subject: [PATCH] Printing backtrace on segfault --- libuavcan/test/test_main.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libuavcan/test/test_main.cpp b/libuavcan/test/test_main.cpp index e47e1af313..37afc97aae 100644 --- a/libuavcan/test/test_main.cpp +++ b/libuavcan/test/test_main.cpp @@ -4,9 +4,27 @@ #include #include +#include +#include +#include +#include +#include + +static void sigsegv_handler(int sig) +{ + const int BacktraceSize = 32; + void* array[BacktraceSize]; + const int size = backtrace(array, BacktraceSize); + + std::fprintf(stderr, "SIGNAL %d RECEIVED; STACKTRACE:\n", sig); + backtrace_symbols_fd(array, size, STDERR_FILENO); + std::exit(1); +} int main(int argc, char **argv) { + signal(SIGSEGV, sigsegv_handler); + #ifndef UAVCAN_CPP_VERSION # error UAVCAN_CPP_VERSION #endif @@ -17,6 +35,7 @@ int main(int argc, char **argv) #else # error UAVCAN_CPP_VERSION #endif + ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }