[Lldb-commits] [PATCH] D66241: stop-hooks don't fire on "step-out"
Jim Ingham via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Aug 14 12:38:40 PDT 2019
jingham created this revision.
jingham added a reviewer: clayborg.
Herald added subscribers: lldb-commits, abidh.
Herald added a project: LLDB.
Step hooks were not firing when you did a "step out".
This was because, when a breakpoint's PerformAction observes that the breakpoint has completed a plan, it resets the thread StopInfo so that the completed plan will be reported as the stop reason, not the trap that is the private stop reason. But for no good reason that I can remember, it doesn't immediately reset the StopInfo to the completed plan one, but lets that happen the next time somebody gets the stop reason. That didn't happen by the time stop-hooks checked if the thread had a stop reason.
We could make the stop-hooks force the StopInfo to get recomputed, but that might happen somewhere else as well. It's better to just do it right away.
I also added a test for this case.
@@ -0,0 +1,14 @@
+static int g_var = 0;
+ return g_var; // Set a breakpoint here and step out.
+ return step_out_of_me();
@@ -0,0 +1,45 @@
+Test that stop hooks trigger on "step-out"
+from __future__ import print_function
+import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.lldbtest import *
+ mydir = TestBase.compute_mydir(__file__)
+ # If your test case doesn't stress debug info, the
+ # set this to true. That way it won't be run once for
+ # each debug info format.
+ NO_DEBUG_INFO_TESTCASE = True
+ def test_stop_hooks_step_out(self):
+ """Test that stop hooks fire on step-out."""
+ self.main_source_file = lldb.SBFileSpec("main.c")
+ def setUp(self):
+ # Call super's setUp().
+ def step_out_test(self):
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ "Set a breakpoint here", self.main_source_file)
+ 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")
+ var = target.FindFirstGlobalVariable("g_var")
+ self.assertEqual(var.GetValueAsUnsigned(), 1, "Updated g_var")
@@ -0,0 +1,6 @@
+LEVEL = ../../make
+C_SOURCES := main.c
+CFLAGS_EXTRAS += -std=c99
@@ -547,6 +547,7 @@
// find the appropriate stop info, which should be the stop info
// related to the completed plan
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 3039 bytes
Desc: not available
More information about the lldb-commits