================ @@ -2757,13 +2769,18 @@ void request_dataBreakpointInfo(const llvm::json::Object &request) { body.try_emplace("description", error_cstr && error_cstr[0] ? std::string(error_cstr) : "evaluation failed"); - } else - addr = llvm::utohexstr(value.GetValueAsUnsigned()); + } else { + uint64_t value_as_unsigned = value.GetValueAsUnsigned(); + if (value_as_unsigned == 0) { + body.try_emplace("dataId", nullptr); + body.try_emplace("description", + "unable to evaluate expression to an address."); + } + addr = llvm::utohexstr(value_as_unsigned); + } ---------------- clayborg wrote:
For any address we come up with, it is probably a good idea to find the memory region that contains it and verify we have at least some permissions. You can take any uint64_t address and find the region by doing: ``` uint64_t load_addr = ...; lldb::SBMemoryRegionInfo region; lldb::SBError err = g_dap.target.GetProcess().GetMemoryRegionInfo(load_addr, region); if (err.Success()) { if (!(region.IsReadable() || region.IsWritable())) { body.try_emplace("description", "memory region for address <addr> has no read or write permissions"); } } else { body.try_emplace("description", "unable to get memory region info for address <addr>"); } ``` https://github.com/llvm/llvm-project/pull/81680 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits