================ @@ -211,6 +212,35 @@ bool Watchpoint::CaptureWatchedValue(const ExecutionContext &exe_ctx) { return (m_new_value_sp && m_new_value_sp->GetError().Success()); } +bool Watchpoint::WatchedValueReportable(const ExecutionContext &exe_ctx) { + if (!m_watch_modify) + return true; + if (!m_type.IsValid()) + return true; + + ConstString watch_name("$__lldb__watch_value"); + Address watch_address(GetLoadAddress()); + ValueObjectSP newest_valueobj_sp = ValueObjectMemory::Create( + exe_ctx.GetBestExecutionContextScope(), watch_name.GetStringRef(), + watch_address, m_type); + newest_valueobj_sp = newest_valueobj_sp->CreateConstantValue(watch_name); + DataExtractor new_data; + DataExtractor old_data; + Status error; + newest_valueobj_sp->GetData(new_data, error); + m_new_value_sp->GetData(old_data, error); + ---------------- jasonmolenda wrote:
Should add, because I'm sure someone will wonder about this: Yes, I'm creating a constant ValueObject with the watched memory here, and then throwing that ValueObject away. And if we decide to stop, we'll create the constant ValueObject again with the same memory, to show it to the user. I'm relying on the memory read cache to only read that memory from the inferior process once at a single stop, otherwise this double-creation of a ValueObject would be a real perf hit to watchpoints. https://github.com/llvm/llvm-project/pull/66308 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits