cmDebuggerAdapter.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #pragma once
  4. #include "cmConfigure.h" // IWYU pragma: keep
  5. #include <atomic>
  6. #include <cstdint>
  7. #include <memory>
  8. #include <mutex>
  9. #include <string>
  10. #include <thread>
  11. #include <vector>
  12. #include <cm/optional>
  13. #include <cm3p/cppdap/io.h> // IWYU pragma: keep
  14. #include "cmMessageType.h" // IWYU pragma: keep
  15. class cmListFileFunction;
  16. class cmMakefile;
  17. namespace cmDebugger {
  18. class Semaphore;
  19. class SyncEvent;
  20. class cmDebuggerBreakpointManager;
  21. class cmDebuggerExceptionManager;
  22. class cmDebuggerThread;
  23. class cmDebuggerThreadManager;
  24. }
  25. namespace dap {
  26. class Session;
  27. }
  28. namespace cmDebugger {
  29. class cmDebuggerConnection
  30. {
  31. public:
  32. virtual ~cmDebuggerConnection() = default;
  33. virtual bool StartListening(std::string& errorMessage) = 0;
  34. virtual void WaitForConnection() = 0;
  35. virtual std::shared_ptr<dap::Reader> GetReader() = 0;
  36. virtual std::shared_ptr<dap::Writer> GetWriter() = 0;
  37. };
  38. class cmDebuggerAdapter
  39. {
  40. public:
  41. cmDebuggerAdapter(std::shared_ptr<cmDebuggerConnection> connection,
  42. std::string const& dapLogPath);
  43. cmDebuggerAdapter(std::shared_ptr<cmDebuggerConnection> connection,
  44. cm::optional<std::shared_ptr<dap::Writer>> logger);
  45. ~cmDebuggerAdapter();
  46. void ReportExitCode(int exitCode);
  47. void OnFileParsedSuccessfully(
  48. std::string const& sourcePath,
  49. std::vector<cmListFileFunction> const& functions);
  50. void OnBeginFunctionCall(cmMakefile* mf, std::string const& sourcePath,
  51. cmListFileFunction const& lff);
  52. void OnEndFunctionCall();
  53. void OnBeginFileParse(cmMakefile* mf, std::string const& sourcePath);
  54. void OnEndFileParse();
  55. void OnMessageOutput(MessageType t, std::string const& text);
  56. private:
  57. void ClearStepRequests();
  58. std::shared_ptr<cmDebuggerConnection> Connection;
  59. std::unique_ptr<dap::Session> Session;
  60. std::shared_ptr<dap::Writer> SessionLog;
  61. std::thread SessionThread;
  62. std::atomic<bool> SessionActive;
  63. std::mutex Mutex;
  64. std::unique_ptr<SyncEvent> DisconnectEvent;
  65. std::unique_ptr<SyncEvent> ConfigurationDoneEvent;
  66. std::unique_ptr<Semaphore> ContinueSem;
  67. std::atomic<int64_t> NextStepFrom;
  68. std::atomic<bool> StepInRequest;
  69. std::atomic<int64_t> StepOutDepth;
  70. std::atomic<bool> PauseRequest;
  71. std::unique_ptr<cmDebuggerThreadManager> ThreadManager;
  72. std::shared_ptr<cmDebuggerThread> DefaultThread;
  73. std::unique_ptr<cmDebuggerBreakpointManager> BreakpointManager;
  74. std::unique_ptr<cmDebuggerExceptionManager> ExceptionManager;
  75. bool SupportsVariableType;
  76. };
  77. } // namespace cmDebugger