| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file LICENSE.rst or https://cmake.org/licensing for details. */
- #include "cmDebuggerThreadManager.h"
- #include <algorithm>
- #include <cm/optional>
- #include <cm3p/cppdap/optional.h>
- #include <cm3p/cppdap/protocol.h>
- #include <cm3p/cppdap/types.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(
- dap::StackTraceRequest const& request)
- {
- auto it = find_if(Threads.begin(), Threads.end(),
- [&](std::shared_ptr<cmDebuggerThread> const& t) {
- return t->GetId() == request.threadId;
- });
- if (it == Threads.end()) {
- return {};
- }
- return GetStackTraceResponse(*it, request.format);
- }
- } // namespace cmDebugger
|