GDB now supports the AArch64 Scalable Matrix Extension 2
(SME2), which includes a new 512 bit lookup table register
named ZT0.
GDB now supports the AArch64 Scalable Matrix Extension (SME),
which includes a new matrix register named ZA, a new thread
register TPIDR2 and a new vector length register SVG
(streaming vector granule). GDB also supports tracking ZA
state across signal frames. Some features are still under
development or are dependent on ABI specs that are still in
alpha stage. For example, manual function calls with ZA state
don't have any special handling, and tracking of SVG changes
based on DWARF information is still not implemented, but there
are plans to do so in the future.
GDB now recognizes the NO_COLOR environment variable and
disables styling according to the spec. See
https://no-color.org/. Styling can be re-enabled with
'set style enabled on'.
The AArch64 'org.gnu.gdb.aarch64.pauth' Pointer Authentication
feature string has been deprecated in favor of the
'org.gnu.gdb.aarch64.pauth_v2' feature string.
GDB now has some support for integer types larger than 64 bits.
Multi-target feature configuration.
GDB now supports the individual configuration of remote
targets' feature sets. Based on the current selection of a
target, the commands 'set remote <name>-packet (on|off|auto)'
and 'show remote <name>-packet' can be used to configure a
target's feature packet and to display its configuration,
respectively.
GDB has initial built-in support for the Debugger Adapter
Protocol.
For the break command, multiple uses of the 'thread' or 'task'
keywords will now give an error instead of just using the
thread or task id from the last instance of the keyword. E.g.:
break foo thread 1 thread 2
will now give an error rather than using 'thread 2'.
For the watch command, multiple uses of the 'task' keyword will
now give an error instead of just using the task id from the
last instance of the keyword. E.g.:
watch my_var task 1 task 2
will now give an error rather than using 'task 2'. The
'thread' keyword already gave an error when used multiple times
with the watch command, this remains unchanged.
The 'set print elements' setting now helps when printing large
arrays. If an array would otherwise exceed max-value-size, but
'print elements' is set such that the size of elements to print
is less than or equal to 'max-value-size', GDB will now still
print the array, however only 'max-value-size' worth of data
will be added into the value history.
For both the break and watch commands, it is now invalid to use
both the 'thread' and 'task' keywords within the same command.
For example the following commnds will now give an error:
break foo thread 1 task 1
watch var thread 2 task 3
The printf command now accepts a '%V' output format which will
format an expression just as the 'print' command would. Print
options can be placed withing '[...]' after the '%V' to modify
how the value is printed. E.g:
printf '%V', somearray
printf '%V[-array-indexes on]', somearray
will print the array without, or with array indexes included,
just as the array would be printed by the 'print' command.
This functionality is also available for dprintf when
dprintf-style is 'gdb'.
When the printf command requires a string to be fetched from
the inferior, GDB now uses the existing 'max-value-size'
setting to the limit the memory allocated within GDB. The
default 'max-value-size' is 64k. To print longer strings you
should increase 'max-value-size'.
The Ada 2022 EnumRep and EnumVal attributes are now
supported.
The Ada 2022 target name symbol ('@') is now supported by the
Ada expression parser.
The 'list' command now accepts '.' as an argument, which tells
GDB to print the location around the point of execution within
the current frame. If the inferior hasn't started yet, the
command will print around the beginning of the 'main' function.
Using the 'list' command with no arguments in a situation where
the command would attempt to list past the end of the file now
warns the user that the end of file has been reached, refers
the user to the newly added '.' argument
Breakpoints can now be inferior-specific. This is similar to
the existing thread-specific breakpoint support. Breakpoint
conditions can include the 'inferior' keyword followed by an
inferior id (as displayed in the 'info inferiors' output).
It is invalid to use the 'inferior' keyword with either the
'thread' or 'task' keywords when creating a breakpoint.
New convenience function '$shell', to execute a shell command
and return the result. This lets you run shell commands in
expressions. Some examples:
(gdb) p $shell('true')
$1 = 0
(gdb) p $shell('false')
$2 = 1
(gdb) break func if $shell('some command') == 0
New commands:
set debug breakpoint on|off
show debug breakpoint
Print additional debug messages about breakpoint insertion
and removal.
maintenance print record-instruction [ N ]
Print the recorded information for a given instruction. If N
is not given prints how GDB would undo the last instruction
executed. If N is negative, prints how GDB would undo the
N-th previous instruction, and if N is positive, it prints
how GDB will redo the N-th following instruction.
maintenance info frame-unwinders
List the frame unwinders currently in effect, starting with
the highest priority.
maintenance wait-for-index-cache
Wait until all pending writes to the index cache have
completed.
set always-read-ctf on|off
show always-read-ctf
When off, CTF is only read if DWARF is not present. When on,
CTF is read regardless of whether DWARF is present. Off by
default.
info main
Get main symbol to identify entry point into program.
set tui mouse-events [on|off]
show tui mouse-events
When on (default), mouse clicks control the TUI and can be
accessed by Python extensions. When off, mouse clicks are
handled by the terminal, enabling terminal-native text
selection.
MI changes:
MI version 1 has been removed.
mi now reports 'no-history' as a stop reason when hitting the
end of the reverse execution history.
When creating a thread-specific breakpoint using the '-p'
option, the -break-insert command would report the 'thread'
field twice in the reply. The content of both fields was
always identical. This has now been fixed; the 'thread'
field will be reported just once for thread-specific
breakpoints, or not at all for breakpoints without a thread
restriction. The same is also true for the 'task' field of
an Ada task-specific breakpoint.
It is no longer possible to create a thread-specific
breakpoint for a thread that doesn't exist using
'-break-insert -p ID'. Creating breakpoints for
non-existent threads is not allowed when using the CLI, that
the MI allowed it was a long standing bug, which has now
been fixed.
The '--simple-values' argument to the
'-stack-list-arguments','-stack-list-locals',
'-stack-list-variables', and '-var-list-children' commands now
takes reference types into account: that is, a value is now
considered simple if it is neither an array, structure, or
union, nor a reference to an array, structure, or union.
(Previously all references were considered simple.) Support
for this feature can be verified by using the
'-list-features' command, which should contain
'simple-values-ref-types'.
The -break-insert command now accepts a '-g thread-group-id'
option to allow for the creation of inferior-specific
breakpoints.
The bkpt tuple, which appears in breakpoint-created
notifications, and in the result of the -break-insert
command can now include an optional 'inferior' field for both
the main breakpoint, and each location, when the breakpoint
is inferior-specific.
Python API:
gdb.ThreadExitedEvent added. Emits a ThreadEvent.
The gdb.unwinder.Unwinder.name attribute is now read-only.
The name argument passed to gdb.unwinder.Unwinder.init
must now be of type 'str' otherwise a TypeError will be
raised.
The gdb.unwinder.Unwinder.enabled attribute can now only
accept values of type 'bool'. Changing this attribute will
now invalidate GDB's frame-cache, which means GDB will need
to rebuild its frame-cache when next required - either with,
or without the particular unwinder, depending on how
'enabled' was changed.
New methods added to the gdb.PendingFrame class. These
methods have the same behaviour as the corresponding
methods on gdb.Frame. The new methods are:
gdb.PendingFrame.name: Return the name for the frame's
function, or None.
gdb.PendingFrame.isvalid: Return True if the pending
frame object is valid.
gdb.PendingFrame.pc: Return the $pc register value for
this frame.
gdb.PendingFrame.language: Return a string containing the
language for this frame, or None.
gdb.PendingFrame.findsal: Return a gdb.Symtabandline
object for the current location within the pending frame,
or None.
gdb.PendingFrame.block: Return a gdb.Block for the current
pending frame, or None.
gdb.PendingFrame.function: Return a gdb.Symbol for the
current pending frame, or None.
The frame-id passed to gdb.PendingFrame.createunwindinfo
can now use either an integer or a gdb.Value object for each
of its 'sp', 'pc', and 'special' attributes.
A new class gdb.unwinder.FrameId has been added. Instances
of this class are constructed with 'sp' (stack-pointer) and
'pc' (program-counter) values, and can be used as the
frame-id when calling gdb.PendingFrame.createunwindinfo.
It is now no longer possible to sub-class the
gdb.disassembler.DisassemblerResult type.
The Disassembler API from the gdb.disassembler module has
been extended to include styling support:
The DisassemblerResult class can now be initialized with a
list of parts. Each part represents part of the
disassembled instruction along with the associated style
information. This list of parts can be accessed with the
new DisassemblerResult.parts property.
New constants gdb.disassembler.STYLE_* representing all the
different styles part of an instruction might have.
New methods DisassembleInfo.textpart and
DisassembleInfo.addresspart which are used to create the
new styled parts of a disassembled instruction.
Changes are backwards compatible, the older API can still
be used to disassemble instructions without styling.
New function gdb.execute_mi(COMMAND, [ARG]...), that invokes
a GDB/MI command and returns the output as a Python
dictionary.
New function gdb.block_signals(). This returns a context
manager that blocks any signals that GDB needs to handle
itself.
New class gdb.Thread. This is a subclass of threading.Thread
that calls gdb.block_signals in its 'start' method.
gdb.parseandeval now has a new 'global_context' parameter.
This can be used to request that the parse only examine
global symbols.
gdb.Inferior now has a new 'arguments' attribute. This holds
the command-line arguments to the inferior, if known.
gdb.Inferior now has a new 'main_name' attribute. This holds
the name of the inferior's 'main', if known.
gdb.Inferior now has new methods 'clearenv', 'setenv', and
'unset_env'. These can be used to modify the inferior's
environment before it is started.
gdb.Value now has the 'assign' method.
gdb.Value now has the 'to_array' method. This converts an
array-like Value to an array.
gdb.Progspace now has the new method 'objfileforaddress'.
This returns the gdb.Objfile, if any, that covers a given
address.
gdb.Breakpoint now has an 'inferior' attribute. If the
Breakpoint object is inferior specific then this attribute
holds the inferior-id (an integer). If the Breakpoint
object is not inferior specific, then this field contains
None. This field can be written too.
gdb.Type now has the 'isarraylike' and 'isstringlike'
methods. These reflect GDB's internal idea of whether a
type might be array- or string-like, even if they do not
have the corresponding type code.
gdb.ValuePrinter is a new class that can be used as the base
class for the result of applying a pretty-printer. As a
base class, it signals to gdb that the printer may implement
new pretty-printer methods.
New attribute Progspace.symbol_file. This attribute holds
the gdb.Objfile that corresponds to Progspace.filename (when
Progspace.filename is not None), otherwise, this attribute is
itself None.
New attribute Progspace.executable_filename. This attribute
holds a string containing a file name set by the 'exec-file'
or 'file' commands, or None if no executable file is set.
This isn't the exact string passed by the user to these
commands; the file name will have been partially resolved to
an absolute file name.
A new executablechanged event registry is available. This
event emits ExecutableChangedEvent objects, which have
'progspace' (a gdb.Progspace) and 'reload' (a Boolean)
attributes. This event is emitted when
gdb.Progspace.executablefilename changes.
New event registries gdb.events.newprogspace and
gdb.events.freeprogspace, these emit NewProgspaceEvent and
FreeProgspaceEvent event types respectively. Both of these
event types have a single 'progspace' attribute, which is
the gdb.Progspace that is either being added to GDB, or
removed from GDB.
gdb.LazyString now implements the str method.
New method gdb.Frame.static_link that returns the outer
frame of a nested function frame.