xref: /freebsd/contrib/llvm-project/lldb/bindings/interface/SBEventDocstrings.i (revision a03411e84728e9b267056fd31c7d1d9d1dc1b01e)
1 %feature("docstring",
2 "API clients can register to receive events.
3 
4 For example, check out the following output: ::
5 
6     Try wait for event...
7     Event description: 0x103d0bb70 Event: broadcaster = 0x1009c8410, type = 0x00000001, data = { process = 0x1009c8400 (pid = 21528), state = running}
8     Event data flavor: Process::ProcessEventData
9     Process state: running
10 
11     Try wait for event...
12     Event description: 0x103a700a0 Event: broadcaster = 0x1009c8410, type = 0x00000001, data = { process = 0x1009c8400 (pid = 21528), state = stopped}
13     Event data flavor: Process::ProcessEventData
14     Process state: stopped
15 
16     Try wait for event...
17     Event description: 0x103d0d4a0 Event: broadcaster = 0x1009c8410, type = 0x00000001, data = { process = 0x1009c8400 (pid = 21528), state = exited}
18     Event data flavor: Process::ProcessEventData
19     Process state: exited
20 
21     Try wait for event...
22     timeout occurred waiting for event...
23 
24 from test/python_api/event/TestEventspy: ::
25 
26     def do_listen_for_and_print_event(self):
27         '''Create a listener and use SBEvent API to print the events received.'''
28         exe = os.path.join(os.getcwd(), 'a.out')
29 
30         # Create a target by the debugger.
31         target = self.dbg.CreateTarget(exe)
32         self.assertTrue(target, VALID_TARGET)
33 
34         # Now create a breakpoint on main.c by name 'c'.
35         breakpoint = target.BreakpointCreateByName('c', 'a.out')
36 
37         # Now launch the process, and do not stop at the entry point.
38         process = target.LaunchSimple(None, None, os.getcwd())
39         self.assertTrue(process.GetState() == lldb.eStateStopped,
40                         PROCESS_STOPPED)
41 
42         # Get a handle on the process's broadcaster.
43         broadcaster = process.GetBroadcaster()
44 
45         # Create an empty event object.
46         event = lldb.SBEvent()
47 
48         # Create a listener object and register with the broadcaster.
49         listener = lldb.SBListener('my listener')
50         rc = broadcaster.AddListener(listener, lldb.SBProcess.eBroadcastBitStateChanged)
51         self.assertTrue(rc, 'AddListener successfully retruns')
52 
53         traceOn = self.TraceOn()
54         if traceOn:
55             lldbutil.print_stacktraces(process)
56 
57         # Create MyListeningThread class to wait for any kind of event.
58         import threading
59         class MyListeningThread(threading.Thread):
60             def run(self):
61                 count = 0
62                 # Let's only try at most 4 times to retrieve any kind of event.
63                 # After that, the thread exits.
64                 while not count > 3:
65                     if traceOn:
66                         print('Try wait for event...')
67                     if listener.WaitForEventForBroadcasterWithType(5,
68                                                                    broadcaster,
69                                                                    lldb.SBProcess.eBroadcastBitStateChanged,
70                                                                    event):
71                         if traceOn:
72                             desc = lldbutil.get_description(event))
73                             print('Event description:', desc)
74                             print('Event data flavor:', event.GetDataFlavor())
75                             print('Process state:', lldbutil.state_type_to_str(process.GetState()))
76                             print()
77                     else:
78                         if traceOn:
79                             print 'timeout occurred waiting for event...'
80                     count = count + 1
81                 return
82 
83         # Let's start the listening thread to retrieve the events.
84         my_thread = MyListeningThread()
85         my_thread.start()
86 
87         # Use Python API to continue the process.  The listening thread should be
88         # able to receive the state changed events.
89         process.Continue()
90 
91         # Use Python API to kill the process.  The listening thread should be
92         # able to receive the state changed event, too.
93         process.Kill()
94 
95         # Wait until the 'MyListeningThread' terminates.
96         my_thread.join()"
97 ) lldb::SBEvent;
98 
99 %feature("autodoc",
100 "__init__(self, int type, str data) -> SBEvent (make an event that contains a C string)"
101 ) lldb::SBEvent::SBEvent;
102