10.9. Convenience variables
gdb provides convenience variables that you can use within
gdb to hold on to a value and refer to it later. These variables
exist entirely within gdb; they are not part of your program, and
setting a convenience variable has no direct effect on further execution
of your program. That is why you can use them freely.
Convenience variables are prefixed with $. Any name preceded by
$ can be used for a convenience variable, unless it is one of
the predefined machine-specific register names (refer to Section 10.10 Registers).
(Value history references, in contrast, are numbers preceded
by $.
Refer to Section 10.8 Value history.)
You can save a value in a convenience variable with an assignment
expression, just as you would set a variable in your program.
For example:
would save in $foo the value contained in the object pointed to by
object_ptr.
Using a convenience variable for the first time creates it, but its
value is void until you assign a new value. You can alter the
value with another assignment at any time.
Convenience variables have no fixed types. You can assign a convenience
variable any type of value, including structures and arrays, even if
that variable already has a value of a different type. The convenience
variable, when used as an expression, has the type of its current value.
- show convenience
Print a list of convenience variables used so far, and their values.
Abbreviated show conv.
One of the ways to use a convenience variable is as a counter to be
incremented or a pointer to be advanced. For example, to print
a field from successive elements of an array of structures:
set $i = 0
print bar[$i++]->contents |
Repeat that command by typing [RET].
Some convenience variables are created automatically by gdb and given
values likely to be useful.
- $_
The variable $_ is automatically set by the x command to
the last address examined (refer to Section 10.5 Examining memory). Other
commands which provide a default address for x to examine also
set $_ to that address; these commands include info line
and info breakpoint. The type of $_ is void *
except when set by the x command, in which case it is a pointer
to the type of $__.
- $__
The variable $__ is automatically set by the x command
to the value found in the last address examined. Its type is chosen
to match the format in which the data was printed.
- $_exitcode
The variable $_exitcode is automatically set to the exit code when
the program being debugged terminates.
On HP-UX systems, if you refer to a function or variable name that
begins with a dollar sign, gdb searches for a user or system
name first, before it searches for a convenience variable.