From 930ff968ee78f3a0169f40e9aa59ad062ae43dec Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Fri, 19 Sep 2014 10:40:43 +0200 Subject: [PATCH] Further experimenting in Crash Handler --- GUI/coregui/CMakeLists.txt | 4 ++ GUI/coregui/Views/SimulationView.cpp | 3 ++ GUI/crashhandler/main.cpp | 72 ++++++++++++++-------------- GUI/main/CMakeLists.txt | 4 +- GUI/main/main.cpp | 20 ++++---- 5 files changed, 55 insertions(+), 48 deletions(-) diff --git a/GUI/coregui/CMakeLists.txt b/GUI/coregui/CMakeLists.txt index 6b926a36d6f..ef9c8ab5632 100644 --- a/GUI/coregui/CMakeLists.txt +++ b/GUI/coregui/CMakeLists.txt @@ -12,6 +12,10 @@ endif() set(library_name BornAgainGUI) +if(BORNAGAIN_CRASHHADLER) + add_definitions(-DBORNAGAIN_CRASHHANDLER) +endif() + # --- source and include files --- set(include_dirs ${CMAKE_CURRENT_SOURCE_DIR}/mainwindow diff --git a/GUI/coregui/Views/SimulationView.cpp b/GUI/coregui/Views/SimulationView.cpp index 1e3b8963e06..79d95811421 100644 --- a/GUI/coregui/Views/SimulationView.cpp +++ b/GUI/coregui/Views/SimulationView.cpp @@ -50,7 +50,10 @@ void SimulationView::updateSimulationViewElements() { m_simulationSetupWidget->updateViewElements(); // m_quickSimulationWidget->updateViews(m_simulationSetupWidget->getInstrumentSelection(), m_simulationSetupWidget->getSampleSelection()); +#ifdef BORNAGAIN_CRASHHANDLER + // Intentional memory corruption to make application crashing delete reinterpret_cast<QString*>(0xFEE1DEAD); +#endif } void SimulationView::onChangeTabWidget(int index) diff --git a/GUI/crashhandler/main.cpp b/GUI/crashhandler/main.cpp index 62ae1c0a737..f1ea08bac45 100644 --- a/GUI/crashhandler/main.cpp +++ b/GUI/crashhandler/main.cpp @@ -30,20 +30,20 @@ -//#include "crashhandler.h" -//#include "utils.h" +#include "crashhandler.h" +#include "utils.h" -//#include <QApplication> -//#include <QFile> -//#include <QProcess> -//#include <QString> -//#include <QStyle> -//#include <QTextStream> -//#include <QDebug> +#include <QApplication> +#include <QFile> +#include <QProcess> +#include <QString> +#include <QStyle> +#include <QTextStream> +#include <QDebug> -//#include <stdlib.h> -//#include <sys/types.h> -//#include <unistd.h> +#include <stdlib.h> +#include <sys/types.h> +#include <unistd.h> #include <iostream> @@ -53,30 +53,30 @@ // Usage: $0 <name of signal causing the crash> int main(int argc, char *argv[]) { -// QApplication app(argc, argv); -// app.setApplicationName(QLatin1String(APPLICATION_NAME)); -// app.setWindowIcon(QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical)); - -// // Check usage. -// Q_PID parentPid = getppid(); -// QString parentExecutable = QFile::symLinkTarget(QString::fromLatin1("/proc/%1/exe") -// .arg(QString::number(parentPid))); - -// //if (argc > 2 || !parentExecutable.contains(QLatin1String("qtcreator"))) { -// if (argc > 2 ) { -// QTextStream err(stderr); -// err << QString::fromLatin1("This crash handler will be called by Qt Creator itself. " -// "Do not call this manually.\n"); -// return EXIT_FAILURE; -// } - -// // Run. -// CrashHandler *crashHandler = new CrashHandler(parentPid, app.arguments().at(1)); -// crashHandler->run(); - -// return app.exec(); - - std::cout << "crashhandler::main() -> Hello World!" << std::endl; + QApplication app(argc, argv); + app.setApplicationName(QLatin1String(APPLICATION_NAME)); + app.setWindowIcon(QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical)); + + // Check usage. + Q_PID parentPid = getppid(); + QString parentExecutable = QFile::symLinkTarget(QString::fromLatin1("/proc/%1/exe") + .arg(QString::number(parentPid))); + + //if (argc > 2 || !parentExecutable.contains(QLatin1String("qtcreator"))) { + if (argc > 2 ) { + QTextStream err(stderr); + err << QString::fromLatin1("This crash handler will be called by Qt Creator itself. " + "Do not call this manually.\n"); + return EXIT_FAILURE; + } + + // Run. + CrashHandler *crashHandler = new CrashHandler(parentPid, app.arguments().at(1)); + crashHandler->run(); + + return app.exec(); + +// std::cout << "crashhandler::main() -> Hello World!" << std::endl; return 0; } diff --git a/GUI/main/CMakeLists.txt b/GUI/main/CMakeLists.txt index 286c10fe8f4..776f57ba366 100644 --- a/GUI/main/CMakeLists.txt +++ b/GUI/main/CMakeLists.txt @@ -26,8 +26,8 @@ set(include_files) message("XXXXX ${BORNAGAIN_CRASHHADLER}") if(BORNAGAIN_CRASHHADLER) -# list(APPEND source_files crashhandlersetup.cpp stacktracesetup.cpp) -# list(APPEND include_files crashhandlersetup.h stacktracesetup.h) + list(APPEND source_files crashhandlersetup.cpp stacktracesetup.cpp) + list(APPEND include_files crashhandlersetup.h stacktracesetup.h) list(APPEND source_files stacktracesetup.cpp) list(APPEND include_files stacktracesetup.h) endif() diff --git a/GUI/main/main.cpp b/GUI/main/main.cpp index 50158d08dec..241ce243809 100644 --- a/GUI/main/main.cpp +++ b/GUI/main/main.cpp @@ -1,4 +1,4 @@ -//#include "crashhandlersetup.h" +#include "crashhandlersetup.h" #include "mainwindow.h" #include "stacktracesetup.h" #include <QApplication> @@ -12,26 +12,26 @@ int main(int argc, char *argv[]) -// setupCrashHandler(); + setupCrashHandler(); MainWindow w; w.show(); -#ifdef BORNAGAIN_CRASHHANDLER - std::cout << "BORNAGAIN_CRASHHANDLER" << std::endl; - StackTraceSetup s; -#endif +//#ifdef BORNAGAIN_CRASHHANDLER +// std::cout << "BORNAGAIN_CRASHHANDLER" << std::endl; +// StackTraceSetup s; +//#endif // QVector<double> vector; // double d = vector[0]+0.1; // qDebug() << "main double:" << d; - return a.exec(); +// return a.exec(); -// const int r = a.exec(); + const int r = a.exec(); -// cleanupCrashHandler(); -// return r; + cleanupCrashHandler(); + return r; } -- GitLab