Printing backtrace on segfault

This commit is contained in:
Pavel Kirienko
2015-07-20 13:09:06 +03:00
parent 29aff593aa
commit 5991d3000f
+19
View File
@@ -4,9 +4,27 @@
#include <gtest/gtest.h>
#include <uavcan/build_config.hpp>
#include <cstdio>
#include <cstdlib>
#include <execinfo.h>
#include <signal.h>
#include <unistd.h>
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();
}