From e39eac8a6df15b3c9c2837eb6aea5b2adec04fa2 Mon Sep 17 00:00:00 2001 From: Erik Hofman Date: Mon, 30 Jan 2017 15:58:09 +0100 Subject: [PATCH] Nicer, human readanle, stack trace output --- src/Main/bootstrap.cxx | 48 ++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/src/Main/bootstrap.cxx b/src/Main/bootstrap.cxx index 5d35c9825..550d028e2 100644 --- a/src/Main/bootstrap.cxx +++ b/src/Main/bootstrap.cxx @@ -139,23 +139,49 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, #if defined(__GNUC__) #include -void segfault_handler(int sig) { +#include +void segfault_handler(int signo) { void *array[128]; - size_t size, i; - char** strs; + size_t size; + + fprintf(stderr, "Error: caught signal %d:\n", signo); - // get void*'s for all entries on the stack size = backtrace(array, 128); + if (size) { + char** list = backtrace_symbols(array, size); + size_t fnlen = 256; + char* fname = (char*)malloc(fnlen); - // print out all the frames to stderr - fprintf(stderr, "Error: signal %d:\n", sig); - backtrace_symbols_fd(array, size, STDERR_FILENO); + for (size_t i=1; i