forked from qt-creator/qt-creator
Debugger: Add skeleton for a debugger adapter protocol using engine
- Support the launch of an application - Support continue/pause an application - Support add breakpoint only after an app is launched (I.e. preset breakpoints won't work) - Support stop the debug session - "Remove one break breakpoint" works but removes all breakpoints ToDo: - Polish the transition between stages - Fix breakpoints handling - Add support "Step in", "Step out" and "Step Over" Task-number: QTCREATORBUG-27279 Change-Id: I5c32ce713f5a0f19cc3b9d995cbbadd8adf6a413 Reviewed-by: Artem Sokolovskii <artem.sokolovskii@qt.io> Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
97
src/plugins/debugger/dap/dapengine.h
Normal file
97
src/plugins/debugger/dap/dapengine.h
Normal file
@@ -0,0 +1,97 @@
|
||||
// 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/qtcprocess.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::QtcProcess m_proc;
|
||||
};
|
||||
|
||||
} // Debugger::Internal
|
||||
Reference in New Issue
Block a user