https://github.com/DrSergei updated https://github.com/llvm/llvm-project/pull/181968
>From 8a63f5ebbc323eeca3c6f24a6ae3bf50d828d398 Mon Sep 17 00:00:00 2001 From: Sergei Druzhkov <[email protected]> Date: Tue, 17 Feb 2026 21:59:04 +0300 Subject: [PATCH 1/3] [lldb-dap] Add hex format in setVariable request --- .../Python/lldbsuite/test/tools/lldb-dap/dap_server.py | 4 +++- .../lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py | 10 ++++++---- .../API/tools/lldb-dap/variables/TestDAP_variables.py | 10 ++++++++++ .../lldb-dap/Handler/SetVariableRequestHandler.cpp | 3 ++- lldb/tools/lldb-dap/Protocol/ProtocolRequests.h | 2 +- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py index 8e342b5277fc4..400a190cd611d 100644 --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py @@ -1597,7 +1597,7 @@ def request_variables( } return self._send_recv(command_dict) - def request_setVariable(self, containingVarRef, name, value, id=None): + def request_setVariable(self, containingVarRef, name, value, id=None, is_hex=None): args_dict = { "variablesReference": containingVarRef, "name": name, @@ -1605,6 +1605,8 @@ def request_setVariable(self, containingVarRef, name, value, id=None): } if id is not None: args_dict["id"] = id + if is_hex is not None: + args_dict["format"] = {"hex": is_hex} command_dict = { "command": "setVariable", "type": "request", diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py index e49e4a28e3878..355434ddb9514 100644 --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/lldbdap_testcase.py @@ -375,21 +375,23 @@ def get_local_as_int(self, name, threadId=None): else: return int(value) - def set_variable(self, varRef, name, value, id=None): + def set_variable(self, varRef, name, value, id=None, is_hex=None): """Set a variable.""" - response = self.dap_server.request_setVariable(varRef, name, str(value), id=id) + response = self.dap_server.request_setVariable( + varRef, name, str(value), id=id, is_hex=is_hex + ) if response["success"]: self.verify_invalidated_event(["variables"]) self.verify_memory_event(response["body"].get("memoryReference")) return response - def set_local(self, name, value, id=None): + def set_local(self, name, value, id=None, is_hex=None): """Set a top level local variable only.""" # Get the locals scope reference dynamically locals_ref = self.get_locals_scope_reference() if locals_ref is None: return None - return self.set_variable(locals_ref, name, str(value), id=id) + return self.set_variable(locals_ref, name, str(value), id=id, is_hex=is_hex) def get_locals_scope_reference(self): """Get the variablesReference for the locals scope.""" diff --git a/lldb/test/API/tools/lldb-dap/variables/TestDAP_variables.py b/lldb/test/API/tools/lldb-dap/variables/TestDAP_variables.py index 10c67a94407e6..56ea7c81277b0 100644 --- a/lldb/test/API/tools/lldb-dap/variables/TestDAP_variables.py +++ b/lldb/test/API/tools/lldb-dap/variables/TestDAP_variables.py @@ -306,6 +306,16 @@ def do_test_scopes_variables_setVariable_evaluate( argv, 0x1234, "verify argv was set to 0x1234 (0x1234 != %#x)" % (argv) ) + # Test hexadecimal format + response = self.set_local("argc", 42, is_hex=True) + verify_response = { + "type": "int", + "value": "0x0000002a", + } + for key, value in verify_response.items(): + self.assertEqual(value, response["body"][key]) + self.set_local("argc", 123) + # Set a variable value whose name is synthetic, like a variable index # and verify the value by reading it variable_value = 100 diff --git a/lldb/tools/lldb-dap/Handler/SetVariableRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/SetVariableRequestHandler.cpp index fb02d0ada651e..725d5de094c95 100644 --- a/lldb/tools/lldb-dap/Handler/SetVariableRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/SetVariableRequestHandler.cpp @@ -54,8 +54,9 @@ SetVariableRequestHandler::Run(const SetVariableArguments &args) const { if (!success) return llvm::make_error<DAPError>(error.GetCString()); + const bool hex = args.format ? args.format->hex : false; VariableDescription desc(variable, - dap.configuration.enableAutoVariableSummaries); + dap.configuration.enableAutoVariableSummaries, hex); SetVariableResponseBody body; body.value = desc.display_value; diff --git a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h index 9bf04757294d6..a8280bcdd9ee6 100644 --- a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h +++ b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h @@ -444,7 +444,7 @@ struct SetVariableArguments { std::string value; /// Specifies details on how to format the response value. - ValueFormat format; + std::optional<ValueFormat> format; }; bool fromJSON(const llvm::json::Value &, SetVariableArguments &, llvm::json::Path); >From 269edff9bab4ca8b753c5549839ca8262ad73853 Mon Sep 17 00:00:00 2001 From: Sergei Druzhkov <[email protected]> Date: Wed, 18 Feb 2026 17:14:31 +0300 Subject: [PATCH 2/3] Add test --- lldb/unittests/DAP/ProtocolRequestsTest.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lldb/unittests/DAP/ProtocolRequestsTest.cpp b/lldb/unittests/DAP/ProtocolRequestsTest.cpp index 18ba5cbf58cfd..9154b4f1a9196 100644 --- a/lldb/unittests/DAP/ProtocolRequestsTest.cpp +++ b/lldb/unittests/DAP/ProtocolRequestsTest.cpp @@ -11,6 +11,7 @@ #include "TestingSupport/TestUtilities.h" #include "llvm/Testing/Support/Error.h" #include <gtest/gtest.h> +#include <optional> using namespace llvm; using namespace lldb_dap::protocol; @@ -413,3 +414,22 @@ TEST(ProtocolRequestsTest, StackTraceResponseBody) { ASSERT_THAT_EXPECTED(expected, llvm::Succeeded()); EXPECT_EQ(PrettyPrint(*expected), PrettyPrint(body)); } + +TEST(ProtocolRequestsTest, SetVariableArguments) { + llvm::Expected<SetVariableArguments> expected = + parse<SetVariableArguments>(R"({ + "variablesReference": 42, + "name": "test", + "value": "12345" + })"); + ASSERT_THAT_EXPECTED(expected, llvm::Succeeded()); + EXPECT_EQ(expected->variablesReference, 42U); + EXPECT_EQ(expected->name, "test"); + EXPECT_EQ(expected->value, "12345"); + EXPECT_EQ(expected->format, std::nullopt); + + // Check required keys. + EXPECT_THAT_EXPECTED( + parse<SetVariableArguments>(R"({})"), + FailedWithMessage("missing value at (root).variablesReference")); +} >From a00f1021917d268ba2e075c68ad6d772cdd44e59 Mon Sep 17 00:00:00 2001 From: Sergei Druzhkov <[email protected]> Date: Wed, 18 Feb 2026 18:02:34 +0300 Subject: [PATCH 3/3] Fix test --- lldb/unittests/DAP/ProtocolRequestsTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/unittests/DAP/ProtocolRequestsTest.cpp b/lldb/unittests/DAP/ProtocolRequestsTest.cpp index 9154b4f1a9196..5d6086b46add0 100644 --- a/lldb/unittests/DAP/ProtocolRequestsTest.cpp +++ b/lldb/unittests/DAP/ProtocolRequestsTest.cpp @@ -423,7 +423,7 @@ TEST(ProtocolRequestsTest, SetVariableArguments) { "value": "12345" })"); ASSERT_THAT_EXPECTED(expected, llvm::Succeeded()); - EXPECT_EQ(expected->variablesReference, 42U); + EXPECT_EQ(expected->variablesReference.AsUInt32(), 42U); EXPECT_EQ(expected->name, "test"); EXPECT_EQ(expected->value, "12345"); EXPECT_EQ(expected->format, std::nullopt); _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
