1 /* 2 SPDX-FileCopyrightText: 2009 George Kiagiadakis <gkiagia@users.sourceforge.net> 3 SPDX-FileCopyrightText: 2021 Harald Sitter <sitter@kde.org> 4 5 SPDX-License-Identifier: GPL-2.0-or-later 6 */ 7 #ifndef DRKONQIBACKENDS_H 8 #define DRKONQIBACKENDS_H 9 10 #include <QObject> 11 12 class CrashedApplication; 13 class DebuggerManager; 14 15 class AbstractDrKonqiBackend : public QObject 16 { 17 Q_OBJECT 18 public: 19 using QObject::QObject; 20 virtual ~AbstractDrKonqiBackend(); 21 virtual bool init(); 22 virtual void prepareForDebugger(); 23 void cleanup(); // cleanup on-disk caches 24 crashedApplication()25 inline CrashedApplication *crashedApplication() const 26 { 27 return m_crashedApplication; 28 } 29 debuggerManager()30 inline DebuggerManager *debuggerManager() const 31 { 32 return m_debuggerManager; 33 } 34 35 static QString metadataPath(); 36 37 Q_SIGNALS: 38 void preparedForDebugger(); 39 40 protected: 41 virtual CrashedApplication *constructCrashedApplication() = 0; 42 virtual DebuggerManager *constructDebuggerManager() = 0; 43 44 private: 45 CrashedApplication *m_crashedApplication = nullptr; 46 DebuggerManager *m_debuggerManager = nullptr; 47 }; 48 49 class KCrashBackend : public AbstractDrKonqiBackend 50 { 51 Q_OBJECT 52 public: 53 using AbstractDrKonqiBackend::AbstractDrKonqiBackend; 54 ~KCrashBackend() override; 55 56 bool init() override; 57 58 protected: 59 CrashedApplication *constructCrashedApplication() override; 60 DebuggerManager *constructDebuggerManager() override; 61 62 private Q_SLOTS: 63 void stopAttachedProcess(); 64 void continueAttachedProcess(); 65 void onDebuggerStarting(); 66 void onDebuggerFinished(); 67 68 private: 69 static void emergencySaveFunction(int signal); 70 static qint64 s_pid; // for use by the emergencySaveFunction 71 72 enum State { ProcessRunning, ProcessStopped, DebuggerRunning }; 73 State m_state = ProcessRunning; 74 }; 75 76 #endif // DRKONQIBACKENDS_H 77