What has changed in GDB?
(Organized release by release)
-*** Changes since GDB 12
+*** Changes since GDB 13
+
+* 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.
+
+* Removed targets and native configurations
+
+ GDB no longer supports AIX 4.x, AIX 5.x and AIX 6.x. The minimum supported
+ AIX version is now AIX 7.1.
+
+* 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.
+
+ The individual packet sizes can be configured and shown using the commands
+ ** 'set remote memory-read-packet-size (number of bytes|fixed|limit)'
+ ** 'set remote memory-write-packet-size (number of bytes|fixed|limit)'
+ ** 'show remote memory-read-packet-size'
+ ** 'show remote memory-write-packet-size'.
+
+ The configuration of the packet itself, as well as the size of a memory-read
+ or memory-write packet applies to the currently selected target (if
+ available). If no target is selected, it applies to future remote
+ connections. Similarly, the show commands print the configuration of the
+ currently selected target. If no remote target is selected, the default
+ configuration for future connections is shown.
+
+* MI version 1 has been removed.
+
+* GDB has initial built-in support for the Debugger Adapter Protocol.
+ This support requires that GDB be built with Python scripting
+ enabled.
+
+* 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", some_array
+ printf "%V[-array-indexes on]", some_array
+ 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 Enum_Rep and Enum_Val 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 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.
+
+* 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
+
+* MI changes
+
+** 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.is_valid: 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.find_sal: Return a gdb.Symtab_and_line
+ 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.create_unwind_info 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.create_unwind_info.
+
+ ** 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.text_part and
+ DisassembleInfo.address_part 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.parse_and_eval 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 "clear_env", "set_env", 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 "objfile_for_address". 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 "is_array_like" and "is_string_like"
+ 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 executable_changed 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.executable_filename changes.
+
+ ** New event registries gdb.events.new_progspace and
+ gdb.events.free_progspace, 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.
+
+*** Changes in GDB 13
+
+* MI version 1 is deprecated, and will be removed in GDB 14.
+
+* GDB now supports dumping memory tag data for AArch64 MTE. It also supports
+ reading memory tag data for AArch64 MTE from core files generated by
+ the gcore command or the Linux kernel.
+
+ When a process uses memory-mapped pages protected by memory tags (for
+ example, AArch64 MTE), this additional information will be recorded in
+ the core file in the event of a crash or if GDB generates a core file
+ from the current process state. GDB will show this additional information
+ automatically, or through one of the memory-tag subcommands.
* "info breakpoints" now displays enabled breakpoint locations of
disabled breakpoints as in the "y-" state. For example:
Python Pygments is still used. For supported targets, libopcodes
styling is used by default.
+* The Windows native target now supports target async.
+
+* gdb now supports zstd compressed debug sections (ELFCOMPRESS_ZSTD) for ELF.
+
+* The format of 'disassemble /r' and 'record instruction-history /r'
+ has changed. The instruction bytes could now be grouped together,
+ and displayed in the endianness of the instruction. This is the
+ same layout as used by GNU objdump when disassembling.
+
+ There is now 'disassemble /b' and 'record instruction-history /b'
+ which will always display the instructions bytes one at a time in
+ memory order, that is, the byte at the lowest address first.
+
+ For both /r and /b GDB is now better at using whitespace in order to
+ align the disassembled instruction text.
+
+* The TUI no longer styles the source and assembly code highlighted by
+ the current position indicator by default. You can however
+ re-enable styling using the new "set style tui-current-position"
+ command.
+
+* New convenience variable $_inferior_thread_count contains the number
+ of live threads in the current inferior.
+
+* When a breakpoint with multiple code locations is hit, GDB now prints
+ the code location using the syntax <breakpoint_number>.<location_number>
+ such as in:
+ Thread 1 "zeoes" hit Breakpoint 2.3, some_func () at zeoes.c:8
+
+* When a breakpoint is hit, GDB now sets the convenience variables $_hit_bpnum
+ and $_hit_locno to the hit breakpoint number and code location number.
+ This allows to disable the last hit breakpoint using
+ (gdb) disable $_hit_bpnum
+ or disable only the specific breakpoint code location using
+ (gdb) disable $_hit_bpnum.$_hit_locno
+ These commands can be used inside the command list of a breakpoint to
+ automatically disable the just encountered breakpoint (or the just
+ encountered specific breakpoint code location).
+ When a breakpoint has only one location, $_hit_locno is set to 1 so that
+ (gdb) disable $_hit_bpnum.$_hit_locno
+ and
+ (gdb) disable $_hit_bpnum
+ are both disabling the breakpoint.
+
* New commands
maintenance set ignore-prologue-end-flag on|off
The 'disassembler address' and 'disassembler symbol' styles are
aliases for the 'address' and 'function' styles respectively.
+maintenance print frame-id [ LEVEL ]
+ Print GDB's internal frame-id for the frame at LEVEL. If LEVEL is
+ not given, then print the frame-id for the currently selected frame.
+
+set debug infcall on|off
+show debug infcall
+ Print additional debug messages about inferior function calls.
+
+set debug solib on|off
+show debug solib
+ Print additional debug messages about shared library handling.
+
+set style tui-current-position [on|off]
+ Whether to style the source and assembly code highlighted by the
+ TUI's current position indicator. The default is off.
+
+set print characters LIMIT
+show print characters
+ This new setting is like 'set print elements', but controls how many
+ characters of a string are printed. This functionality used to be
+ covered by 'set print elements', but it can be controlled separately
+ now. LIMIT can be set to a numerical value to request that particular
+ character count, to 'unlimited' to print all characters of a string,
+ or to 'elements', which is also the default, to follow the setting of
+ 'set print elements' as it used to be.
+
+print -characters LIMIT
+ This new option to the 'print' command has the same effect as a temporary
+ use of 'set print characters'.
+
* Changed commands
+document user-defined
+ It is now possible to document user-defined aliases.
+ When a user-defined alias is documented, the help and apropos commands
+ use the provided documentation instead of the documentation of the
+ aliased command.
+ Documenting a user-defined alias is particularly useful when the alias
+ is a set of nested 'with' commands to avoid showing the help of
+ the with command for an alias that will in fact launch the
+ last command given in the nested commands.
+
maintenance info line-table
Add a PROLOGUE-END column to the output which indicates that an
entry corresponds to an address where a breakpoint should be placed
to be at the first instruction past a function's prologue.
+* Removed commands
+
+set debug aix-solib on|off
+show debug aix-solib
+set debug solib-frv on|off
+show debug solib-frv
+ Removed in favor of "set/show debug solib".
+
+maintenance info program-spaces
+ This command now includes a 'Core File' column which indicates the
+ name of the core file associated with each program space.
+
* New targets
GNU/Linux/LoongArch (gdbserver) loongarch*-*-linux*
+GNU/Linux/CSKY (gdbserver) csky*-*linux*
+
+AMDGPU amdgcn-*-*
+
+* MI changes
+
+ ** The async record stating the stopped reason 'breakpoint-hit' now
+ contains an optional field locno giving the code location number
+ when the breakpoint has multiple code locations.
+
* Python API
** GDB will now reformat the doc string for gdb.Command and
** gdb.Objfile now has an attribute named "is_file". This is True
if the objfile comes from a file, and False otherwise.
+ ** New function gdb.print_options that returns a dictionary of the
+ prevailing print options, in the form accepted by
+ gdb.Value.format_string.
+
+ ** gdb.Value.format_string now uses the format provided by 'print',
+ if it is called during a 'print' or other similar operation.
+
+ ** gdb.Value.format_string now accepts the 'summary' keyword. This
+ can be used to request a shorter representation of a value, the
+ way that 'set print frame-arguments scalars' does.
+
+ ** New Python type gdb.BreakpointLocation.
+ The new attribute 'locations' of gdb.Breakpoint returns a list of
+ gdb.BreakpointLocation objects specifying the locations where the
+ breakpoint is inserted into the debuggee.
+
+ ** The gdb.register_window_type method now restricts the set of
+ acceptable window names. The first character of a window's name
+ must start with a character in the set [a-zA-Z], every subsequent
+ character of a window's name must be in the set [-_.a-zA-Z0-9].
+
* New features in the GDB remote stub, GDBserver
** GDBserver is now supported on LoongArch GNU/Linux.
+
+ ** GDBserver is now supported on CSKY GNU/Linux.
* LoongArch floating-point support
GDB now supports floating-point on LoongArch GNU/Linux.
+* AMD GPU ROCm debugging support
+
+GDB now supports debugging programs offloaded to AMD GPUs using the ROCm
+platform.
+
*** Changes in GDB 12
* DBX mode is deprecated, and will be removed in GDB 13
option, which causes the new inferior to start without a
connection.
+ ** The default version of the MI interpreter is now 4 (-i=mi4).
+
+ ** The "script" field in breakpoint output (which is syntactically
+ incorrect in MI 3 and below) has changed in MI 4 to become a list.
+ This affects the following commands and events:
+
+ - -break-insert
+ - -break-info
+ - =breakpoint-created
+ - =breakpoint-modified
+
+ The -fix-breakpoint-script-output command can be used to enable
+ this behavior with previous MI versions.
+
* New targets
GNU/Linux/LoongArch loongarch*-*-linux*