summaryrefslogtreecommitdiffstats
path: root/Source/cmDebuggerBreakpointManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmDebuggerBreakpointManager.h')
-rw-r--r--Source/cmDebuggerBreakpointManager.h61
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