diff options
author | Andrew Burgess <aburgess@redhat.com> | 2023-08-28 16:22:36 +0100 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2023-09-28 15:33:13 +0100 |
commit | 42f297ad36a13a7774fede3a8119e6c56ef6d318 (patch) | |
tree | 9d5ef57d0ec2eb14ce05975b670e8fce7628c99e /gdb/doc | |
parent | 063453b199e1291a03ee81c3422c31d7cca60af6 (diff) | |
download | binutils-42f297ad36a13a7774fede3a8119e6c56ef6d318.zip binutils-42f297ad36a13a7774fede3a8119e6c56ef6d318.tar.gz binutils-42f297ad36a13a7774fede3a8119e6c56ef6d318.tar.bz2 |
gdb/python: make the executable_changed event available from Python
This commit makes the executable_changed observable available through
the Python API as an event. There's nothing particularly interesting
going on here, it just follows the same pattern as many of the other
Python events we support.
The new event registry is called events.executable_changed, and this
emits an ExecutableChangedEvent object which has two attributes, a
gdb.Progspace called 'progspace', this is the program space in which
the executable changed, and a Boolean called 'reload', which is True
if the same executable changed on disk and has been reloaded, or is
False when a new executable has been loaded.
One interesting thing did come up during testing though, you'll notice
the test contains a setup_kfail call. During testing I observed that
the executable_changed event would trigger twice when GDB restarted an
inferior. However, the ExecutableChangedEvent object is identical for
both calls, so the wrong information is never sent out, we just see
one too many events.
I tracked this down to how the reload_symbols function (symfile.c)
takes care to also reload the executable, however, I've split fixing
this into a separate commit, so see the next commit for details.
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/doc')
-rw-r--r-- | gdb/doc/python.texi | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 4c8bb12..0471e78 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -3929,6 +3929,39 @@ This is emitted when @value{GDBN} removes a connection The @code{gdb.TargetConnection} that is being removed. @end defvar +@item events.executable_changed +Emits @code{gdb.ExecutableChangedEvent} which indicates that the +@code{gdb.Progspace.executable_filename} has changed. + +This event is emitted when either the value of +@code{gdb.Progspace.executable_filename } has changed to name a +different file, or the executable file named by +@code{gdb.Progspace.executable_filename} has changed on disk, and +@value{GDBN} has therefore reloaded it. + +@defvar ExecutableChangedEvent.progspace +The @code{gdb.Progspace} in which the current executable has changed. +The file name of the updated executable will be visible in +@code{gdb.Progspace.executable_filename} (@pxref{Progspaces In Python}). +@end defvar +@defvar ExecutableChangedEvent.reload +This attribute will be @code{True} if the value of +@code{gdb.Progspace.executable_filename} didn't change, but the file +it names changed on disk instead, and @value{GDBN} reloaded it. + +When this attribute is @code{False}, the value in +@code{gdb.Progspace.executable_filename} was changed to name a +different file. +@end defvar + +Remember that @value{GDBN} tracks the executable file and the symbol +file separately, these are visible as +@code{gdb.Progspace.executable_filename} and +@code{gdb.Progspace.filename} respectively. When using the @kbd{file} +command, @value{GDBN} updates both of these fields, but the executable +file is updated first, so when this event is emitted, the executable +filename will have changed, but the symbol filename might still hold +its previous value. @end table @node Threads In Python |