https://github.com/DrSergei updated https://github.com/llvm/llvm-project/pull/171096
>From 679bb3f40b7c8961841b8d73bae0c8fa7e8cd904 Mon Sep 17 00:00:00 2001 From: Druzhkov Sergei <[email protected]> Date: Sun, 7 Dec 2025 13:55:04 +0300 Subject: [PATCH 1/2] [lldb-dap] Migrate pause request to structured types --- .../lldb-dap/Handler/PauseRequestHandler.cpp | 48 +++---------------- lldb/tools/lldb-dap/Handler/RequestHandler.h | 7 +-- .../lldb-dap/Protocol/ProtocolRequests.cpp | 6 +++ .../lldb-dap/Protocol/ProtocolRequests.h | 11 +++++ lldb/unittests/DAP/ProtocolRequestsTest.cpp | 11 +++++ 5 files changed, 39 insertions(+), 44 deletions(-) diff --git a/lldb/tools/lldb-dap/Handler/PauseRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/PauseRequestHandler.cpp index 99917b2e28223..1589c7c1142e9 100644 --- a/lldb/tools/lldb-dap/Handler/PauseRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/PauseRequestHandler.cpp @@ -8,53 +8,19 @@ #include "DAP.h" #include "EventHelper.h" -#include "JSONUtils.h" +#include "Protocol/ProtocolRequests.h" #include "RequestHandler.h" namespace lldb_dap { -// "PauseRequest": { -// "allOf": [ { "$ref": "#/definitions/Request" }, { -// "type": "object", -// "description": "Pause request; value of command field is 'pause'. The -// request suspenses the debuggee. The debug adapter first sends the -// PauseResponse and then a StoppedEvent (event type 'pause') after the -// thread has been paused successfully.", "properties": { -// "command": { -// "type": "string", -// "enum": [ "pause" ] -// }, -// "arguments": { -// "$ref": "#/definitions/PauseArguments" -// } -// }, -// "required": [ "command", "arguments" ] -// }] -// }, -// "PauseArguments": { -// "type": "object", -// "description": "Arguments for 'pause' request.", -// "properties": { -// "threadId": { -// "type": "integer", -// "description": "Pause execution for this thread." -// } -// }, -// "required": [ "threadId" ] -// }, -// "PauseResponse": { -// "allOf": [ { "$ref": "#/definitions/Response" }, { -// "type": "object", -// "description": "Response to 'pause' request. This is just an -// acknowledgement, so no body field is required." -// }] -// } -void PauseRequestHandler::operator()(const llvm::json::Object &request) const { - llvm::json::Object response; - FillResponse(request, response); +/// The request suspenses the debuggee. The debug adapter first sends the +/// PauseResponse and then a StoppedEvent (event type 'pause') after the thread +/// has been paused successfully. +llvm::Error +PauseRequestHandler::Run(const protocol::PauseArguments &args) const { lldb::SBProcess process = dap.target.GetProcess(); lldb::SBError error = process.Stop(); - dap.SendJSON(llvm::json::Value(std::move(response))); + return llvm::Error::success(); } } // namespace lldb_dap diff --git a/lldb/tools/lldb-dap/Handler/RequestHandler.h b/lldb/tools/lldb-dap/Handler/RequestHandler.h index 5d235352b7738..fdce33de3f680 100644 --- a/lldb/tools/lldb-dap/Handler/RequestHandler.h +++ b/lldb/tools/lldb-dap/Handler/RequestHandler.h @@ -492,11 +492,12 @@ class ModulesRequestHandler final Run(const std::optional<protocol::ModulesArguments> &args) const override; }; -class PauseRequestHandler : public LegacyRequestHandler { +class PauseRequestHandler + : public RequestHandler<protocol::PauseArguments, protocol::PauseResponse> { public: - using LegacyRequestHandler::LegacyRequestHandler; + using RequestHandler::RequestHandler; static llvm::StringLiteral GetCommand() { return "pause"; } - void operator()(const llvm::json::Object &request) const override; + llvm::Error Run(const protocol::PauseArguments &args) const override; }; class ScopesRequestHandler final diff --git a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp index 0a1d580bffd68..95ecc7e4e7e40 100644 --- a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp +++ b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp @@ -695,4 +695,10 @@ llvm::json::Value toJSON(const EvaluateResponseBody &Body) { return result; } +bool fromJSON(const llvm::json::Value &Params, PauseArguments &Args, + llvm::json::Path Path) { + json::ObjectMapper O(Params, Path); + return O && O.map("threadId", Args.threadId); +} + } // namespace lldb_dap::protocol diff --git a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h index 6a85033ae7ef2..dc84e90ae03b4 100644 --- a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h +++ b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.h @@ -1184,6 +1184,17 @@ struct EvaluateResponseBody { }; llvm::json::Value toJSON(const EvaluateResponseBody &); +/// Arguments for `pause` request. +struct PauseArguments { + /// Pause execution for this thread. + lldb::tid_t threadId = LLDB_INVALID_THREAD_ID; +}; +bool fromJSON(const llvm::json::Value &, PauseArguments &, llvm::json::Path); + +/// Response to `pause` request. This is just an acknowledgement, so no body +/// field is required. +using PauseResponse = VoidResponse; + } // namespace lldb_dap::protocol #endif diff --git a/lldb/unittests/DAP/ProtocolRequestsTest.cpp b/lldb/unittests/DAP/ProtocolRequestsTest.cpp index a74c369924b8e..c830690a8e4fe 100644 --- a/lldb/unittests/DAP/ProtocolRequestsTest.cpp +++ b/lldb/unittests/DAP/ProtocolRequestsTest.cpp @@ -182,3 +182,14 @@ TEST(ProtocolRequestsTest, InitializeRequestArguments) { EXPECT_THAT_EXPECTED(parse<InitializeRequestArguments>(R"({})"), FailedWithMessage("missing value at (root).adapterID")); } + +TEST(ProtocolRequestsTest, PauseRequestArguments) { + llvm::Expected<PauseArguments> expected = + parse<PauseArguments>(R"({"threadId": 123})"); + ASSERT_THAT_EXPECTED(expected, llvm::Succeeded()); + EXPECT_EQ(expected->threadId, 123U); + + // Check required keys. + EXPECT_THAT_EXPECTED(parse<PauseArguments>(R"({})"), + FailedWithMessage("missing value at (root).threadId")); +} >From 70adc3cc3bc3bbad6e3392e427e28e92f25ee82d Mon Sep 17 00:00:00 2001 From: Druzhkov Sergei <[email protected]> Date: Mon, 8 Dec 2025 14:33:38 +0300 Subject: [PATCH 2/2] Fix review comments --- lldb/tools/lldb-dap/Handler/PauseRequestHandler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lldb/tools/lldb-dap/Handler/PauseRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/PauseRequestHandler.cpp index 1589c7c1142e9..9419f1acf2735 100644 --- a/lldb/tools/lldb-dap/Handler/PauseRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/PauseRequestHandler.cpp @@ -8,6 +8,7 @@ #include "DAP.h" #include "EventHelper.h" +#include "LLDBUtils.h" #include "Protocol/ProtocolRequests.h" #include "RequestHandler.h" @@ -20,7 +21,7 @@ llvm::Error PauseRequestHandler::Run(const protocol::PauseArguments &args) const { lldb::SBProcess process = dap.target.GetProcess(); lldb::SBError error = process.Stop(); - return llvm::Error::success(); + return ToError(error); } } // namespace lldb_dap _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
