[Lldb-commits] [lldb] [lldb][lldb-dap] Support breakpoint info bytes (PR #141122)

Ebuka Ezike via lldb-commits lldb-commits at lists.llvm.org
Thu May 29 05:28:28 PDT 2025


================
@@ -16,12 +15,61 @@
 
 namespace lldb_dap {
 
+static llvm::Expected<protocol::DataBreakpointInfoResponseBody>
+HandleDataBreakpointBytes(DAP &dap,
+                          const protocol::DataBreakpointInfoArguments &args) {
+  llvm::StringRef address = args.name;
+
+  unsigned long long load_addr = LLDB_INVALID_ADDRESS;
+  if (llvm::getAsUnsignedInteger(address, 0, load_addr)) {
+    return llvm::make_error<DAPError>(llvm::formatv("invalid address"),
+                                      llvm::inconvertibleErrorCode(), false);
+  }
+
+  lldb::SBAddress sb_addr(load_addr, dap.target);
+  if (!sb_addr.IsValid()) {
+    return llvm::make_error<DAPError>(
+        llvm::formatv("address {:x} does not exist in the debuggee", load_addr),
+        llvm::inconvertibleErrorCode(), false);
+  }
+
+  const uint32_t byte_size =
+      args.bytes.value_or(dap.target.GetAddressByteSize());
+
+  protocol::DataBreakpointInfoResponseBody response;
+  response.dataId = llvm::formatv("{:x-}/{}", load_addr, byte_size);
+
+  lldb::SBMemoryRegionInfo region;
+  lldb::SBError err =
+      dap.target.GetProcess().GetMemoryRegionInfo(load_addr, region);
+  // Only lldb-server supports "qMemoryRegionInfo". So, don't fail this
----------------
da-viper wrote:

We could use it since `GetMemoryRegionInfo` falls back to [qXfer-memory-map-read](https://sourceware.org/gdb/current/onlinedocs/gdb.html/General-Query-Packets.html#qXfer-memory-map-read)
https://github.com/llvm/llvm-project/blob/ba75febd4fd2d02d19ee67d30b7f9c7a5f017248/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp#L1707-L1729

just have to update it to set readable and writeable. 

https://github.com/llvm/llvm-project/pull/141122


More information about the lldb-commits mailing list