File indexing completed on 2024-04-14 05:20:28
0001 /* 0002 SPDX-FileCopyrightText: 2009 George Kiagiadakis <gkiagia@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2021 Harald Sitter <sitter@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 #ifndef DRKONQIBACKENDS_H 0008 #define DRKONQIBACKENDS_H 0009 0010 #include <QObject> 0011 0012 class CrashedApplication; 0013 class DebuggerManager; 0014 0015 class AbstractDrKonqiBackend : public QObject 0016 { 0017 Q_OBJECT 0018 public: 0019 using QObject::QObject; 0020 virtual ~AbstractDrKonqiBackend(); 0021 virtual bool init(); 0022 virtual void prepareForDebugger(); 0023 0024 inline CrashedApplication *crashedApplication() const 0025 { 0026 return m_crashedApplication; 0027 } 0028 0029 inline DebuggerManager *debuggerManager() const 0030 { 0031 return m_debuggerManager; 0032 } 0033 0034 static QString metadataPath(); 0035 0036 Q_SIGNALS: 0037 void preparedForDebugger(); 0038 void failedToPrepare(); 0039 0040 protected: 0041 virtual CrashedApplication *constructCrashedApplication() = 0; 0042 virtual DebuggerManager *constructDebuggerManager() = 0; 0043 0044 private: 0045 CrashedApplication *m_crashedApplication = nullptr; 0046 DebuggerManager *m_debuggerManager = nullptr; 0047 }; 0048 0049 class KCrashBackend : public AbstractDrKonqiBackend 0050 { 0051 Q_OBJECT 0052 public: 0053 using AbstractDrKonqiBackend::AbstractDrKonqiBackend; 0054 ~KCrashBackend() override; 0055 0056 bool init() override; 0057 0058 protected: 0059 CrashedApplication *constructCrashedApplication() override; 0060 DebuggerManager *constructDebuggerManager() override; 0061 0062 private Q_SLOTS: 0063 void stopAttachedProcess(); 0064 void continueAttachedProcess(); 0065 void onDebuggerStarting(); 0066 void onDebuggerFinished(); 0067 0068 private: 0069 static void emergencySaveFunction(int signal); 0070 static qint64 s_pid; // for use by the emergencySaveFunction 0071 0072 enum State { ProcessRunning, ProcessStopped, DebuggerRunning }; 0073 State m_state = ProcessRunning; 0074 }; 0075 0076 #endif // DRKONQIBACKENDS_H