[lldb-dev] Python API
Malea, Daniel
daniel.malea at intel.com
Wed Oct 9 08:20:15 PDT 2013
Hi Loukas,
I too have been working on a terminal UI for LLDB (but not GDB) with some
colleagues (CC'd). I will commit what we have thus far shortly and you can
see what we did, and maybe share some efforts/ideas.
BTW, in terms of listeners, we initialize them like so:
self.listener = debugger.GetListener()
self.listener.StartListeningForEventClass(self.debugger,
lldb.SBTarget.GetBroadcasterClassName(),
| lldb.SBTarget.eBroadcastBitBreakpointChanged
| lldb.SBTarget.eBroadcastBitWatchpointChanged
)
self.listener.StartListeningForEventClass(self.debugger,
lldb.SBThread.GetBroadcasterClassName(),
lldb.SBThread.eBroadcastBitStackChanged
| lldb.SBThread.eBroadcastBitThreadSuspended
| lldb.SBThread.eBroadcastBitThreadResumed
| lldb.SBThread.eBroadcastBitSelectedFrameChanged
| lldb.SBThread.eBroadcastBitThreadSelected
)
self.listener.StartListeningForEventClass(self.debugger,
lldb.SBProcess.GetBroadcasterClassName(),
lldb.SBProcess.eBroadcastBitStateChanged
| lldb.SBProcess.eBroadcastBitInterrupt
| lldb.SBProcess.eBroadcastBitSTDOUT
| lldb.SBProcess.eBroadcastBitSTDERR
| lldb.SBProcess.eBroadcastBitProfileData
)
self.listener.StartListeningForEventClass(self.debugger,
lldb.SBCommandInterpreter.GetBroadcasterClass(),
lldb.SBCommandInterpreter.eBroadcastBitThreadShouldExit
| lldb.SBCommandInterpreter.eBroadcastBitResetPrompt
| lldb.SBCommandInterpreter.eBroadcastBitQuitCommandReceived
| lldb.SBCommandInterpreter.eBroadcastBitAsynchronousOutputData
| lldb.SBCommandInterpreter.eBroadcastBitAsynchronousErrorData
)
Cheers,
Dan
On 2013-10-09 10:13 AM, "snare at ho.ax" <snare at ho.ax> wrote:
>Hi,
>
>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
>
>Thanks,
>Loukas
>
>[1] https://github.com/snarez/voltron
>
>
>_______________________________________________
>lldb-dev mailing list
>lldb-dev at cs.uiuc.edu
>http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
More information about the lldb-dev
mailing list