123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /* 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 <cstddef>
- #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
|