| """ |
| Test thread step-in ignores frames according to the "Avoid regexp" option. |
| """ |
| |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class StepAvoidsRegexTestCase(TestBase): |
| def hit_correct_function(self, pattern): |
| name = self.thread.frames[0].GetFunctionName() |
| self.assertIn( |
| pattern, |
| name, |
| "Got to '%s' not the expected function '%s'." % (name, pattern), |
| ) |
| |
| def setUp(self): |
| TestBase.setUp(self) |
| self.dbg.HandleCommand( |
| "settings set target.process.thread.step-avoid-regexp ^ignore::" |
| ) |
| |
| @skipIfWindows |
| @skipIf(compiler="clang", compiler_version=["<", "11.0"]) |
| def test_step_avoid_regex(self): |
| """Tests stepping into a function which matches the avoid regex""" |
| self.build() |
| (_, _, self.thread, _) = lldbutil.run_to_source_breakpoint( |
| self, "main", lldb.SBFileSpec("main.cpp") |
| ) |
| |
| # Try to step into ignore::auto_ret |
| self.thread.StepInto() |
| self.hit_correct_function("main") |
| |
| # Try to step into ignore::with_tag |
| self.thread.StepInto() |
| self.hit_correct_function("main") |
| |
| # Try to step into ignore::decltype_auto_ret |
| self.thread.StepInto() |
| self.hit_correct_function("main") |
| |
| # Try to step into ignore::with_tag_template |
| self.thread.StepInto() |
| self.hit_correct_function("main") |
| |
| # Step into with_tag_template_returns_ignore which is outside the 'ignore::' |
| # namespace but returns a type from 'ignore::' |
| self.thread.StepInto() |
| self.hit_correct_function("with_tag_template_returns_ignore") |