Fix a bug copying the stop hooks from the dummy target. (#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.
This commit is contained in:
jimingham
2025-03-03 09:59:42 -08:00
committed by GitHub
parent 44badc9810
commit 64c26c8f16
2 changed files with 24 additions and 2 deletions

View File

@@ -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())

View File

@@ -26,10 +26,15 @@ class TestStopHooks(TestBase):
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 stop hooks in the dummy target,
they aren't overridden by the 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,19 @@ class TestStopHooks(TestBase):
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"]
)