[Lldb-commits] [lldb] [lldb] Fix crash after second run when set a previous watchpoint. (PR #136682)
via lldb-commits
lldb-commits at lists.llvm.org
Tue Apr 22 03:35:24 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: None (hapeeeeee)
<details>
<summary>Changes</summary>
This PR fixes a crash in `LLDB` caused by a dangling pointer to a reused `ValueObjectSP` when re-running the debuggee and setting the same watchpoint again.
As described by @<!-- -->jasonmolenda, the fix is to reinitialize the dangling pointer in `Watchpoint::SetEnabled`.
This PR closes [#<!-- -->135590](https://github.com/llvm/llvm-project/issues/135590).
---
Full diff: https://github.com/llvm/llvm-project/pull/136682.diff
1 Files Affected:
- (modified) lldb/source/Breakpoint/Watchpoint.cpp (+9)
``````````diff
diff --git a/lldb/source/Breakpoint/Watchpoint.cpp b/lldb/source/Breakpoint/Watchpoint.cpp
index 2df848aaa0576..0fcc9b90c0ab5 100644
--- a/lldb/source/Breakpoint/Watchpoint.cpp
+++ b/lldb/source/Breakpoint/Watchpoint.cpp
@@ -409,6 +409,15 @@ bool Watchpoint::IsDisabledDuringEphemeralMode() {
}
void Watchpoint::SetEnabled(bool enabled, bool notify) {
+ // Whenever setting the enabled state of a watchpoint, we need to ensure
+ // that `m_new_value_sp` exists to avoid crash when reading old_data later.
+ // See https://github.com/llvm/llvm-project/issues/135590.
+ if (!m_new_value_sp) {
+ ExecutionContext exe_ctx;
+ m_target.GetProcessSP()->CalculateExecutionContext(exe_ctx);
+ CaptureWatchedValue(exe_ctx);
+ }
+
if (!enabled) {
if (m_is_ephemeral)
++m_disabled_count;
``````````
</details>
https://github.com/llvm/llvm-project/pull/136682
More information about the lldb-commits
mailing list