summaryrefslogtreecommitdiffstats
path: root/Source/cmDebuggerThreadManager.cxx
diff options
context:
space:
mode:
authorGlen Chung <kuchung@microsoft.com>2023-03-16 00:50:08 (GMT)
committerBrad King <brad.king@kitware.com>2023-05-30 13:46:12 (GMT)
commita9a592f96e6498da302f8e968be1db0ad3c32123 (patch)
tree0d75f16ee2eae99b1a3f063e575b3f5f8f2ee931 /Source/cmDebuggerThreadManager.cxx
parentb0d1ddb7234950374977b83f8dbded806c15b356 (diff)
downloadCMake-a9a592f96e6498da302f8e968be1db0ad3c32123.zip
CMake-a9a592f96e6498da302f8e968be1db0ad3c32123.tar.gz
CMake-a9a592f96e6498da302f8e968be1db0ad3c32123.tar.bz2
cmake: Add debugger
- Depends on cppdap and jsoncpp. - Add --debugger argument to enable the Debugger. - Add --debugger-pipe argument for DAP traffics over named pipes. - Support breakpoints by filenames and line numbers. - Support exception breakpoints. - Call stack shows filenames and line numbers. - Show Cache Variables. - Show the state of currently defined targets, tests and directories with their properties. - Add cmakeVersion to DAP initialize response. - Include unit tests. Co-authored-by: Ben McMorran <bemcmorr@microsoft.com>
Diffstat (limited to 'Source/cmDebuggerThreadManager.cxx')
-rw-r--r--Source/cmDebuggerThreadManager.cxx47
1 files changed, 47 insertions, 0 deletions
diff --git a/Source/cmDebuggerThreadManager.cxx b/Source/cmDebuggerThreadManager.cxx
new file mode 100644
index 0000000..0eb443b
--- /dev/null
+++ b/Source/cmDebuggerThreadManager.cxx
@@ -0,0 +1,47 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+
+#include "cmDebuggerThreadManager.h"
+
+#include <algorithm>
+
+#include <cm3p/cppdap/protocol.h>
+
+#include "cmDebuggerThread.h"
+
+namespace cmDebugger {
+
+std::atomic<int64_t> cmDebuggerThreadManager::NextThreadId(1);
+
+std::shared_ptr<cmDebuggerThread> cmDebuggerThreadManager::StartThread(
+ std::string const& name)
+{
+ std::shared_ptr<cmDebuggerThread> thread =
+ std::make_shared<cmDebuggerThread>(
+ cmDebuggerThreadManager::NextThreadId.fetch_add(1), name);
+ Threads.emplace_back(thread);
+ return thread;
+}
+
+void cmDebuggerThreadManager::EndThread(
+ std::shared_ptr<cmDebuggerThread> const& thread)
+{
+ Threads.remove(thread);
+}
+
+cm::optional<dap::StackTraceResponse>
+cmDebuggerThreadManager::GetThreadStackTraceResponse(int64_t id)
+{
+ auto it = find_if(Threads.begin(), Threads.end(),
+ [&](const std::shared_ptr<cmDebuggerThread>& t) {
+ return t->GetId() == id;
+ });
+
+ if (it == Threads.end()) {
+ return {};
+ }
+
+ return GetStackTraceResponse(*it);
+}
+
+} // namespace cmDebugger