[Lldb-commits] [lldb] [lldb-dap] Refactor lldb-dap/DAP.{h, cpp} to use its own instance instead of the global instance. (PR #115948)
John Harrison via lldb-commits
lldb-commits at lists.llvm.org
Tue Nov 12 14:18:27 PST 2024
https://github.com/ashgti created https://github.com/llvm/llvm-project/pull/115948
The refactor will unblock us for creating multiple DAP instances.
>From 83a1ad1cd80c71531db6d3014fa16a8fbc38eeeb Mon Sep 17 00:00:00 2001
From: John Harrison <harjohn at google.com>
Date: Tue, 12 Nov 2024 17:13:32 -0500
Subject: [PATCH] [lldb-dap] Refactor lldb-dap/DAP.{h,cpp} to not use its own
instance instead of the global instance.
The refactor will unblock us for creating multiple DAP instances.
---
lldb/tools/lldb-dap/DAP.cpp | 52 +++++++++++++++-----------------
lldb/tools/lldb-dap/DAP.h | 6 ++++
lldb/tools/lldb-dap/lldb-dap.cpp | 6 ++--
3 files changed, 34 insertions(+), 30 deletions(-)
diff --git a/lldb/tools/lldb-dap/DAP.cpp b/lldb/tools/lldb-dap/DAP.cpp
index 10d2d5d79a74bf..bdb24fc78cfb64 100644
--- a/lldb/tools/lldb-dap/DAP.cpp
+++ b/lldb/tools/lldb-dap/DAP.cpp
@@ -477,12 +477,12 @@ lldb::SBFrame DAP::GetLLDBFrame(const llvm::json::Object &arguments) {
llvm::json::Value DAP::CreateTopLevelScopes() {
llvm::json::Array scopes;
- scopes.emplace_back(CreateScope("Locals", VARREF_LOCALS,
- g_dap.variables.locals.GetSize(), false));
+ scopes.emplace_back(
+ CreateScope("Locals", VARREF_LOCALS, variables.locals.GetSize(), false));
scopes.emplace_back(CreateScope("Globals", VARREF_GLOBALS,
- g_dap.variables.globals.GetSize(), false));
+ variables.globals.GetSize(), false));
scopes.emplace_back(CreateScope("Registers", VARREF_REGS,
- g_dap.variables.registers.GetSize(), false));
+ variables.registers.GetSize(), false));
return llvm::json::Value(std::move(scopes));
}
@@ -490,8 +490,8 @@ ReplMode DAP::DetectReplMode(lldb::SBFrame frame, std::string &expression,
bool partial_expression) {
// Check for the escape hatch prefix.
if (!expression.empty() &&
- llvm::StringRef(expression).starts_with(g_dap.command_escape_prefix)) {
- expression = expression.substr(g_dap.command_escape_prefix.size());
+ llvm::StringRef(expression).starts_with(command_escape_prefix)) {
+ expression = expression.substr(command_escape_prefix.size());
return ReplMode::Command;
}
@@ -531,7 +531,7 @@ ReplMode DAP::DetectReplMode(lldb::SBFrame frame, std::string &expression,
<< "Warning: Expression '" << term
<< "' is both an LLDB command and variable. It will be evaluated as "
"a variable. To evaluate the expression as an LLDB command, use '"
- << g_dap.command_escape_prefix << "' as a prefix.\n";
+ << command_escape_prefix << "' as a prefix.\n";
}
// Variables take preference to commands in auto, since commands can always
@@ -901,7 +901,7 @@ bool StartDebuggingRequestHandler::DoExecute(
return false;
}
- g_dap.SendReverseRequest(
+ dap.SendReverseRequest(
"startDebugging",
llvm::json::Object{{"request", request},
{"configuration", std::move(*configuration)}},
@@ -925,7 +925,7 @@ bool ReplModeRequestHandler::DoExecute(lldb::SBDebugger debugger,
// If a new mode is not specified report the current mode.
if (!command || llvm::StringRef(command[0]).empty()) {
std::string mode;
- switch (g_dap.repl_mode) {
+ switch (dap.repl_mode) {
case ReplMode::Variable:
mode = "variable";
break;
@@ -946,11 +946,11 @@ bool ReplModeRequestHandler::DoExecute(lldb::SBDebugger debugger,
llvm::StringRef new_mode{command[0]};
if (new_mode == "variable") {
- g_dap.repl_mode = ReplMode::Variable;
+ dap.repl_mode = ReplMode::Variable;
} else if (new_mode == "command") {
- g_dap.repl_mode = ReplMode::Command;
+ dap.repl_mode = ReplMode::Command;
} else if (new_mode == "auto") {
- g_dap.repl_mode = ReplMode::Auto;
+ dap.repl_mode = ReplMode::Auto;
} else {
lldb::SBStream error_message;
error_message.Printf("Invalid repl-mode '%s'. Expected one of 'variable', "
@@ -1022,7 +1022,7 @@ bool SendEventRequestHandler::DoExecute(lldb::SBDebugger debugger,
event.try_emplace("body", std::move(*body));
}
- g_dap.SendJSON(llvm::json::Value(std::move(event)));
+ dap.SendJSON(llvm::json::Value(std::move(event)));
result.SetStatus(lldb::eReturnStatusSuccessFinishNoResult);
return true;
}
@@ -1031,14 +1031,13 @@ void DAP::SetFrameFormat(llvm::StringRef format) {
if (format.empty())
return;
lldb::SBError error;
- g_dap.frame_format = lldb::SBFormat(format.str().c_str(), error);
+ frame_format = lldb::SBFormat(format.str().c_str(), error);
if (error.Fail()) {
- g_dap.SendOutput(
- OutputType::Console,
- llvm::formatv(
- "The provided frame format '{0}' couldn't be parsed: {1}\n", format,
- error.GetCString())
- .str());
+ SendOutput(OutputType::Console,
+ llvm::formatv(
+ "The provided frame format '{0}' couldn't be parsed: {1}\n",
+ format, error.GetCString())
+ .str());
}
}
@@ -1046,14 +1045,13 @@ void DAP::SetThreadFormat(llvm::StringRef format) {
if (format.empty())
return;
lldb::SBError error;
- g_dap.thread_format = lldb::SBFormat(format.str().c_str(), error);
+ thread_format = lldb::SBFormat(format.str().c_str(), error);
if (error.Fail()) {
- g_dap.SendOutput(
- OutputType::Console,
- llvm::formatv(
- "The provided thread format '{0}' couldn't be parsed: {1}\n",
- format, error.GetCString())
- .str());
+ SendOutput(OutputType::Console,
+ llvm::formatv(
+ "The provided thread format '{0}' couldn't be parsed: {1}\n",
+ format, error.GetCString())
+ .str());
}
}
diff --git a/lldb/tools/lldb-dap/DAP.h b/lldb/tools/lldb-dap/DAP.h
index 1641a58c7dbd06..5381b3271ba96f 100644
--- a/lldb/tools/lldb-dap/DAP.h
+++ b/lldb/tools/lldb-dap/DAP.h
@@ -116,16 +116,22 @@ struct Variables {
};
struct StartDebuggingRequestHandler : public lldb::SBCommandPluginInterface {
+ DAP &dap;
+ explicit StartDebuggingRequestHandler(DAP &d) : dap(d) {};
bool DoExecute(lldb::SBDebugger debugger, char **command,
lldb::SBCommandReturnObject &result) override;
};
struct ReplModeRequestHandler : public lldb::SBCommandPluginInterface {
+ DAP &dap;
+ explicit ReplModeRequestHandler(DAP &d) : dap(d) {};
bool DoExecute(lldb::SBDebugger debugger, char **command,
lldb::SBCommandReturnObject &result) override;
};
struct SendEventRequestHandler : public lldb::SBCommandPluginInterface {
+ DAP &dap;
+ explicit SendEventRequestHandler(DAP &d) : dap(d) {};
bool DoExecute(lldb::SBDebugger debugger, char **command,
lldb::SBCommandReturnObject &result) override;
};
diff --git a/lldb/tools/lldb-dap/lldb-dap.cpp b/lldb/tools/lldb-dap/lldb-dap.cpp
index 180923f1f145a2..fc22ec03b672e6 100644
--- a/lldb/tools/lldb-dap/lldb-dap.cpp
+++ b/lldb/tools/lldb-dap/lldb-dap.cpp
@@ -1889,14 +1889,14 @@ void request_initialize(const llvm::json::Object &request) {
"lldb-dap", "Commands for managing lldb-dap.");
if (GetBoolean(arguments, "supportsStartDebuggingRequest", false)) {
cmd.AddCommand(
- "start-debugging", new StartDebuggingRequestHandler(),
+ "start-debugging", new StartDebuggingRequestHandler(g_dap),
"Sends a startDebugging request from the debug adapter to the client "
"to start a child debug session of the same type as the caller.");
}
cmd.AddCommand(
- "repl-mode", new ReplModeRequestHandler(),
+ "repl-mode", new ReplModeRequestHandler(g_dap),
"Get or set the repl behavior of lldb-dap evaluation requests.");
- cmd.AddCommand("send-event", new SendEventRequestHandler(),
+ cmd.AddCommand("send-event", new SendEventRequestHandler(g_dap),
"Sends an DAP event to the client.");
g_dap.progress_event_thread = std::thread(ProgressEventThreadFunction);
More information about the lldb-commits
mailing list