From d2dabdf92cb623d837a8bf0965414c6adced7d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Sun, 15 Dec 2024 20:56:41 -0300 Subject: [PATCH] WIP --- src/tools/ecode/plugins/debugger/bus.hpp | 2 + .../ecode/plugins/debugger/busprocess.cpp | 13 ++-- .../ecode/plugins/debugger/busprocess.hpp | 7 ++- .../ecode/plugins/debugger/bussocket.cpp | 7 ++- .../ecode/plugins/debugger/bussocket.hpp | 7 ++- .../debugger/dap/debuggerclientdap.cpp | 63 +++++++++++++++++++ .../debugger/dap/debuggerclientdap.hpp | 44 +++++++++++++ 7 files changed, 132 insertions(+), 11 deletions(-) create mode 100644 src/tools/ecode/plugins/debugger/dap/debuggerclientdap.cpp create mode 100644 src/tools/ecode/plugins/debugger/dap/debuggerclientdap.hpp diff --git a/src/tools/ecode/plugins/debugger/bus.hpp b/src/tools/ecode/plugins/debugger/bus.hpp index ad2af5896..743a99cb3 100644 --- a/src/tools/ecode/plugins/debugger/bus.hpp +++ b/src/tools/ecode/plugins/debugger/bus.hpp @@ -8,6 +8,8 @@ class Bus { public: typedef std::function ReadFn; + virtual bool start() = 0; + virtual void startAsyncRead( ReadFn readFn ) = 0; virtual size_t write( const char* buffer, const size_t& size ) = 0; diff --git a/src/tools/ecode/plugins/debugger/busprocess.cpp b/src/tools/ecode/plugins/debugger/busprocess.cpp index 49812a583..ff4380de7 100644 --- a/src/tools/ecode/plugins/debugger/busprocess.cpp +++ b/src/tools/ecode/plugins/debugger/busprocess.cpp @@ -2,11 +2,14 @@ namespace ecode { -BusProcess::BusProcess( const Command& command ) : - mProcess( command.command, command.arguments, - Process::getDefaultOptions() | Process::Options::EnableAsync | - Process::Options::CombinedStdoutStderr, - command.environment ) {} +BusProcess::BusProcess( const Command& command ) : mCommand( command ), mProcess() {} + +bool BusProcess::start() { + return mProcess.create( mCommand.command, mCommand.arguments, + Process::getDefaultOptions() | Process::Options::EnableAsync | + Process::Options::CombinedStdoutStderr, + mCommand.environment ); +} void BusProcess::startAsyncRead( ReadFn readFn ) { mProcess.startAsyncRead( readFn, readFn ); diff --git a/src/tools/ecode/plugins/debugger/busprocess.hpp b/src/tools/ecode/plugins/debugger/busprocess.hpp index b0bd64824..c5bcea657 100644 --- a/src/tools/ecode/plugins/debugger/busprocess.hpp +++ b/src/tools/ecode/plugins/debugger/busprocess.hpp @@ -9,11 +9,14 @@ class BusProcess : public Bus { public: BusProcess( const Command& command ); - virtual void startAsyncRead( ReadFn readFn ); + bool start() override; - virtual size_t write( const char* buffer, const size_t& size ); + void startAsyncRead( ReadFn readFn ) override; + + size_t write( const char* buffer, const size_t& size ) override; protected: + Command mCommand; Process mProcess; }; diff --git a/src/tools/ecode/plugins/debugger/bussocket.cpp b/src/tools/ecode/plugins/debugger/bussocket.cpp index b9496f6bb..51c7ee124 100644 --- a/src/tools/ecode/plugins/debugger/bussocket.cpp +++ b/src/tools/ecode/plugins/debugger/bussocket.cpp @@ -3,8 +3,11 @@ namespace ecode { -BusSocket::BusSocket( const Connection& connection ) { - mSocket.connect( IpAddress( connection.host ), connection.port ); +BusSocket::BusSocket( const Connection& connection ) : mConnection( connection ) {} + +bool BusSocket::start() { + return mSocket.connect( IpAddress( mConnection.host ), mConnection.port ) == + Socket::Status::Done; } void BusSocket::startAsyncRead( ReadFn readFn ) { diff --git a/src/tools/ecode/plugins/debugger/bussocket.hpp b/src/tools/ecode/plugins/debugger/bussocket.hpp index 0c2139d08..cc66f9ff4 100644 --- a/src/tools/ecode/plugins/debugger/bussocket.hpp +++ b/src/tools/ecode/plugins/debugger/bussocket.hpp @@ -9,11 +9,14 @@ class BusSocket : public Bus { public: BusSocket( const Connection& connection ); - void startAsyncRead( ReadFn readFn ); + bool start() override; - size_t write( const char* buffer, const size_t& size ); + void startAsyncRead( ReadFn readFn ) override; + + size_t write( const char* buffer, const size_t& size ) override; protected: + Connection mConnection; TcpSocket mSocket; }; diff --git a/src/tools/ecode/plugins/debugger/dap/debuggerclientdap.cpp b/src/tools/ecode/plugins/debugger/dap/debuggerclientdap.cpp new file mode 100644 index 000000000..f2586904c --- /dev/null +++ b/src/tools/ecode/plugins/debugger/dap/debuggerclientdap.cpp @@ -0,0 +1,63 @@ +#include "debuggerclientdap.hpp" + +namespace ecode { + +DebuggerClientDap::DebuggerClientDap( std::unique_ptr&& bus ) : mBus( std::move( bus ) ) {} + +bool DebuggerClientDap::hasBreakpoint( const std::string& path, size_t line ) { + return false; +} + +bool DebuggerClientDap::addBreakpoint( const std::string& path, size_t line ) { + return false; +} + +bool DebuggerClientDap::removeBreakpoint( const std::string& path, size_t line ) { + return false; +} + +bool DebuggerClientDap::start() { + return mBus->start(); +} + +bool DebuggerClientDap::attach() { + return false; +} + +bool DebuggerClientDap::started() const { + return false; +} + +bool DebuggerClientDap::cont() { + return false; +} + +bool DebuggerClientDap::stepInto() { + return false; +} + +bool DebuggerClientDap::stepOver() { + return false; +} + +bool DebuggerClientDap::stepOut() { + return false; +} + +bool DebuggerClientDap::halt() { + return false; +} + +bool DebuggerClientDap::terminate() { + return false; +} + +bool DebuggerClientDap::stopped() { + return false; +} + +bool DebuggerClientDap::completed() { + return false; +} + +} // namespace ecode diff --git a/src/tools/ecode/plugins/debugger/dap/debuggerclientdap.hpp b/src/tools/ecode/plugins/debugger/dap/debuggerclientdap.hpp new file mode 100644 index 000000000..c2b1fe9a9 --- /dev/null +++ b/src/tools/ecode/plugins/debugger/dap/debuggerclientdap.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include "../bus.hpp" +#include "../debuggerclient.hpp" + +namespace ecode { + +class DebuggerClientDap : public DebuggerClient { + public: + DebuggerClientDap( std::unique_ptr&& bus ); + + bool hasBreakpoint( const std::string& path, size_t line ); + + bool addBreakpoint( const std::string& path, size_t line ); + + bool removeBreakpoint( const std::string& path, size_t line ); + + bool start(); + + bool attach(); + + bool started() const; + + bool cont(); + + bool stepInto(); + + bool stepOver(); + + bool stepOut(); + + bool halt(); + + bool terminate(); + + bool stopped(); + + bool completed(); + + protected: + std::unique_ptr mBus; +}; + +} // namespace ecode