| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <atomic> | |
| #include <cstdint> | |
| #include <memory> | |
| #include <mutex> | |
| #include <string> | |
| #include <thread> | |
| #include <vector> | |
| #include <cm/optional> | |
| #include <cm3p/cppdap/io.h> // IWYU pragma: keep | |
| #include "cmMessageType.h" // IWYU pragma: keep | |
| class cmListFileFunction; | |
| class cmMakefile; | |
| namespace cmDebugger { | |
| class Semaphore; | |
| class SyncEvent; | |
| class cmDebuggerBreakpointManager; | |
| class cmDebuggerExceptionManager; | |
| class cmDebuggerThread; | |
| class cmDebuggerThreadManager; | |
| } | |
| namespace dap { | |
| class Session; | |
| } | |
| namespace cmDebugger { | |
| class cmDebuggerConnection | |
| { | |
| public: | |
| virtual ~cmDebuggerConnection() = default; | |
| virtual bool StartListening(std::string& errorMessage) = 0; | |
| virtual void WaitForConnection() = 0; | |
| virtual std::shared_ptr<dap::Reader> GetReader() = 0; | |
| virtual std::shared_ptr<dap::Writer> GetWriter() = 0; | |
| }; | |
| class cmDebuggerAdapter | |
| { | |
| public: | |
| cmDebuggerAdapter(std::shared_ptr<cmDebuggerConnection> connection, | |
| std::string const& dapLogPath); | |
| cmDebuggerAdapter(std::shared_ptr<cmDebuggerConnection> connection, | |
| cm::optional<std::shared_ptr<dap::Writer>> logger); | |
| ~cmDebuggerAdapter(); | |
| void ReportExitCode(int exitCode); | |
| void OnFileParsedSuccessfully( | |
| std::string const& sourcePath, | |
| std::vector<cmListFileFunction> const& functions); | |
| void OnBeginFunctionCall(cmMakefile* mf, std::string const& sourcePath, | |
| cmListFileFunction const& lff); | |
| void OnEndFunctionCall(); | |
| void OnBeginFileParse(cmMakefile* mf, std::string const& sourcePath); | |
| void OnEndFileParse(); | |
| void OnMessageOutput(MessageType t, std::string const& text); | |
| private: | |
| void ClearStepRequests(); | |
| std::shared_ptr<cmDebuggerConnection> Connection; | |
| std::unique_ptr<dap::Session> Session; | |
| std::shared_ptr<dap::Writer> SessionLog; | |
| std::thread SessionThread; | |
| std::atomic<bool> SessionActive; | |
| std::mutex Mutex; | |
| std::unique_ptr<SyncEvent> DisconnectEvent; | |
| std::unique_ptr<SyncEvent> ConfigurationDoneEvent; | |
| std::unique_ptr<Semaphore> ContinueSem; | |
| std::atomic<int64_t> NextStepFrom; | |
| std::atomic<bool> StepInRequest; | |
| std::atomic<int64_t> StepOutDepth; | |
| std::atomic<bool> PauseRequest; | |
| std::unique_ptr<cmDebuggerThreadManager> ThreadManager; | |
| std::shared_ptr<cmDebuggerThread> DefaultThread; | |
| std::unique_ptr<cmDebuggerBreakpointManager> BreakpointManager; | |
| std::unique_ptr<cmDebuggerExceptionManager> ExceptionManager; | |
| bool SupportsVariableType; | |
| }; | |
| } // namespace cmDebugger |