diff options
Diffstat (limited to 'Source/cmDebuggerBreakpointManager.h')
-rw-r--r-- | Source/cmDebuggerBreakpointManager.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/Source/cmDebuggerBreakpointManager.h b/Source/cmDebuggerBreakpointManager.h new file mode 100644 index 0000000..a4e5df5 --- /dev/null +++ b/Source/cmDebuggerBreakpointManager.h @@ -0,0 +1,61 @@ +/* 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 <cstdint> +#include <mutex> +#include <string> +#include <unordered_map> +#include <unordered_set> +#include <vector> + +#include <cm3p/cppdap/protocol.h> + +class cmListFileFunction; + +namespace cmDebugger { +class cmDebuggerSourceBreakpoint; +} + +namespace dap { +class Session; +} + +namespace cmDebugger { + +struct cmDebuggerFunctionLocation +{ + int64_t StartLine; + int64_t EndLine; +}; + +/** The breakpoint manager. */ +class cmDebuggerBreakpointManager +{ + dap::Session* DapSession; + std::mutex Mutex; + std::unordered_map<std::string, std::vector<cmDebuggerSourceBreakpoint>> + Breakpoints; + std::unordered_map<std::string, + std::vector<struct cmDebuggerFunctionLocation>> + ListFileFunctionLines; + std::unordered_set<std::string> ListFilePendingValidations; + int64_t NextBreakpointId = 0; + + dap::SetBreakpointsResponse HandleSetBreakpointsRequest( + dap::SetBreakpointsRequest const& request); + int64_t FindFunctionStartLine(std::string const& sourcePath, int64_t line); + int64_t CalibrateBreakpointLine(std::string const& sourcePath, int64_t line); + +public: + cmDebuggerBreakpointManager(dap::Session* dapSession); + void SourceFileLoaded(std::string const& sourcePath, + std::vector<cmListFileFunction> const& functions); + std::vector<int64_t> GetBreakpoints(std::string const& sourcePath, + int64_t line); + void ClearAll(); +}; + +} // namespace cmDebugger |