David Spickett 75e8620778 Reland "[lldb] Add 'modify' type watchpoints, make it default (#66308)"
This reverts commit a7b78cac9a77e3ef6bbbd8ab1a559891dc693401.

With updates to the tests.

TestWatchTaggedAddress.py: Updated the expected watchpoint types,
though I'm not sure there should be a differnt default for the two
ways of setting them, that needs to be confirmed.

TestStepOverWatchpoint.py: Skipped this everywhere because I think
what used to happen is you couldn't put 2 watchpoints on the same
address (after alignment). I guess that this is now allowed because
modify watchpoints aren't accounted for, but likely should be.
Needs investigating.
2023-09-21 10:35:15 +00:00

41 lines
1.3 KiB
Python

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