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