Debugging with GDB: Events In Python |
---|
Next: Threads In Python, Previous: Inferiors In Python, Up: Python API [Contents][Index]
GDB provides a general event facility so that Python code can be notified of various state changes, particularly changes that occur in the inferior.
An event is just an object that describes some state change. The type of the object and its attributes will vary depending on the details of the change. All the existing events are described below.
In order to be notified of an event, you must register an event handler
with an event registry. An event registry is an object in the
gdb.events
module which dispatches particular events. A registry
provides methods to register and unregister event handlers:
Add the given callable object to the registry. This object will be called when an event corresponding to this registry occurs.
Remove the given object from the registry. Once removed, the object will no longer receive notifications of events.
Here is an example:
def exit_handler (event): print "event type: exit" print "exit code: %d" % (event.exit_code) gdb.events.exited.connect (exit_handler)
In the above example we connect our handler exit_handler
to the
registry events.exited
. Once connected, exit_handler
gets
called when the inferior exits. The argument event in this example is
of type gdb.ExitedEvent
. As you can see in the example the
ExitedEvent
object has an attribute which indicates the exit code of
the inferior.
The following is a listing of the event registries that are available and details of the events they emit:
events.cont
Emits gdb.ThreadEvent
.
Some events can be thread specific when GDB is running in non-stop
mode. When represented in Python, these events all extend
gdb.ThreadEvent
. Note, this event is not emitted directly; instead,
events which are emitted by this or other modules might extend this event.
Examples of these events are gdb.BreakpointEvent
and
gdb.ContinueEvent
.
In non-stop mode this attribute will be set to the specific thread which was
involved in the emitted event. Otherwise, it will be set to None
.
Emits gdb.ContinueEvent
which extends gdb.ThreadEvent
.
This event indicates that the inferior has been continued after a stop. For
inherited attribute refer to gdb.ThreadEvent
above.
events.exited
Emits events.ExitedEvent
which indicates that the inferior has exited.
events.ExitedEvent
has two attributes:
events.stop
Emits gdb.StopEvent
which extends gdb.ThreadEvent
.
Indicates that the inferior has stopped. All events emitted by this registry
extend StopEvent. As a child of gdb.ThreadEvent
, gdb.StopEvent
will indicate the stopped thread when GDB is running in non-stop
mode. Refer to gdb.ThreadEvent
above for more details.
Emits gdb.SignalEvent
which extends gdb.StopEvent
.
This event indicates that the inferior or one of its threads has received as
signal. gdb.SignalEvent
has the following attributes:
A string representing the signal received by the inferior. A list of possible
signal values can be obtained by running the command info signals
in
the GDB command prompt.
Also emits gdb.BreakpointEvent
which extends gdb.StopEvent
.
gdb.BreakpointEvent
event indicates that one or more breakpoints have
been hit, and has the following attributes:
A sequence containing references to all the breakpoints (type
gdb.Breakpoint
) that were hit.
See Breakpoints In Python, for details of the gdb.Breakpoint
object.
events.new_objfile
Emits gdb.NewObjFileEvent
which indicates that a new object file has
been loaded by GDB. gdb.NewObjFileEvent
has one attribute:
A reference to the object file (gdb.Objfile
) which has been loaded.
See Objfiles In Python, for details of the gdb.Objfile
object.
events.clear_objfiles
Emits gdb.ClearObjFilesEvent
which indicates that the list of object
files for a program space has been reset.
gdb.ClearObjFilesEvent
has one attribute:
A reference to the program space (gdb.Progspace
) whose objfile list has
been cleared. See Progspaces In Python.
events.inferior_call_pre
Emits gdb.InferiorCallPreEvent
which indicates that a function in
the inferior is about to be called.
events.inferior_call_post
Emits gdb.InferiorCallPostEvent
which indicates that a function in
the inferior has returned.
events.memory_changed
Emits gdb.MemoryChangedEvent
which indicates that the memory of the
inferior has been modified by the GDB user, for instance via a
command like set *addr = value
. The event has the following
attributes:
events.register_changed
Emits gdb.RegisterChangedEvent
which indicates that a register in the
inferior has been modified by the GDB user.
events.breakpoint_created
This is emitted when a new breakpoint has been created. The argument
that is passed is the new gdb.Breakpoint
object.
events.breakpoint_modified
This is emitted when a breakpoint has been modified in some way. The
argument that is passed is the new gdb.Breakpoint
object.
events.breakpoint_deleted
This is emitted when a breakpoint has been deleted. The argument that
is passed is the gdb.Breakpoint
object. When this event is
emitted, the gdb.Breakpoint
object will already be in its
invalid state; that is, the is_valid
method will return
False
.
events.before_prompt
This event carries no payload. It is emitted each time GDB presents a prompt to the user.
events.new_inferior
This is emitted when a new inferior is created. Note that the inferior is not necessarily running; in fact, it may not even have an associated executable.
The event is of type gdb.NewInferiorEvent
. This has a single
attribute:
events.inferior_deleted
This is emitted when an inferior has been deleted. Note that this is
not the same as process exit; it is notified when the inferior itself
is removed, say via remove-inferiors
.
The event is of type gdb.InferiorDeletedEvent
. This has a single
attribute:
events.new_thread
This is emitted when GDB notices a new thread. The event is of
type gdb.NewThreadEvent
, which extends gdb.ThreadEvent
.
This has a single attribute:
Next: Threads In Python, Previous: Inferiors In Python, Up: Python API [Contents][Index]