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(); }