| """ | |
| Confirm that lldb modify watchpoints only stop | |
| when the value being watched changes. | |
| """ | |
| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| @skipIfWindows | |
| class ModifyWatchpointTestCase(TestBase): | |
| NO_DEBUG_INFO_TESTCASE = True | |
| def test_modify_watchpoint(self): | |
| """Test that a modify watchpoint only stops when the value changes.""" | |
| self.build() | |
| self.main_source_file = lldb.SBFileSpec("main.c") | |
| (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( | |
| self, "break here", self.main_source_file | |
| ) | |
| self.runCmd("watch set variable value") | |
| process.Continue() | |
| frame = process.GetSelectedThread().GetFrameAtIndex(0) | |
| self.assertEqual(frame.locals["value"][0].GetValueAsUnsigned(), 10) | |
| process.Continue() | |
| frame = process.GetSelectedThread().GetFrameAtIndex(0) | |
| self.assertEqual(frame.locals["value"][0].GetValueAsUnsigned(), 5) | |
| process.Continue() | |
| frame = process.GetSelectedThread().GetFrameAtIndex(0) | |
| self.assertEqual(frame.locals["value"][0].GetValueAsUnsigned(), 7) | |
| process.Continue() | |
| frame = process.GetSelectedThread().GetFrameAtIndex(0) | |
| self.assertEqual(frame.locals["value"][0].GetValueAsUnsigned(), 9) |