diff --git a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp index b455112cd37d9..b9393356b4e01 100644 --- a/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp +++ b/lldb/tools/lldb-dap/Protocol/ProtocolRequests.cpp @@ -461,7 +461,7 @@ bool fromJSON(const json::Value &Params, DataBreakpointInfoArguments &DBIA, json::Path P) { json::ObjectMapper O(Params, P); return O && O.map("variablesReference", DBIA.variablesReference) && - O.map("name", DBIA.name) && O.map("frameId", DBIA.frameId) && + O.map("name", DBIA.name) && O.mapOptional("frameId", DBIA.frameId) && O.map("bytes", DBIA.bytes) && O.map("asAddress", DBIA.asAddress) && O.map("mode", DBIA.mode); } diff --git a/lldb/unittests/DAP/ProtocolTypesTest.cpp b/lldb/unittests/DAP/ProtocolTypesTest.cpp index 0989a5becc8fe..a5ae856a185b7 100644 --- a/lldb/unittests/DAP/ProtocolTypesTest.cpp +++ b/lldb/unittests/DAP/ProtocolTypesTest.cpp @@ -1101,3 +1101,28 @@ TEST(ProtocolTypesTest, MemoryEventBody) { })"; EXPECT_EQ(json, pp(body)); } + +TEST(ProtocolTypesTest, DataBreakpointInfoArguments) { + llvm::Expected expected = + parse(R"({ + "name": "data", + "variablesReference": 8, + "frameId": 9, + "bytes": 10, + "asAddress": false, + "mode": "source" + })"); + ASSERT_THAT_EXPECTED(expected, llvm::Succeeded()); + EXPECT_EQ(expected->name, "data"); + EXPECT_EQ(expected->variablesReference, 8); + EXPECT_EQ(expected->frameId, 9u); + EXPECT_EQ(expected->bytes, 10); + EXPECT_EQ(expected->asAddress, false); + EXPECT_EQ(expected->mode, "source"); + + // Check required keys. + EXPECT_THAT_EXPECTED(parse(R"({})"), + FailedWithMessage("missing value at (root).name")); + EXPECT_THAT_EXPECTED(parse(R"({"name":"data"})"), + llvm::Succeeded()); +}