| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file LICENSE.rst or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <cstddef> | |
| #include <functional> | |
| #include <mutex> | |
| #include <string> | |
| #include <unordered_map> | |
| #include <cm/optional> | |
| #include <cm3p/cppdap/protocol.h> | |
| #include "cmMessageType.h" // IWYU pragma: keep | |
| namespace dap { | |
| class Session; | |
| struct CMakeInitializeResponse; | |
| } | |
| namespace cmDebugger { | |
| struct cmDebuggerException | |
| { | |
| std::string Id; | |
| std::string Description; | |
| }; | |
| struct cmDebuggerExceptionFilter | |
| { | |
| std::string Filter; | |
| std::string Label; | |
| }; | |
| /** The exception manager. */ | |
| class cmDebuggerExceptionManager | |
| { | |
| // Some older C++ standard libraries cannot hash an enum class by default. | |
| struct MessageTypeHash | |
| { | |
| std::size_t operator()(MessageType t) const | |
| { | |
| return std::hash<int>{}(static_cast<int>(t)); | |
| } | |
| }; | |
| dap::Session* DapSession; | |
| std::mutex Mutex; | |
| std::unordered_map<std::string, bool> RaiseExceptions; | |
| std::unordered_map<MessageType, cmDebuggerExceptionFilter, MessageTypeHash> | |
| ExceptionMap; | |
| cm::optional<cmDebuggerException> TheException; | |
| dap::SetExceptionBreakpointsResponse HandleSetExceptionBreakpointsRequest( | |
| dap::SetExceptionBreakpointsRequest const& request); | |
| dap::ExceptionInfoResponse HandleExceptionInfoRequest(); | |
| public: | |
| cmDebuggerExceptionManager(dap::Session* dapSession); | |
| void HandleInitializeRequest(dap::CMakeInitializeResponse& response); | |
| cm::optional<dap::StoppedEvent> RaiseExceptionIfAny(MessageType t, | |
| std::string const& text); | |
| void ClearAll(); | |
| }; | |
| } // namespace cmDebugger |