1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-15 08:30:44 +08:00
CMake/Source/cmDebuggerThread.h
Jonathan Phippen 41621c3afb Debugger: Add Value Formatting support for StackTrace request
Add support for the "format" property of the Debug Adapter Protocol
StackTrace request to fulfill the host's request to format the resulting
StackFrame name differently.
2024-10-29 13:29:00 -07:00

66 lines
2.0 KiB
C++

/* 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 <cstdint>
#include <memory>
#include <mutex>
#include <string>
#include <unordered_map>
#include <vector>
#include <cm3p/cppdap/protocol.h>
class cmListFileFunction;
class cmMakefile;
namespace cmDebugger {
class cmDebuggerStackFrame;
class cmDebuggerVariables;
class cmDebuggerVariablesManager;
}
namespace dap {
template <typename T>
class optional;
}
namespace cmDebugger {
class cmDebuggerThread
{
int64_t Id;
std::string Name;
std::vector<std::shared_ptr<cmDebuggerStackFrame>> Frames;
std::unordered_map<int64_t, std::shared_ptr<cmDebuggerStackFrame>> FrameMap;
std::mutex Mutex;
std::unordered_map<int64_t, std::vector<dap::Scope>> FrameScopes;
std::unordered_map<int64_t,
std::vector<std::shared_ptr<cmDebuggerVariables>>>
FrameVariables;
std::shared_ptr<cmDebuggerVariablesManager> VariablesManager;
public:
cmDebuggerThread(int64_t id, std::string name);
int64_t GetId() const { return this->Id; }
const std::string& GetName() const { return this->Name; }
void PushStackFrame(cmMakefile* mf, std::string const& sourcePath,
cmListFileFunction const& lff);
void PopStackFrame();
std::shared_ptr<cmDebuggerStackFrame> GetTopStackFrame();
std::shared_ptr<cmDebuggerStackFrame> GetStackFrame(int64_t frameId);
size_t GetStackFrameSize() const { return this->Frames.size(); }
dap::ScopesResponse GetScopesResponse(int64_t frameId,
bool supportsVariableType);
dap::VariablesResponse GetVariablesResponse(
dap::VariablesRequest const& request);
friend dap::StackTraceResponse GetStackTraceResponse(
std::shared_ptr<cmDebuggerThread> const& thread,
dap::optional<dap::StackFrameFormat> format);
};
} // namespace cmDebugger