From 546a0985e104e43a0a2112ce0a009f8b5548b926 Mon Sep 17 00:00:00 2001 From: Giulio Eulisse <10544+ktf@users.noreply.github.com> Date: Wed, 6 Dec 2023 12:03:33 +0100 Subject: [PATCH] DPL: improve crash reason message --- Framework/Core/src/runDataProcessing.cxx | 25 ++++++++---------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/Framework/Core/src/runDataProcessing.cxx b/Framework/Core/src/runDataProcessing.cxx index 54af8e9b4a25e..d42eeafb63006 100644 --- a/Framework/Core/src/runDataProcessing.cxx +++ b/Framework/Core/src/runDataProcessing.cxx @@ -578,31 +578,22 @@ void handle_crash(int sig) { // dump demangled stack trace void* array[1024]; - int size = backtrace(array, 1024); { - char const* msg = "*** Program crashed (Segmentation fault, FPE, BUS, ABRT, KILL, Unhandled Exception, ...)\nBacktrace by DPL:\n"; - auto retVal = write(STDERR_FILENO, msg, strlen(msg)); - msg = "UNKNOWN SIGNAL\n"; - if (sig == SIGSEGV) { - msg = "SEGMENTATION FAULT\n"; - } else if (sig == SIGABRT) { - msg = "ABRT\n"; - } else if (sig == SIGBUS) { - msg = "BUS ERROR\n"; - } else if (sig == SIGILL) { - msg = "ILLEGAL INSTRUCTION\n"; - } else if (sig == SIGFPE) { + char buffer[1024]; + char const* msg = "*** Program crashed (%s)\nBacktrace by DPL:\n"; + snprintf(buffer, 1024, msg, strsignal(sig)); + if (sig == SIGFPE) { if (std::fetestexcept(FE_DIVBYZERO)) { - msg = "FLOATING POINT EXCEPTION (DIVISION BY ZERO)\n"; + snprintf(buffer, 1024, msg, "FLOATING POINT EXCEPTION - DIVISION BY ZERO"); } else if (std::fetestexcept(FE_INVALID)) { - msg = "FLOATING POINT EXCEPTION (INVALID RESULT)\n"; + snprintf(buffer, 1024, msg, "FLOATING POINT EXCEPTION - INVALID RESULT"); } else { - msg = "FLOATING POINT EXCEPTION (UNKNOWN REASON)\n"; + snprintf(buffer, 1024, msg, "FLOATING POINT EXCEPTION - UNKNOWN REASON"); } } - retVal = write(STDERR_FILENO, msg, strlen(msg)); + auto retVal = write(STDERR_FILENO, buffer, strlen(buffer)); (void)retVal; } demangled_backtrace_symbols(array, size, STDERR_FILENO);