[lldb-dev] Python API

snare at ho.ax snare at ho.ax
Wed Oct 9 07:13:08 PDT 2013


I've been working on a terminal-based UI for LLDB (and GDB)[1] recently and I have a few questions about the Python API.

The way this tool works currently is by registering a new command that sends updates to client views, and then registering a stop-hook that calls that command whenever the debugger stops.

>From looking at the sample python code and the LLDB source I think maybe I could do the same thing using SBListener/SBBroadcaster/etc.

I've tried stuff like this:

listener = lldb.SBListener()
listener.StartListeningForEventClass(lldb.debugger, 'lldb.process', 0xffffffff)
while 1:
   if listener.WaitForEvent(1, event):
        print('got event: ' + event.GetDataFlavor())

But I don't get notifications for processes starting and stopping.

I've also tried stealing lldb.debugger's listener:

listener = lldb.debugger.GetListener()

… but that hangs when I get the first event. I suspect maybe that's a terrible idea, and not how it's meant to be done when the LLDB CLI has created the SBDebugger instance and its listener.

Is it possible to do this from a script run within an existing LLDB instance? It seems like all the sample code doing things like this is actually instantiating the SBDebugger itself and fully automating the debugging session, rather than being imported into LLDB and running from there. 

I'd also like to receive notifications for the following events:
- a new file being loaded
- a target being run
- a target exiting


[1] https://github.com/snarez/voltron

More information about the lldb-dev mailing list