/* ======================================== Copyright (C) 2025 Amlal El Mahrouss, Licensed under the Apache 2.0 license. ======================================== */ #pragma once #include #define DK_DEBUGGER_CONTRACT : public ::DebuggerKit::DebuggerContract namespace DebuggerKit { class DebuggerContract; /// =========================================================== /// /// \brief Process ID /// =========================================================== /// typedef uint64_t ProcessID; /// =========================================================== /// /// \brief Address type, a la BSD. /// =========================================================== /// typedef char* CAddress; /// =========================================================== /// /// \brief Debugger contract class in C++, as per the design states. /// \author Amlal El Mahrouss /// =========================================================== /// class DebuggerContract { public: explicit DebuggerContract() = default; virtual ~DebuggerContract() = default; public: DebuggerContract& operator=(const DebuggerContract&) = default; DebuggerContract(const DebuggerContract&) = default; public: virtual bool Attach(std::string path, std::string argv, ProcessID& pid) noexcept = 0; virtual bool BreakAt(std::string symbol) noexcept = 0; virtual bool Break() noexcept = 0; virtual bool Continue() noexcept = 0; virtual bool Detach() noexcept = 0; virtual std::unordered_map& Get() { return m_breakpoints; } protected: ProcessID m_pid{(ProcessID)~0}; std::unordered_map m_breakpoints; }; } // namespace DebuggerKit