util: log stack trace on crash

This commit is contained in:
moneromooo-monero 2018-04-12 15:17:38 +01:00
parent 41a66bf05b
commit 9dc67af187
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3

View File

@ -43,6 +43,7 @@ using namespace epee;
#include "crypto/crypto.h"
#include "util.h"
#include "stack_trace.h"
#include "memwipe.h"
#include "cryptonote_config.h"
#include "net/http_client.h" // epee::net_utils::...
@ -560,10 +561,48 @@ std::string get_nix_version_display_string()
}
return false;
}
#ifdef STACK_TRACE
#ifdef _WIN32
// https://stackoverflow.com/questions/1992816/how-to-handle-seg-faults-under-windows
static LONG WINAPI windows_crash_handler(PEXCEPTION_POINTERS pExceptionInfo)
{
tools::log_stack_trace("crashing");
exit(1);
return EXCEPTION_CONTINUE_SEARCH;
}
static void setup_crash_dump()
{
SetUnhandledExceptionFilter(windows_crash_handler);
}
#else
static void posix_crash_handler(int signal)
{
tools::log_stack_trace(("crashing with fatal signal " + std::to_string(signal)).c_str());
#ifdef NDEBUG
_exit(1);
#else
abort();
#endif
}
static void setup_crash_dump()
{
signal(SIGSEGV, posix_crash_handler);
signal(SIGBUS, posix_crash_handler);
signal(SIGILL, posix_crash_handler);
signal(SIGFPE, posix_crash_handler);
}
#endif
#else
static void setup_crash_dump() {}
#endif
bool on_startup()
{
mlog_configure("", true);
setup_crash_dump();
sanitize_locale();
#ifdef __GLIBC__