Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,57 @@ def test_process_connect_async(self):
self.dbg.GetSelectedTarget().GetProcess().Kill()
lldbutil.expect_state_changes(self, self.dbg.GetListener(),
self.process(), [lldb.eStateExited])
def test_breakpoint_count(self):
"""
Test that breakpoint count gets reset for each new connection.
"""
class MyResponder(MockGDBServerResponder):

def __init__(self):
super().__init__()
self.continued = False

def qfThreadInfo(self):
return "m47"

def qsThreadInfo(self):
return "l"

def setBreakpoint(self, packet):
return "OK"

def readRegister(self, reg):
# Pretend we're at the breakpoint after we've been resumed.
return "3412000000000000" if self.continued else "4747000000000000"

def cont(self):
self.continued = True
return "T05thread=47;reason:breakpoint"

# Connect to the first process and set our breakpoint.
self.server.responder = MyResponder()
target = self.createTarget("a.yaml")
process = self.connect(target)

bkpt = target.BreakpointCreateByAddress(0x1234)
self.assertTrue(bkpt.IsValid())
self.assertEqual(bkpt.GetNumLocations(), 1)

# "continue" the process. It should hit our breakpoint.
process.Continue()
self.assertState(process.GetState(), lldb.eStateStopped)
self.assertEqual(bkpt.GetHitCount(), 1)

# Now kill it. The breakpoint should still show a hit count of one.
process.Kill()
self.server.stop()
self.assertEqual(bkpt.GetHitCount(), 1)

# Start over, and reconnect.
self.server = MockGDBServer(self.server_socket_class())
self.server.start()

process = self.connect(target)

# The hit count should be reset.
self.assertEqual(bkpt.GetHitCount(), 0)