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 | |
| parent | 1f96755ddc7c6c0850f7fa228d43427287cb2323 (diff) | |
| download | monzero-core-d8584fc8d78f1e97dfef214416d826b9f764c2e0.tar.gz monzero-core-d8584fc8d78f1e97dfef214416d826b9f764c2e0.tar.xz monzero-core-d8584fc8d78f1e97dfef214416d826b9f764c2e0.zip | |
util: log stack trace on crash
Diffstat (limited to 'src')
| -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__ |
