From 5fbbccd9e2da3f5212e9ed904a0a133922942fda Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 20 Apr 2018 00:18:42 +0200 Subject: [PATCH] ut_runner does not display dialog on crash but dumps the stack trace to stdout. --- src/klayout_main/klayout_main/klayout.cc | 2 ++ src/lay/lay/laySignalHandler.cc | 9 ++++++++- src/lay/lay/laySignalHandler.h | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/klayout_main/klayout_main/klayout.cc b/src/klayout_main/klayout_main/klayout.cc index d1f3b8589..ddeac70cb 100644 --- a/src/klayout_main/klayout_main/klayout.cc +++ b/src/klayout_main/klayout_main/klayout.cc @@ -24,6 +24,7 @@ #include "layApplication.h" #include "layFileDialog.h" #include "layVersion.h" +#include "laySignalHandler.h" #include "tlExceptions.h" #include "tlInternational.h" #include "tlException.h" @@ -232,6 +233,7 @@ klayout_main_cont (int &argc, char **argv) app.reset (new lay::NonGuiApplication (argc, argv)); } else { app.reset (new lay::GuiApplication (argc, argv)); + lay::enable_signal_handler_gui (true); } app->parse_cmd (argc, argv); diff --git a/src/lay/lay/laySignalHandler.cc b/src/lay/lay/laySignalHandler.cc index ce508ab34..b64292bd5 100644 --- a/src/lay/lay/laySignalHandler.cc +++ b/src/lay/lay/laySignalHandler.cc @@ -275,6 +275,13 @@ QString get_symbol_name_from_address (const QString &, size_t) return QString::fromUtf8 ("n/a"); } +static bool s_sh_has_gui = false; + +void enable_signal_handler_gui (bool en) +{ + s_sh_has_gui = en; +} + void signal_handler (int signo, siginfo_t *si, void *) { void *array [100]; @@ -292,7 +299,7 @@ void signal_handler (int signo, siginfo_t *si, void *) std::auto_ptr msg; - bool has_gui = lay::ApplicationBase::instance () && lay::ApplicationBase::instance ()->has_gui (); + bool has_gui = s_sh_has_gui && lay::ApplicationBase::instance () && lay::ApplicationBase::instance ()->has_gui (); if (has_gui) { msg.reset (new CrashMessage (0, false, tl::to_qstring (text) + QObject::tr ("\nCollecting backtrace .."))); diff --git a/src/lay/lay/laySignalHandler.h b/src/lay/lay/laySignalHandler.h index d1629e006..351013442 100644 --- a/src/lay/lay/laySignalHandler.h +++ b/src/lay/lay/laySignalHandler.h @@ -24,6 +24,7 @@ #define HDR_laySignalHandler #include +#include "layCommon.h" namespace lay { @@ -38,6 +39,11 @@ void install_signal_handlers (); */ QString get_symbol_name_from_address (const QString &mod_name, size_t addr); +/** + * @brief Enables GUI support for signal handlers + */ +void LAY_PUBLIC enable_signal_handler_gui (bool en); + } #endif