diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2018-04-12 15:17:38 +0100 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2018-04-12 20:36:16 +0100 |
commit | d8584fc8d78f1e97dfef214416d826b9f764c2e0 (patch) | |
tree | a0c5583e9a9dae24fe57a9891a12d40553007ea5 /src/common/util.cpp | |
parent | Merge pull request #3618 (diff) | |
download | monero-d8584fc8d78f1e97dfef214416d826b9f764c2e0.tar.xz |
util: log stack trace on crash
Diffstat (limited to '')
-rw-r--r-- | src/common/util.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/common/util.cpp b/src/common/util.cpp index 1877acb57..7e77e19b1 100644 --- a/src/common/util.cpp +++ b/src/common/util.cpp @@ -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__ |