1""" 2Test handling of cases when a single instruction triggers multiple watchpoints 3""" 4 5 6 7import lldb 8from lldbsuite.test.decorators import * 9from lldbsuite.test.lldbtest import * 10from lldbsuite.test import lldbutil 11 12 13class MultipleHitsTestCase(TestBase): 14 15 mydir = TestBase.compute_mydir(__file__) 16 NO_DEBUG_INFO_TESTCASE = True 17 18 @skipIf(bugnumber="llvm.org/pr30758", oslist=["linux"], archs=["arm", "aarch64", "powerpc64le"]) 19 @skipIfwatchOS 20 def test(self): 21 self.build() 22 target = self.createTestTarget() 23 24 bp = target.BreakpointCreateByName("main") 25 self.assertTrue(bp and bp.IsValid(), "Breakpoint is valid") 26 27 process = target.LaunchSimple(None, None, 28 self.get_process_working_directory()) 29 self.assertEqual(process.GetState(), lldb.eStateStopped) 30 31 thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint) 32 self.assertIsNotNone(thread) 33 34 frame = thread.GetFrameAtIndex(0) 35 self.assertTrue(frame and frame.IsValid(), "Frame is valid") 36 37 buf = frame.FindValue("buf", lldb.eValueTypeVariableGlobal) 38 self.assertTrue(buf and buf.IsValid(), "buf is valid") 39 40 for i in [0, target.GetAddressByteSize()]: 41 member = buf.GetChildAtIndex(i) 42 self.assertTrue(member and member.IsValid(), "member is valid") 43 44 error = lldb.SBError() 45 watch = member.Watch(True, True, True, error) 46 self.assertTrue(error.Success()) 47 48 process.Continue(); 49 self.assertEqual(process.GetState(), lldb.eStateStopped) 50 self.assertEqual(thread.GetStopReason(), lldb.eStopReasonWatchpoint) 51 52