.System version of GDB rebased to version 14.2 and GDB removed from GCC Toolset
GDB has been updated to version 14.2. Starting with RHEL 9.5, GDB is transitioning into a rolling Application Stream with its system version rebased in minor releases of RHEL. Therefore, GDB is not included in GCC Toolset 14 in RHEL 9.
The following paragraphs list notable changes in GDB 14.2 since GDB 12.1.
General:
* The `info breakpoints` command now displays enabled breakpoint locations of disabled breakpoints as in the `y-` state.
* Added support for debug sections compressed with Zstandard (`ELFCOMPRESS_ZSTD`) for ELF.
* The Text User Interface (TUI) no longer styles the source and assembly code highlighted by the current position indicator by default. To re-enable styling, use the new command `set style tui-current-position`.
* A new `$_inferior_thread_count` convenience variable contains the number of live threads in the current inferior.
* For breakpoints with multiple code locations, GDB now prints the code location using the `<breakpoint_number>.<location_number>` syntax.
* When a breakpoint is hit, GDB now sets the `$_hit_bpnum` and `$_hit_locno` convenience variables to the hit breakpoint number and code location number. You can now disable the last hit breakpoint by using the `disable $_hit_bpnum` command, or disable only the specific breakpoint code location by using the `disable $_hit_bpnum.$_hit_locno` command.
* Added support for the link:
https://no-color.org/[`NO_COLOR`] environment variable.
* Added support for integer types larger than 64 bits.
* You can use new commands for multi-target feature configuration to configure remote target feature sets (see the `set remote <name>-packet` and `show remote <name>-packet` in Commands).
* Added support for the Debugger Adapter Protocol.
* You can now use the new `inferior` keyword to make breakpoints inferior-specific (see `break` or `watch` in Commands).
* You can now use the new `$_shell()` convenience function to execute a shell command
during expression evaluation.
Changes to existing commands:
* `break`, `watch`
** Using the `thread` or `task` keywords multiple times with the `break` and `watch` commands now results in an error instead of using the thread or task ID of the last instance of the keyword.
** Using more than one of the `thread`, `task`, and `inferior` keywords in the same `break` or `watch` command is now invalid.
* `printf`, `dprintf`
** The `printf` and `dprintf` commands now accept the `%V` output format, which formats an expression the same way as the `print` command. You can also modify the output format by using additional print options in brackets `[...]` following the command, for example: `printf "%V[-array-indexes on]", <array>`.
* `list`
** You can now use the `.` argument to print the location around the point of execution in the current frame, or around the beginning of the `main()` function if the inferior has not started yet.
** Attempting to list more source lines in a file than are available now issues a warning, referring the user to the `.` argument.
* `document user-defined`
** It is now possible to document user-defined aliases.
New commands:
* `set print nibbles [on|off]` (default: `off`), `show print nibbles` - controls whether the `print/t` command displays binary values in groups of four bits (nibbles).
* `set debug infcall [on|off]` (default: `off`), `show debug infcall` - prints additional debug messages about inferior function calls.
* `set debug solib [on|off]` (default: `off`), `show debug solib` - prints additional debug messages about shared library handling.
* `set print characters <LIMIT>`, `show print characters`, `print -characters <LIMIT>` - controls how many characters of a string are printed.
* `set debug breakpoint [on|off]` (default: `off`), `show debug breakpoint` - prints additional debug messages about breakpoint insertion and removal.
* `maintenance print record-instruction [ N ]` - prints the recorded information for a given instruction.
* `maintenance info frame-unwinders` - lists the frame unwinders currently in effect in the order of priority (highest first).
* `maintenance wait-for-index-cache` - waits until all pending writes to the index cache are completed.
* `info main` - prints information on the main symbol to identify an entry point into the program.
* `set tui mouse-events [on|off]` (default: `on`), `show tui mouse-events` - controls whether mouse click events
are sent to the TUI and Python extensions (when `on`), or the
terminal (when `off`).
Machine Interface (MI) changes:
* MI version 1 has been removed.
* MI now reports `no-history` when reverse execution history is exhausted.
* The `thread` and `task` breakpoint fields are no longer reported twice in the output of the `-break-insert` command.
* Thread-specific breakpoints can no longer be created on non-existent thread IDs.
* The `--simple-values` argument to the `-stack-list-arguments`, `-stack-list-locals`, `-stack-list-variables`, and `-var-list-children` commands now considers reference types as simple if the target is simple.
* The `-break-insert` command now accepts a new `-g thread-group-id` option to create
inferior-specific breakpoints.
* Breakpoint-created notifications and the output of the `-break-insert` command can now
include an optional `inferior` field for the main breakpoint and each breakpoint location.
* The async record stating the `breakpoint-hit` stopped reason now contains an optional field `locno` giving the code location number in case of a multi-location breakpoint.
Changes in the GDB Python API:
* Events
** A new `gdb.ThreadExitedEvent` event.
** A new `gdb.executable_changed` event registry, which emits the `ExecutableChangedEvent` objects that have `progspace` and `reload` attributes.
** New `gdb.events.new_progspace` and `gdb.events.free_progspace` event registries, which emit the `NewProgpspaceEvent` and `FreeProgspaceEvent` event types. Both of these event types have a single attribute `progspace` to specify the `gdb.Progspace` program space that is being added to or removed from GDB.
* The `gdb.unwinder.Unwinder` class
** The `name` attribute is now read-only.
** The name argument of the `pass:[__init__]` function must be of the `str` type, otherwise a `TypeError` is raised.
** The `enabled` attribute now accepts only the `bool` type.
* The `gdb.PendingFrame` class
** New methods: `name`, `is_valid`, `pc`, `language`, `find_sal`, `block`, and `function`, which mirror similar methods of the `gdb.Frame` class.
** The `frame-id` argument of the `create_unwind_info` function can now be either
an integer or a `gdb.Value` object for the `pc`, `sp`, and `special` attributes.
* A new `gdb.unwinder.FrameId` class, which can be passed to the `gdb.PendingFrame.create_unwind_info` function.
* The `gdb.disassembler.DisassemblerResult` class can no longer be sub-classed.
* The `gdb.disassembler` module now includes styling support.
* A new `gdb.execute_mi(COMMAND, [ARG]...)` function, which invokes a GDB/MI
command and returns result as a Python dictionary.
* A new `gdb.block_signals()` function, which returns a context manager that
blocks any signals that GDB needs to handle.
* A new `gdb.Thread` subclass of the `threading.Thread` class, which calls the `gdb.block_signals` function in its `start` method.
* The `gdb.parse_and_eval` function has a new `global_context` parameter to restrict
parsing on global symbols.
* The `gdb.Inferior` class
** A new `arguments` attribute, which holds the command-line arguments to the inferior, if known.
** A new `main_name` attribute, which holds the name of the inferior's `main` function, if known.
** New `clear_env`, `set_env`, and `unset_env` methods, which can modify the inferior's environment before it is started.
* The `gdb.Value` class
** A new `assign` method to assign a value of an object.
** A new `to_array` method to convert an array-like value to an array.
* The `gdb.Progspace` class
** A new `objfile_for_address` method, which returns the `gdb.Objfile` object that covers a given address (if exists).
** A new `symbol_file` attribute holding the `gdb.Objfile` object that corresponds to the `Progspace.filename` variable (or `None` if the filename is `None`).
** A new `executable_filename` attribute, which holds the string with a filename that is set
by the `exec-file` or `file` commands, or `None` if no executable file is set.
* The `gdb.Breakpoint` class
** A new `inferior` attribute, which contains the inferior ID (an integer) for breakpoints that are inferior-specific, or `None` if no such breakpoints are set.
* The `gdb.Type` class
** New `is_array_like` and `is_string_like` methods, which reflect whether a type might be array- or string-like regardless of the type's actual type code.
* A new `gdb.ValuePrinter` class, which can be used as the base class for the result of applying a pretty-printer.
* A newly implemented `pass:[gdb.LazyString.__str__]` method.
* The `gdb.Frame` class
** A new `static_link` method, which returns the outer frame of a nested function frame.
** A new `gdb.Frame.language` method that returns the name of the frame's language.
* The `gdb.Command` class
** GDB now reformats the doc string for the `gdb.Command` class and the `gdb.Parameter` sub-classes to remove unnecessary leading whitespace from each line before using the string as the help output.
* The `gdb.Objfile` class
** A new `is_file` attribute.
* A new `gdb.format_address(ADDRESS, PROGSPACE, ARCHITECTURE)` function, which uses the same format as when printing address, symbol, and offset information from the disassembler.
* A new `gdb.current_language` function, which returns the name of the current language.
* A new Python API for wrapping GDB's disassembler, including `gdb.disassembler.register_disassembler(DISASSEMBLER, ARCH)`, `gdb.disassembler.Disassembler`, `gdb.disassembler.DisassembleInfo`, `gdb.disassembler.builtin_disassemble(INFO, MEMORY_SOURCE)`, and `gdb.disassembler.DisassemblerResult`.
* A new `gdb.print_options` function, which returns a dictionary of the prevailing print options, in the form accepted by the `gdb.Value.format_string` function.
* The `gdb.Value.format_string` function
** `gdb.Value.format_string` now uses the format provided by the `print` command if it is called during a `print` or other similar operation.
** `gdb.Value.format_string` now accepts the `summary` keyword.
* A new `gdb.BreakpointLocation` Python type.
* The `gdb.register_window_type` method now restricts the set of acceptable window names.
Architecture-specific changes:
* AMD and Intel 64-bit architectures
** Added support for disassembler styling using the `libopcodes` library, which is now used by default. You can modify how the disassembler output is styled by using the `set style disassembler *` commands. To use the Python Pygments styling instead, use the new `maintenance set libopcodes-styling off` command.
* The 64-bit ARM architecture
** Added support for dumping memory tag data for the Memory Tagging Extension (MTE).
** Added support for the Scalable Matrix Extension 1 and 2 (SME/SME2). Some features are still considered experimental or alpha, for example, manual function calls with ZA state or tracking Scalable Vector Graphics (SVG) changes based on DWARF.
** Added support for Thread Local Storage (TLS) variables.
** Added support for hardware watchpoints.
* The 64-bit IBM Z architecture
** Record and replay support for the new `arch14` instructions on IBM Z targets, except for the specialized-function-assist instruction `NNPA`.
* IBM Power Systems, Little Endian
** Added base enablement support for POWER11.
For more details about rolling Application Streams, see the link:
https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle[Red Hat Enterprise Linux Application Streams Life Cycle].