[Lldb-commits] [lldb] Fix a bug copying the stop hooks from the dummy target. (PR #129340)

via lldb-commits lldb-commits at lists.llvm.org
Fri Feb 28 15:58:20 PST 2025


https://github.com/jimingham created https://github.com/llvm/llvm-project/pull/129340

We didn't also copy over the next stop hook id, which meant we would overwrite the stop hooks from the dummy target with stop hooks set after they are copied over.

>From 02e908312518e85f1d637529c9f62e3dd9551035 Mon Sep 17 00:00:00 2001
From: Jim Ingham <jingham at apple.com>
Date: Fri, 28 Feb 2025 15:55:03 -0800
Subject: [PATCH] Fix a bug copying the stop hooks from the dummy target. We
 didn't also copy over the next stop hook id, which meant we would overwrite
 the stop hooks from the dummy target with stop hooks set after they are
 copied over.

---
 lldb/source/Target/Target.cpp                 |  1 +
 .../target/stop-hooks/TestStopHooks.py        | 24 +++++++++++++++++--
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index db289fe9c4b64..550424720e095 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -211,6 +211,7 @@ Target::~Target() {
 
 void Target::PrimeFromDummyTarget(Target &target) {
   m_stop_hooks = target.m_stop_hooks;
+  m_stop_hook_next_id = target.m_stop_hook_next_id;
 
   for (const auto &breakpoint_sp : target.m_breakpoint_list.Breakpoints()) {
     if (breakpoint_sp->IsInternal())
diff --git a/lldb/test/API/commands/target/stop-hooks/TestStopHooks.py b/lldb/test/API/commands/target/stop-hooks/TestStopHooks.py
index fe59bd8a5d007..5215ec7258d14 100644
--- a/lldb/test/API/commands/target/stop-hooks/TestStopHooks.py
+++ b/lldb/test/API/commands/target/stop-hooks/TestStopHooks.py
@@ -26,10 +26,15 @@ def test_stop_hooks_step_out(self):
         self.step_out_test()
 
     def test_stop_hooks_after_expr(self):
-        """Test that a stop hook fires when hitting a breakpoint
-        that runs an expression"""
+        """Test that a stop hook fires when hitting a breakpoint that
+           runs an expression"""
         self.after_expr_test()
 
+    def test_stop_hooks_before_and_after_creation(self):
+        """Test that if we add a stop hook in the dummy target, we can
+           they don't collide with ones set directly in the target."""
+        self.before_and_after_target()
+
     def step_out_test(self):
         (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
             self, "Set a breakpoint here", self.main_source_file
@@ -85,3 +90,18 @@ def after_expr_test(self):
         var = target.FindFirstGlobalVariable("g_var")
         self.assertTrue(var.IsValid())
         self.assertEqual(var.GetValueAsUnsigned(), 1, "Updated g_var")
+
+    def before_and_after_target(self):
+        interp = self.dbg.GetCommandInterpreter()
+        result = lldb.SBCommandReturnObject()
+        interp.HandleCommand("target stop-hook add -o 'expr g_var++'", result)
+        self.assertTrue(result.Succeeded(), "Set the target stop hook")
+
+        (target, process, thread, first_bkpt) = lldbutil.run_to_source_breakpoint(
+            self, "Set a breakpoint here", self.main_source_file
+        )
+
+        interp.HandleCommand("target stop-hook add -o 'thread backtrace'", result)
+        self.assertTrue(result.Succeeded(), "Set the target stop hook")
+        self.expect("target stop-hook list", substrs=["expr g_var++", "thread backtrace"])
+



More information about the lldb-commits mailing list