1""" 2Test that we can listen to modules loaded events. 3""" 4 5import lldb 6from lldbsuite.test.decorators import * 7from lldbsuite.test.lldbtest import * 8from lldbsuite.test import lldbutil 9 10 11class ListenToModuleLoadedEvents(TestBase): 12 NO_DEBUG_INFO_TESTCASE = True 13 14 def test_clearing_listener(self): 15 """Make sure we also clear listerers from the hook up for event type manager""" 16 self.build() 17 18 my_first_listener = lldb.SBListener("bonus_listener") 19 my_listener = lldb.SBListener("test_listener") 20 my_third_listener = lldb.SBListener("extra_bonus_listener") 21 22 my_listener.StartListeningForEventClass( 23 self.dbg, 24 lldb.SBTarget.GetBroadcasterClassName(), 25 lldb.SBTarget.eBroadcastBitBreakpointChanged, 26 ) 27 my_first_listener.StartListeningForEventClass( 28 self.dbg, 29 lldb.SBTarget.GetBroadcasterClassName(), 30 lldb.SBTarget.eBroadcastBitWatchpointChanged, 31 ) 32 my_third_listener.StartListeningForEventClass( 33 self.dbg, 34 lldb.SBTarget.GetBroadcasterClassName(), 35 lldb.SBTarget.eBroadcastBitModulesUnloaded, 36 ) 37 38 my_listener.Clear() 39 40 target = self.createTestTarget() 41 42 bkpt = target.BreakpointCreateByName("main") 43 44 event = lldb.SBEvent() 45 my_listener.WaitForEvent(1, event) 46 self.assertTrue( 47 not event.IsValid(), "We don't get events we aren't listening to." 48 ) 49 50 def test_receiving_breakpoint_added_from_debugger(self): 51 """Test that we get breakpoint added events, waiting on event classes on the debugger""" 52 self.build() 53 54 my_listener = lldb.SBListener("test_listener") 55 my_listener.StartListeningForEventClass( 56 self.dbg, 57 lldb.SBTarget.GetBroadcasterClassName(), 58 lldb.SBTarget.eBroadcastBitBreakpointChanged, 59 ) 60 61 target = self.createTestTarget() 62 63 bkpt = target.BreakpointCreateByName("main") 64 65 event = lldb.SBEvent() 66 my_listener.WaitForEvent(1, event) 67 68 self.assertTrue(event.IsValid(), "Got a valid event.") 69 self.assertTrue( 70 lldb.SBBreakpoint.EventIsBreakpointEvent(event), "It is a breakpoint event." 71 ) 72 self.assertEqual( 73 lldb.SBBreakpoint.GetBreakpointEventTypeFromEvent(event), 74 lldb.eBreakpointEventTypeAdded, 75 "It is a breakpoint added event.", 76 ) 77 self.assertEqual( 78 bkpt, 79 lldb.SBBreakpoint.GetBreakpointFromEvent(event), 80 "It is our breakpoint.", 81 ) 82 83 # Now make sure if we stop listening for events we don't get them: 84 my_listener.StopListeningForEventClass( 85 self.dbg, 86 lldb.SBTarget.GetBroadcasterClassName(), 87 lldb.SBTarget.eBroadcastBitBreakpointChanged, 88 ) 89 my_listener.StopListeningForEvents( 90 target.GetBroadcaster(), lldb.SBTarget.eBroadcastBitBreakpointChanged 91 ) 92 93 bkpt2 = target.BreakpointCreateByName("main") 94 my_listener.WaitForEvent(1, event) 95 self.assertTrue( 96 not event.IsValid(), "We don't get events we aren't listening to." 97 ) 98 99 def test_recieving_breakpoint_added_from_target(self): 100 """Test that we get breakpoint added events, waiting on event classes on the debugger""" 101 self.build() 102 103 my_listener = lldb.SBListener("test_listener") 104 my_listener.StartListeningForEventClass( 105 self.dbg, 106 lldb.SBTarget.GetBroadcasterClassName(), 107 lldb.SBTarget.eBroadcastBitBreakpointChanged, 108 ) 109 110 target = self.createTestTarget() 111 result = target.GetBroadcaster().AddListener( 112 my_listener, lldb.SBTarget.eBroadcastBitBreakpointChanged 113 ) 114 self.assertEqual( 115 result, lldb.SBTarget.eBroadcastBitBreakpointChanged, "Got our bit" 116 ) 117 118 bkpt = target.BreakpointCreateByName("main") 119 120 event = lldb.SBEvent() 121 my_listener.WaitForEvent(1, event) 122 123 self.assertTrue(event.IsValid(), "Got a valid event.") 124 self.assertTrue( 125 lldb.SBBreakpoint.EventIsBreakpointEvent(event), "It is a breakpoint event." 126 ) 127 self.assertEqual( 128 lldb.SBBreakpoint.GetBreakpointEventTypeFromEvent(event), 129 lldb.eBreakpointEventTypeAdded, 130 "It is a breakpoint added event.", 131 ) 132 self.assertEqual( 133 bkpt, 134 lldb.SBBreakpoint.GetBreakpointFromEvent(event), 135 "It is our breakpoint.", 136 ) 137 138 # Now make sure if we stop listening for events we don't get them: 139 target.GetBroadcaster().RemoveListener(my_listener) 140 141 bkpt2 = target.BreakpointCreateByName("main") 142 my_listener.WaitForEvent(1, event) 143 self.assertTrue( 144 not event.IsValid(), "We don't get events we aren't listening to." 145 ) 146