| """ |
| 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) |