diff options
Diffstat (limited to 'src/plugins/debugger/dap/dapengine.h')
-rw-r--r-- | src/plugins/debugger/dap/dapengine.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/plugins/debugger/dap/dapengine.h b/src/plugins/debugger/dap/dapengine.h new file mode 100644 index 00000000000..2fa3019cad9 --- /dev/null +++ b/src/plugins/debugger/dap/dapengine.h @@ -0,0 +1,98 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#pragma once + +#include <debugger/debuggerengine.h> +#include <utils/process.h> + +#include <QVariant> + +namespace Debugger::Internal { + +class DebuggerCommand; +class GdbMi; + +/* + * A debugger engine for the debugger adapter protocol. + */ + +class DapEngine : public DebuggerEngine +{ +public: + DapEngine(); + +private: + void executeStepIn(bool) override; + void executeStepOut() override; + void executeStepOver(bool) override; + + void setupEngine() override; + void shutdownInferior() override; + void shutdownEngine() override; + + bool canHandleToolTip(const DebuggerToolTipContext &) const override; + + void continueInferior() override; + void interruptInferior() override; + + void executeRunToLine(const ContextData &data) override; + void executeRunToFunction(const QString &functionName) override; + void executeJumpToLine(const ContextData &data) override; + + void activateFrame(int index) override; + void selectThread(const Thread &thread) override; + + bool acceptsBreakpoint(const BreakpointParameters &bp) const override; + void insertBreakpoint(const Breakpoint &bp) override; + void updateBreakpoint(const Breakpoint &bp) override; + void removeBreakpoint(const Breakpoint &bp) override; + + void assignValueInDebugger(WatchItem *item, + const QString &expr, const QVariant &value) override; + void executeDebuggerCommand(const QString &command) override; + + void loadSymbols(const Utils::FilePath &moduleName) override; + void loadAllSymbols() override; + void requestModuleSymbols(const Utils::FilePath &moduleName) override; + void reloadModules() override; + void reloadRegisters() override {} + void reloadSourceFiles() override {} + void reloadFullStack() override {} + + bool supportsThreads() const { return true; } + void updateItem(const QString &iname) override; + + void runCommand(const DebuggerCommand &cmd) override; + void postDirectCommand(const QJsonObject &ob); + + void refreshLocation(const GdbMi &reportedLocation); + void refreshStack(const GdbMi &stack); + void refreshLocals(const GdbMi &vars); + void refreshModules(const GdbMi &modules); + void refreshState(const GdbMi &reportedState); + void refreshSymbols(const GdbMi &symbols); + + QString errorMessage(QProcess::ProcessError error) const; + bool hasCapability(unsigned cap) const override; + + void claimInitialBreakpoints(); + + void handleDabStarted(); + void handleDabLaunch(); + void handleDabConfigurationDone(); + + void handleDapDone(); + void readDapStandardOutput(); + void readDapStandardError(); + void handleOutput(const QJsonDocument &data); + void handleResponse(const QString &ba); + void updateAll() override; + void updateLocals() override; + + QByteArray m_inbuffer; + Utils::Process m_proc; + int m_nextBreakpointId = 1; +}; + +} // Debugger::Internal |