diff --git a/src/utils/SignalManager.cpp b/src/utils/SignalManager.cpp index c2e518a47297bc1cb5eb25d23f38b6e7afebe5a6..319765461db6d8d6c356e21cd2942e8881976934 100644 --- a/src/utils/SignalManager.cpp +++ b/src/utils/SignalManager.cpp @@ -12,6 +12,8 @@ #include <pastis_config.hpp> #include <rang.hpp> +#include <Messenger.hpp> + std::string SignalManager::s_pause_on_error = "auto"; void SignalManager::setPauseForDebug(const std::string& pause_on_error) { @@ -34,24 +36,23 @@ std::string SignalManager::signalName(const int& signal) void SignalManager::pauseForDebug(const int& signal) { if (std::string(PASTIS_BUILD_TYPE) != "Release") { - if ((ConsoleManager::isTerminal(pout()) and - (s_pause_on_error == "auto")) or +#warning should try to detect if outputs to a terminal (buggy with mpi) + if (// (ConsoleManager::isTerminal(pout()) and (s_pause_on_error == "auto")) or (s_pause_on_error == "yes")) { - pout() << "\n======================================\n"; - pout() << rang::style::reset - << rang::fg::reset - << rang::style::bold; - pout() << "to attach gdb to this process run\n"; - pout() << "\tgdb -pid " - << rang::fg::red - << getpid() - << rang::fg::reset - << '\n'; - pout() << "else press Control-C to exit\n"; - pout() << rang::style::reset; - pout() << "======================================\n"; - pout() << std::flush; - + std::cerr << "\n======================================\n" + << rang::style::reset + << rang::fg::reset + << rang::style::bold + << "to attach gdb to this process run\n" + << "\tgdb -pid " + << rang::fg::red + << getpid() + << rang::fg::reset + << '\n' + << "else press Control-C to exit\n" + << rang::style::reset + << "======================================\n" + << std::flush; pause(); } } @@ -66,6 +67,9 @@ void SignalManager::handler(int signal) std::signal(SIGINT, SIG_DFL); std::signal(SIGABRT, SIG_DFL); + BacktraceManager bm; + std::cerr << bm << '\n'; + std::exception_ptr eptr = std::current_exception(); try { if (eptr) { @@ -73,17 +77,17 @@ void SignalManager::handler(int signal) } } catch(const AssertError& assert_error) { - perr() << assert_error << '\n'; + std::cerr << assert_error << '\n'; } catch(...) { - perr() << "Unknown exception!\n"; + std::cerr << "Unknown exception!\n"; } - perr() << "\n *** " + std::cerr << "\n *** " << rang::style::reset << rang::fg::reset - << rang::style::bold; - perr() << "Signal " + << rang::style::bold + << "Signal " << rang::fgB::red << signalName(signal) << rang::fg::reset @@ -91,9 +95,6 @@ void SignalManager::handler(int signal) << rang::style::reset << " ***\n"; - BacktraceManager bm; - perr() << bm << '\n'; - SignalManager::pauseForDebug(signal); }