Skip to content

Commit d4d2179

Browse files
authored
DPL: improve crash reason message (#12404)
1 parent 57e9e81 commit d4d2179

1 file changed

Lines changed: 8 additions & 17 deletions

File tree

Framework/Core/src/runDataProcessing.cxx

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -578,31 +578,22 @@ void handle_crash(int sig)
578578
{
579579
// dump demangled stack trace
580580
void* array[1024];
581-
582581
int size = backtrace(array, 1024);
583582

584583
{
585-
char const* msg = "*** Program crashed (Segmentation fault, FPE, BUS, ABRT, KILL, Unhandled Exception, ...)\nBacktrace by DPL:\n";
586-
auto retVal = write(STDERR_FILENO, msg, strlen(msg));
587-
msg = "UNKNOWN SIGNAL\n";
588-
if (sig == SIGSEGV) {
589-
msg = "SEGMENTATION FAULT\n";
590-
} else if (sig == SIGABRT) {
591-
msg = "ABRT\n";
592-
} else if (sig == SIGBUS) {
593-
msg = "BUS ERROR\n";
594-
} else if (sig == SIGILL) {
595-
msg = "ILLEGAL INSTRUCTION\n";
596-
} else if (sig == SIGFPE) {
584+
char buffer[1024];
585+
char const* msg = "*** Program crashed (%s)\nBacktrace by DPL:\n";
586+
snprintf(buffer, 1024, msg, strsignal(sig));
587+
if (sig == SIGFPE) {
597588
if (std::fetestexcept(FE_DIVBYZERO)) {
598-
msg = "FLOATING POINT EXCEPTION (DIVISION BY ZERO)\n";
589+
snprintf(buffer, 1024, msg, "FLOATING POINT EXCEPTION - DIVISION BY ZERO");
599590
} else if (std::fetestexcept(FE_INVALID)) {
600-
msg = "FLOATING POINT EXCEPTION (INVALID RESULT)\n";
591+
snprintf(buffer, 1024, msg, "FLOATING POINT EXCEPTION - INVALID RESULT");
601592
} else {
602-
msg = "FLOATING POINT EXCEPTION (UNKNOWN REASON)\n";
593+
snprintf(buffer, 1024, msg, "FLOATING POINT EXCEPTION - UNKNOWN REASON");
603594
}
604595
}
605-
retVal = write(STDERR_FILENO, msg, strlen(msg));
596+
auto retVal = write(STDERR_FILENO, buffer, strlen(buffer));
606597
(void)retVal;
607598
}
608599
demangled_backtrace_symbols(array, size, STDERR_FILENO);

0 commit comments

Comments
 (0)