From c96d701769a8ee39bc90a3b542892b4db9031ab8 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Fri, 13 May 2016 17:48:55 +0200 Subject: [PATCH] src: print backtrace on abort/unreachable code Print a C backtrace on fatal errors to make it easier to debug issues. PR-URL: https://github.com/nodejs/node/pull/6734 Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig --- src/node.cc | 1 - src/util.h | 11 +++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/node.cc b/src/node.cc index d97c533a56b9c6..bc328ad88a80f7 100644 --- a/src/node.cc +++ b/src/node.cc @@ -2452,7 +2452,6 @@ static void OnFatalError(const char* location, const char* message) { } else { PrintErrorString("FATAL ERROR: %s\n", message); } - DumpBacktrace(stderr); fflush(stderr); ABORT(); } diff --git a/src/util.h b/src/util.h index 94278e2b9fc5e5..f3f123c6d1ac31 100644 --- a/src/util.h +++ b/src/util.h @@ -38,11 +38,18 @@ template using remove_reference = std::remove_reference; // Windows 8+ does not like abort() in Release mode #ifdef _WIN32 -#define ABORT() raise(SIGABRT) +#define ABORT_NO_BACKTRACE() raise(SIGABRT) #else -#define ABORT() abort() +#define ABORT_NO_BACKTRACE() abort() #endif +#define ABORT() \ + do { \ + node::DumpBacktrace(stderr); \ + fflush(stderr); \ + ABORT_NO_BACKTRACE(); \ + } while (0) + #if defined(NDEBUG) # define ASSERT(expression) # define CHECK(expression) \