1991-05-23 00:14:26 +00:00
|
|
|
_dnl__ Copyright (c) 1988 1989 1990 1991 Free Software Foundation, Inc.
|
|
|
|
_dnl__ This file is part of the source for the GDB manual.
|
1991-07-24 01:30:45 +00:00
|
|
|
@c M4 FRAGMENT: $Id$
|
1991-05-23 00:14:26 +00:00
|
|
|
@node Data, Symbols, Source, Top
|
|
|
|
@chapter Examining Data
|
|
|
|
|
|
|
|
@cindex printing data
|
|
|
|
@cindex examining data
|
|
|
|
@kindex print
|
|
|
|
@kindex inspect
|
|
|
|
@c "inspect" isn't quite a synonym if you're using Epoch, which we don't
|
|
|
|
@c document because it's nonstandard... Under Epoch it displays in a
|
|
|
|
@c different window or something like that.
|
|
|
|
The usual way to examine data in your program is with the @code{print}
|
|
|
|
command (abbreviated @code{p}), or its synonym @code{inspect}. It
|
|
|
|
evaluates and prints the value of any valid expression of the language
|
|
|
|
the program is written in (for now, C or C++). You type
|
|
|
|
|
|
|
|
@example
|
|
|
|
print @var{exp}
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
where @var{exp} is any valid expression (in the source language), and
|
|
|
|
the value of @var{exp} is printed in a format appropriate to its data
|
|
|
|
type.
|
|
|
|
|
|
|
|
A more low-level way of examining data is with the @code{x} command.
|
|
|
|
It examines data in memory at a specified address and prints it in a
|
|
|
|
specified format. @xref{Memory}.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Expressions:: Expressions
|
|
|
|
* Variables:: Program Variables
|
|
|
|
* Arrays:: Artificial Arrays
|
|
|
|
* Output formats:: Output formats
|
|
|
|
* Memory:: Examining Memory
|
|
|
|
* Auto Display:: Automatic Display
|
|
|
|
* Print Settings:: Print Settings
|
|
|
|
* Value History:: Value History
|
|
|
|
* Convenience Vars:: Convenience Variables
|
|
|
|
* Registers:: Registers
|
|
|
|
* Floating Point Hardware:: Floating Point Hardware
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Expressions, Variables, Data, Data
|
|
|
|
@section Expressions
|
|
|
|
|
|
|
|
@cindex expressions
|
|
|
|
@code{print} and many other _GDBN__ commands accept an expression and
|
|
|
|
compute its value. Any kind of constant, variable or operator defined
|
|
|
|
by the programming language you are using is legal in an expression in
|
|
|
|
_GDBN__. This includes conditional expressions, function calls, casts
|
|
|
|
and string constants. It unfortunately does not include symbols defined
|
|
|
|
by preprocessor @code{#define} commands, or C++ expressions involving
|
|
|
|
@samp{::}, the name resolution operator.
|
|
|
|
@c FIXME: actually C++ a::b works except in obscure circumstances where it
|
|
|
|
@c FIXME...can conflict with GDB's own name scope resolution.
|
|
|
|
|
|
|
|
Casts are supported in all languages, not just in C, because it is so
|
|
|
|
useful to cast a number into a pointer so as to examine a structure
|
|
|
|
at that address in memory.
|
|
|
|
|
|
|
|
_GDBN__ supports three kinds of operator in addition to those of programming
|
|
|
|
languages:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item @@
|
|
|
|
@samp{@@} is a binary operator for treating parts of memory as arrays.
|
|
|
|
@xref{Arrays}, for more information.
|
|
|
|
|
|
|
|
@item ::
|
|
|
|
@samp{::} allows you to specify a variable in terms of the file or
|
|
|
|
function where it is defined. @xref{Variables}.
|
|
|
|
|
|
|
|
@item @{@var{type}@} @var{addr}
|
|
|
|
Refers to an object of type @var{type} stored at address @var{addr} in
|
|
|
|
memory. @var{addr} may be any expression whose value is an integer or
|
|
|
|
pointer (but parentheses are required around binary operators, just as in
|
|
|
|
a cast). This construct is allowed regardless of what kind of data is
|
|
|
|
normally supposed to reside at @var{addr}.@refill
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@node Variables, Arrays, Expressions, Data
|
|
|
|
@section Program Variables
|
|
|
|
|
|
|
|
The most common kind of expression to use is the name of a variable
|
|
|
|
in your program.
|
|
|
|
|
|
|
|
Variables in expressions are understood in the selected stack frame
|
|
|
|
(@pxref{Selection}); they must either be global (or static) or be visible
|
|
|
|
according to the scope rules of the programming language from the point of
|
|
|
|
execution in that frame. This means that in the function
|
|
|
|
|
|
|
|
@example
|
|
|
|
foo (a)
|
|
|
|
int a;
|
|
|
|
@{
|
|
|
|
bar (a);
|
|
|
|
@{
|
|
|
|
int b = test ();
|
|
|
|
bar (b);
|
|
|
|
@}
|
|
|
|
@}
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
the variable @code{a} is usable whenever the program is executing
|
|
|
|
within the function @code{foo}, but the variable @code{b} is visible
|
|
|
|
only while the program is executing inside the block in which @code{b}
|
|
|
|
is declared.
|
|
|
|
|
|
|
|
@cindex variable name conflict
|
|
|
|
There is an exception: you can refer to a variable or function whose
|
|
|
|
scope is a single source file even if the current execution point is not
|
|
|
|
in this file. But it is possible to have more than one such variable or
|
|
|
|
function with the same name (in different source files). If that happens,
|
|
|
|
referring to that name has unpredictable effects. If you wish, you can
|
|
|
|
specify a variable in a particular file, using the colon-colon notation:
|
|
|
|
|
|
|
|
@cindex colon-colon
|
|
|
|
@kindex ::
|
|
|
|
@example
|
|
|
|
@var{file}::@var{variable}
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
Here @var{file} is the name of the source file whose variable you want.
|
|
|
|
|
|
|
|
@cindex C++ name resolution
|
|
|
|
This use of @samp{::} is very rarely in conflict with the very similar
|
|
|
|
use of the same notation in C++. _GDBN__ also supports use of the C++
|
|
|
|
name resolution operator in _GDBN__ expressions.
|
|
|
|
|
|
|
|
@node Arrays, Output formats, Variables, Data
|
|
|
|
@section Artificial Arrays
|
|
|
|
|
|
|
|
@cindex artificial array
|
|
|
|
@kindex @@
|
|
|
|
It is often useful to print out several successive objects of the
|
|
|
|
same type in memory; a section of an array, or an array of
|
|
|
|
dynamically determined size for which only a pointer exists in the
|
|
|
|
program.
|
|
|
|
|
|
|
|
This can be done by constructing an @dfn{artificial array} with the
|
|
|
|
binary operator @samp{@@}. The left operand of @samp{@@} should be
|
|
|
|
the first element of the desired array, as an individual object.
|
|
|
|
The right operand should be the desired length of the array. The result is
|
|
|
|
an array value whose elements are all of the type of the left argument.
|
|
|
|
The first element is actually the left argument; the second element
|
|
|
|
comes from bytes of memory immediately following those that hold the
|
|
|
|
first element, and so on. Here is an example. If a program says
|
|
|
|
|
|
|
|
@example
|
|
|
|
int *array = (int *) malloc (len * sizeof (int));
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
you can print the contents of @code{array} with
|
|
|
|
|
|
|
|
@example
|
|
|
|
p *array@@len
|
|
|
|
@end example
|
|
|
|
|
|
|
|
The left operand of @samp{@@} must reside in memory. Array values made
|
|
|
|
with @samp{@@} in this way behave just like other arrays in terms of
|
|
|
|
subscripting, and are coerced to pointers when used in expressions.
|
|
|
|
Artificial arrays most often appear in expressions via the value history
|
|
|
|
(@pxref{Value History}), after printing one out.)
|
|
|
|
|
|
|
|
@node Output formats, Memory, Arrays, Data
|
|
|
|
@section Output formats
|
|
|
|
|
|
|
|
@cindex formatted output
|
|
|
|
@cindex output formats
|
|
|
|
By default, _GDBN__ prints a value according to its data type. Sometimes
|
|
|
|
this is not what you want. For example, you might want to print a number
|
|
|
|
in hex, or a pointer in decimal. Or you might want to view data in memory
|
|
|
|
at a certain address as a character string or as an instruction. To do
|
|
|
|
these things, specify an @dfn{output format} when you print a value.
|
|
|
|
|
|
|
|
The simplest use of output formats is to say how to print a value
|
|
|
|
already computed. This is done by starting the arguments of the
|
|
|
|
@code{print} command with a slash and a format letter. The format
|
|
|
|
letters supported are:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item x
|
|
|
|
Regard the bits of the value as an integer, and print the integer in
|
|
|
|
hexadecimal.
|
|
|
|
|
|
|
|
@item d
|
|
|
|
Print as integer in signed decimal.
|
|
|
|
|
|
|
|
@item u
|
|
|
|
Print as integer in unsigned decimal.
|
|
|
|
|
|
|
|
@item o
|
|
|
|
Print as integer in octal.
|
|
|
|
|
|
|
|
@item t
|
|
|
|
Print as integer in binary. The letter @samp{t} stands for ``two''.
|
|
|
|
|
|
|
|
@item a
|
|
|
|
Print as an address, both absolute in hex and as an offset from the
|
|
|
|
nearest preceding symbol. This format can be used to discover where (in
|
|
|
|
what function) an unknown address is located:
|
|
|
|
@example
|
|
|
|
(_GDBP__) p/a 0x54320
|
|
|
|
_0__$3 = 0x54320 <_initialize_vx+396>_1__
|
|
|
|
@end example
|
|
|
|
|
|
|
|
|
|
|
|
@item c
|
|
|
|
Regard as an integer and print it as a character constant.
|
|
|
|
|
|
|
|
@item f
|
|
|
|
Regard the bits of the value as a floating point number and print
|
|
|
|
using typical floating point syntax.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
For example, to print the program counter in hex (@pxref{Registers}), type
|
|
|
|
|
|
|
|
@example
|
|
|
|
p/x $pc
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
Note that no space is required before the slash; this is because command
|
|
|
|
names in _GDBN__ cannot contain a slash.
|
|
|
|
|
|
|
|
To reprint the last value in the value history with a different format,
|
|
|
|
you can use the @code{print} command with just a format and no
|
|
|
|
expression. For example, @samp{p/x} reprints the last value in hex.
|
|
|
|
|
|
|
|
@node Memory, Auto Display, Output formats, Data
|
|
|
|
@section Examining Memory
|
|
|
|
|
|
|
|
@cindex examining memory
|
|
|
|
@table @code
|
|
|
|
@kindex x
|
|
|
|
@item x/@var{nfu} @var{expr}
|
|
|
|
The command @code{x} (for `examine') can be used to examine memory
|
|
|
|
without being constrained by your program's data types. You can specify
|
|
|
|
the unit size @var{u} of memory to inspect, and a repeat count @var{n} of how
|
|
|
|
many of those units to display. @code{x} understands the formats
|
|
|
|
@var{f} used by @code{print}; two additional formats, @samp{s} (string)
|
|
|
|
and @samp{i} (machine instruction) can be used without specifying a unit
|
|
|
|
size.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
For example, @samp{x/3uh 0x54320} is a request to display three halfwords
|
|
|
|
(@code{h}) of memory, formatted as unsigned decimal integers (@samp{u}),
|
|
|
|
starting at address @code{0x54320}. @samp{x/4xw $sp} prints the four
|
|
|
|
words (@samp{w}) of memory above the stack pointer (here, @samp{$sp};
|
|
|
|
@pxref{Registers}) in hexadecimal (@samp{x}).
|
|
|
|
|
|
|
|
Since the letters indicating unit sizes are all distinct from the
|
|
|
|
letters specifying output formats, you don't have to remember whether
|
|
|
|
unit size or format comes first; either order will work. The output
|
|
|
|
specifications @samp{4xw} and @samp{4wx} mean exactly the same thing.
|
|
|
|
|
|
|
|
After the format specification, you supply an expression for the address
|
|
|
|
where _GDBN__ is to begin reading from memory. The expression need not
|
|
|
|
have a pointer value (though it may); it is always interpreted as an
|
|
|
|
integer address of a byte of memory. @xref{Expressions} for more
|
|
|
|
information on expressions.
|
|
|
|
|
|
|
|
These are the memory units @var{u} you can specify with the @code{x}
|
|
|
|
command:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item b
|
|
|
|
Examine individual bytes.
|
|
|
|
|
|
|
|
@item h
|
|
|
|
Examine halfwords (two bytes each).
|
|
|
|
|
|
|
|
@item w
|
|
|
|
Examine words (four bytes each).
|
|
|
|
|
|
|
|
@cindex word
|
|
|
|
Many assemblers and cpu designers still use `word' for a 16-bit quantity,
|
|
|
|
as a holdover from specific predecessor machines of the 1970's that really
|
|
|
|
did use two-byte words. But more generally the term `word' has always
|
|
|
|
referred to the size of quantity that a machine normally operates on and
|
|
|
|
stores in its registers. This is 32 bits for all the machines that _GDBN__
|
|
|
|
runs on.
|
|
|
|
|
|
|
|
@item g
|
|
|
|
Examine giant words (8 bytes).
|
|
|
|
@end table
|
|
|
|
|
|
|
|
You can combine these unit specifications with any of the formats
|
|
|
|
described for @code{print}. @xref{Output formats}.
|
|
|
|
|
|
|
|
@code{x} has two additional output specifications which derive the unit
|
|
|
|
size from the data inspected:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item s
|
|
|
|
Print a null-terminated string of characters. Any explicitly specified
|
|
|
|
unit size is ignored; instead, the unit is however many bytes it takes
|
|
|
|
to reach a null character (including the null character).
|
|
|
|
|
|
|
|
@item i
|
|
|
|
Print a machine instruction in assembler syntax (or nearly). Any
|
|
|
|
specified unit size is ignored; the number of bytes in an instruction
|
|
|
|
varies depending on the type of machine, the opcode and the addressing
|
|
|
|
modes used. The command @code{disassemble} gives an alternative way of
|
|
|
|
inspecting machine instructions. @xref{Machine Code}.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
If you omit either the format @var{f} or the unit size @var{u}, @code{x}
|
|
|
|
will use the same one that was used last. If you don't use any letters
|
|
|
|
or digits after the slash, you can omit the slash as well.
|
|
|
|
|
|
|
|
You can also omit the address to examine. Then the address used is just
|
|
|
|
after the last unit examined. This is why string and instruction
|
|
|
|
formats actually compute a unit-size based on the data: so that the next
|
|
|
|
string or instruction examined will start in the right place.
|
|
|
|
|
|
|
|
When the @code{print} command shows a value that resides in memory,
|
|
|
|
@code{print} also sets the default address for the @code{x} command.
|
|
|
|
@code{info line} also sets the default for @code{x}, to the address of
|
|
|
|
the start of the machine code for the specified line (@pxref{Machine
|
|
|
|
Code}), and @code{info breakpoints} sets it to the address of the last
|
|
|
|
breakpoint listed (@pxref{Set Breaks}).
|
|
|
|
|
|
|
|
When you use @key{RET} to repeat an @code{x} command, the address
|
|
|
|
specified previously (if any) is ignored, so that the repeated command
|
|
|
|
examines the successive locations in memory rather than the same ones.
|
|
|
|
|
|
|
|
You can examine several consecutive units of memory with one command by
|
|
|
|
writing a repeat-count after the slash (before the format letters, if
|
|
|
|
any). Omitting the repeat count @var{n} displays one unit of the
|
|
|
|
appropriate size. The repeat count must be a decimal integer. It has
|
|
|
|
the same effect as repeating the @code{x} command @var{n} times except
|
|
|
|
that the output may be more compact, with several units per line. For
|
|
|
|
example,
|
|
|
|
|
|
|
|
@example
|
|
|
|
x/10i $pc
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
prints ten instructions starting with the one to be executed next in the
|
|
|
|
selected frame. After doing this, you could print a further seven
|
|
|
|
instructions with
|
|
|
|
|
|
|
|
@example
|
|
|
|
x/7
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
---where the format and address are allowed to default.
|
|
|
|
|
|
|
|
@kindex $_
|
|
|
|
@kindex $__
|
|
|
|
The addresses and contents printed by the @code{x} command are not put
|
|
|
|
in the value history because there is often too much of them and they
|
|
|
|
would get in the way. Instead, _GDBN__ makes these values available for
|
|
|
|
subsequent use in expressions as values of the convenience variables
|
|
|
|
@code{$_} and @code{$__}. After an @code{x} command, the last address
|
|
|
|
examined is available for use in expressions in the convenience variable
|
|
|
|
@code{$_}. The contents of that address, as examined, are available in
|
|
|
|
the convenience variable @code{$__}.
|
|
|
|
|
|
|
|
If the @code{x} command has a repeat count, the address and contents saved
|
|
|
|
are from the last memory unit printed; this is not the same as the last
|
|
|
|
address printed if several units were printed on the last line of output.
|
|
|
|
|
|
|
|
@node Auto Display, Print Settings, Memory, Data
|
|
|
|
@section Automatic Display
|
|
|
|
@cindex automatic display
|
|
|
|
@cindex display of expressions
|
|
|
|
|
|
|
|
If you find that you want to print the value of an expression frequently
|
|
|
|
(to see how it changes), you might want to add it to the @dfn{automatic
|
|
|
|
display list} so that _GDBN__ will print its value each time the program stops.
|
|
|
|
Each expression added to the list is given a number to identify it;
|
|
|
|
to remove an expression from the list, you specify that number.
|
|
|
|
The automatic display looks like this:
|
|
|
|
|
|
|
|
@example
|
|
|
|
2: foo = 38
|
|
|
|
3: bar[5] = (struct hack *) 0x3804
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
showing item numbers, expressions and their current values. As with
|
|
|
|
displays you request manually using @code{x} or @code{print}, you can
|
|
|
|
specify the output format you prefer; in fact, @code{display} decides
|
|
|
|
whether to use @code{print} or @code{x} depending on how elaborate your
|
|
|
|
format specification is---it uses @code{x} if you specify a unit size,
|
|
|
|
or one of the two formats (@samp{i} and @samp{s}) that are only
|
|
|
|
supported by @code{x}; otherwise it uses @code{print}.
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item display @var{exp}
|
|
|
|
@kindex display
|
|
|
|
Add the expression @var{exp} to the list of expressions to display
|
|
|
|
each time the program stops. @xref{Expressions}.
|
|
|
|
|
|
|
|
@code{display} will not repeat if you press @key{RET} again after using it.
|
|
|
|
|
|
|
|
@item display/@var{fmt} @var{exp}
|
|
|
|
For @var{fmt} specifying only a display format and not a size or
|
|
|
|
count, add the expression @var{exp} to the auto-display list but
|
|
|
|
arranges to display it each time in the specified format @var{fmt}.
|
|
|
|
@xref{Output formats}.
|
|
|
|
|
|
|
|
@item display/@var{fmt} @var{addr}
|
|
|
|
For @var{fmt} @samp{i} or @samp{s}, or including a unit-size or a
|
|
|
|
number of units, add the expression @var{addr} as a memory address to
|
|
|
|
be examined each time the program stops. Examining means in effect
|
|
|
|
doing @samp{x/@var{fmt} @var{addr}}. @xref{Memory}.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
For example, @samp{display/i $pc} can be helpful, to see the machine
|
|
|
|
instruction about to be executed each time execution stops (@samp{$pc}
|
|
|
|
is a common name for the program counter; @pxref{Registers}).
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item undisplay @var{dnums}@dots{}
|
|
|
|
@itemx delete display @var{dnums}@dots{}
|
|
|
|
@kindex delete display
|
|
|
|
@kindex undisplay
|
|
|
|
Remove item numbers @var{dnums} from the list of expressions to display.
|
|
|
|
|
|
|
|
@code{undisplay} will not repeat if you press @key{RET} after using it.
|
1991-07-24 01:30:45 +00:00
|
|
|
(Otherwise you would just get the error @samp{No display number @dots{}}.)
|
1991-05-23 00:14:26 +00:00
|
|
|
|
|
|
|
@item disable display @var{dnums}@dots{}
|
|
|
|
@kindex disable display
|
|
|
|
Disable the display of item numbers @var{dnums}. A disabled display
|
|
|
|
item is not printed automatically, but is not forgotten. It may be
|
|
|
|
enabled again later.
|
|
|
|
|
|
|
|
@item enable display @var{dnums}@dots{}
|
|
|
|
@kindex enable display
|
|
|
|
Enable display of item numbers @var{dnums}. It becomes effective once
|
|
|
|
again in auto display of its expression, until you specify otherwise.
|
|
|
|
|
|
|
|
@item display
|
|
|
|
Display the current values of the expressions on the list, just as is
|
|
|
|
done when the program stops.
|
|
|
|
|
|
|
|
@item info display
|
|
|
|
@kindex info display
|
|
|
|
Print the list of expressions previously set up to display
|
|
|
|
automatically, each one with its item number, but without showing the
|
|
|
|
values. This includes disabled expressions, which are marked as such.
|
|
|
|
It also includes expressions which would not be displayed right now
|
|
|
|
because they refer to automatic variables not currently available.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
If a display expression refers to local variables, then it does not make
|
|
|
|
sense outside the lexical context for which it was set up. Such an
|
|
|
|
expression is disabled when execution enters a context where one of its
|
|
|
|
variables is not defined. For example, if you give the command
|
|
|
|
@code{display last_char} while inside a function with an argument
|
|
|
|
@code{last_char}, then this argument will be displayed while the program
|
|
|
|
continues to stop inside that function. When it stops elsewhere---where
|
|
|
|
there is no variable @code{last_char}---display is disabled. The next time
|
|
|
|
your program stops where @code{last_char} is meaningful, you can enable the
|
|
|
|
display expression once again.
|
|
|
|
|
|
|
|
@node Print Settings, Value History, Auto Display, Data
|
|
|
|
@section Print Settings
|
|
|
|
|
|
|
|
@cindex format options
|
|
|
|
@cindex print settings
|
|
|
|
_GDBN__ provides the following ways to control how arrays, structures,
|
|
|
|
and symbols are printed.
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
These settings are useful for debugging programs in any language:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item set print address
|
|
|
|
@item set print address on
|
|
|
|
@kindex set print address
|
|
|
|
_GDBN__ will print memory addresses showing the location of stack
|
|
|
|
traces, structure values, pointer values, breakpoints, and so forth,
|
|
|
|
even when it also displays the contents of those addresses. The default
|
|
|
|
is on. For example, this is what a stack frame display looks like, with
|
|
|
|
@code{set print address on}:
|
|
|
|
@smallexample
|
|
|
|
(_GDBP__) f
|
|
|
|
#0 set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")
|
|
|
|
at input.c:530
|
|
|
|
530 if (lquote != def_lquote)
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@item set print address off
|
|
|
|
Do not print addresses when displaying their contents. For example,
|
|
|
|
this is the same stack frame displayed with @code{set print address off}:
|
|
|
|
@example
|
|
|
|
(_GDBP__) set print addr off
|
|
|
|
(_GDBP__) f
|
|
|
|
#0 set_quotes (lq="<<", rq=">>") at input.c:530
|
|
|
|
530 if (lquote != def_lquote)
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@item show print address
|
|
|
|
@kindex show print address
|
|
|
|
Show whether or not addresses are to be printed.
|
|
|
|
|
|
|
|
@item set print array
|
|
|
|
@itemx set print array on
|
|
|
|
@kindex set print array
|
|
|
|
_GDBN__ will pretty print arrays. This format is more convenient to read,
|
|
|
|
but uses more space. The default is off.
|
|
|
|
|
|
|
|
@item set print array off.
|
|
|
|
Return to compressed format for arrays.
|
|
|
|
|
|
|
|
@item show print array
|
|
|
|
@kindex show print array
|
|
|
|
Show whether compressed or pretty format is selected for displaying
|
|
|
|
arrays.
|
|
|
|
|
|
|
|
@item set print elements @var{number-of-elements}
|
|
|
|
@kindex set print elements
|
|
|
|
If _GDBN__ is printing a large array, it will stop printing after it has
|
|
|
|
printed the number of elements set by the @code{set print elements} command.
|
|
|
|
This limit also applies to the display of strings.
|
|
|
|
|
|
|
|
@item show print elements
|
|
|
|
@kindex show print elements
|
|
|
|
Display the number of elements of a large array that _GDBN__ will print
|
|
|
|
before losing patience.
|
|
|
|
|
|
|
|
@item set print pretty on
|
|
|
|
@kindex set print pretty
|
|
|
|
Cause _GDBN__ to print structures in an indented format with one member per
|
|
|
|
line, like this:
|
|
|
|
|
|
|
|
@example
|
|
|
|
$1 = @{
|
|
|
|
next = 0x0,
|
|
|
|
flags = @{
|
|
|
|
sweet = 1,
|
|
|
|
sour = 1
|
|
|
|
@},
|
|
|
|
meat = 0x54 "Pork"
|
|
|
|
@}
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@item set print pretty off
|
|
|
|
Cause _GDBN__ to print structures in a compact format, like this:
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
$1 = @{next = 0x0, flags = @{sweet = 1, sour = 1@}, meat \
|
|
|
|
= 0x54 "Pork"@}
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
This is the default format.
|
|
|
|
|
|
|
|
@item show print pretty
|
|
|
|
@kindex show print pretty
|
|
|
|
Show which format _GDBN__ will use to print structures.
|
|
|
|
|
|
|
|
@item set print sevenbit-strings on
|
|
|
|
Print using only seven-bit characters; if this option is set,
|
|
|
|
_GDBN__ will display any eight-bit characters (in strings or character
|
|
|
|
values) using the notation @code{\}@var{nnn}. For example, @kbd{M-a} is
|
|
|
|
displayed as @code{\341}.
|
|
|
|
|
|
|
|
@item set print sevenbit-strings off
|
|
|
|
Print using either seven-bit or eight-bit characters, as required. This
|
|
|
|
is the default.
|
|
|
|
|
|
|
|
@item show print sevenbit-strings
|
|
|
|
Show whether or not _GDBN__ will print only seven-bit characters.
|
|
|
|
|
|
|
|
@item set print union on
|
|
|
|
@kindex set print union
|
|
|
|
Tell _GDBN__ to print unions which are contained in structures. This is the
|
|
|
|
default setting.
|
|
|
|
|
|
|
|
@item set print union off
|
|
|
|
Tell _GDBN__ not to print unions which are contained in structures.
|
|
|
|
|
|
|
|
@item show print union
|
|
|
|
@kindex show print union
|
|
|
|
Ask _GDBN__ whether or not it will print unions which are contained in
|
|
|
|
structures.
|
|
|
|
|
|
|
|
For example, given the declarations
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
typedef enum @{Tree, Bug@} Species;
|
|
|
|
typedef enum @{Big_tree, Acorn, Seedling@} Tree_forms;
|
|
|
|
typedef enum @{Caterpillar, Cocoon, Butterfly@} Bug_forms;
|
|
|
|
|
|
|
|
struct thing @{
|
|
|
|
Species it;
|
|
|
|
union @{
|
|
|
|
Tree_forms tree;
|
|
|
|
Bug_forms bug;
|
|
|
|
@} form;
|
|
|
|
@};
|
|
|
|
|
|
|
|
struct thing foo = @{Tree, @{Acorn@}@};
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
with @code{set print union on} in effect @samp{p foo} would print
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
$1 = @{it = Tree, form = @{tree = Acorn, bug = Cocoon@}@}
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
and with @code{set print union off} in effect it would print
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
$1 = @{it = Tree, form = @{...@}@}
|
|
|
|
@end smallexample
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
These settings are of interest when debugging C++ programs:
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item set print demangle
|
|
|
|
@itemx set print demangle on
|
|
|
|
@kindex set print demangle
|
|
|
|
Print C++ names in their source form rather than in the mangled form
|
|
|
|
in which they are passed to the assembler and linker for type-safe linkage.
|
|
|
|
The default is on.
|
|
|
|
|
|
|
|
@item show print demangle
|
|
|
|
@kindex show print demangle
|
|
|
|
Show whether C++ names will be printed in mangled or demangled form.
|
|
|
|
|
|
|
|
@item set print asm-demangle
|
|
|
|
@itemx set print asm-demangle on
|
|
|
|
@kindex set print asm-demangle
|
|
|
|
Print C++ names in their source form rather than their mangled form, even
|
|
|
|
in assembler code printouts such as instruction disassemblies.
|
|
|
|
The default is off.
|
|
|
|
|
|
|
|
@item show print asm-demangle
|
|
|
|
@kindex show print asm-demangle
|
|
|
|
Show whether C++ names in assembly listings will be printed in mangled
|
|
|
|
or demangled form.
|
|
|
|
|
|
|
|
@item set print object
|
|
|
|
@itemx set print object on
|
|
|
|
@kindex set print object
|
|
|
|
When displaying a pointer to an object, identify the @emph{actual}
|
|
|
|
(derived) type of the object rather than the @emph{declared} type, using
|
|
|
|
the virtual function table.
|
|
|
|
|
|
|
|
@item set print object off
|
|
|
|
Display only the declared type of objects, without reference to the
|
|
|
|
virtual function table. This is the default setting.
|
|
|
|
|
|
|
|
@item show print object
|
|
|
|
@kindex show print object
|
|
|
|
Show whether actual, or declared, object types will be displayed.
|
|
|
|
|
|
|
|
@item set print vtbl
|
|
|
|
@itemx set print vtbl on
|
|
|
|
@kindex set print vtbl
|
|
|
|
Pretty print C++ virtual function tables. The default is off.
|
|
|
|
|
|
|
|
@item set print vtbl off
|
|
|
|
Do not pretty print C++ virtual function tables.
|
|
|
|
|
|
|
|
@item show print vtbl
|
|
|
|
@kindex show print vtbl
|
|
|
|
Show whether C++ virtual function tables are pretty printed, or not.
|
|
|
|
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@node Value History, Convenience Vars, Print Settings, Data
|
|
|
|
@section Value History
|
|
|
|
|
|
|
|
@cindex value history
|
|
|
|
Values printed by the @code{print} command are saved in _GDBN__'s @dfn{value
|
|
|
|
history} so that you can refer to them in other expressions. Values are
|
|
|
|
kept until the symbol table is re-read or discarded (for example with
|
|
|
|
the @code{file} or @code{symbol-file} commands). When the symbol table
|
|
|
|
changes, the value history is discarded, since the values may contain
|
|
|
|
pointers back to the types defined in the symbol table.
|
|
|
|
|
|
|
|
@cindex @code{$}
|
|
|
|
@cindex @code{$$}
|
|
|
|
@cindex history number
|
|
|
|
The values printed are given @dfn{history numbers} for you to refer to them
|
|
|
|
by. These are successive integers starting with one. @code{print} shows you
|
|
|
|
the history number assigned to a value by printing @samp{$@var{num} = }
|
|
|
|
before the value; here @var{num} is the history number.
|
|
|
|
|
|
|
|
To refer to any previous value, use @samp{$} followed by the value's
|
|
|
|
history number. The way @code{print} labels its output is designed to
|
|
|
|
remind you of this. Just @code{$} refers to the most recent value in
|
|
|
|
the history, and @code{$$} refers to the value before that.
|
|
|
|
@code{$$@var{n}} refers to the @var{n}th value from the end; @code{$$2}
|
|
|
|
is the value just prior to @code{$$}, @code{$$1} is equivalent to
|
|
|
|
@code{$$}, and @code{$$0} is equivalent to @code{$}.
|
|
|
|
|
|
|
|
For example, suppose you have just printed a pointer to a structure and
|
|
|
|
want to see the contents of the structure. It suffices to type
|
|
|
|
|
|
|
|
@example
|
|
|
|
p *$
|
|
|
|
@end example
|
|
|
|
|
|
|
|
If you have a chain of structures where the component @code{next} points
|
|
|
|
to the next one, you can print the contents of the next one with this:
|
|
|
|
|
|
|
|
@example
|
|
|
|
p *$.next
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
You can print successive links in the chain by repeating this
|
|
|
|
command---which you can do by just typing @key{RET}.
|
|
|
|
|
|
|
|
Note that the history records values, not expressions. If the value of
|
|
|
|
@code{x} is 4 and you type these commands:
|
|
|
|
|
|
|
|
@example
|
|
|
|
print x
|
|
|
|
set x=5
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
then the value recorded in the value history by the @code{print} command
|
|
|
|
remains 4 even though the value of @code{x} has changed.
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@kindex show values
|
|
|
|
@item show values
|
|
|
|
Print the last ten values in the value history, with their item numbers.
|
|
|
|
This is like @samp{p@ $$9} repeated ten times, except that @code{show
|
|
|
|
values} does not change the history.
|
|
|
|
|
|
|
|
@item show values @var{n}
|
|
|
|
Print ten history values centered on history item number @var{n}.
|
|
|
|
|
|
|
|
@item show values +
|
|
|
|
Print ten history values just after the values last printed. If no more
|
|
|
|
values are available, produces no display.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
Pressing @key{RET} to repeat @code{show values @var{n}} has exactly the
|
|
|
|
same effect as @samp{show values +}.
|
|
|
|
|
|
|
|
@node Convenience Vars, Registers, Value History, Data
|
|
|
|
@section Convenience Variables
|
|
|
|
|
|
|
|
@cindex convenience variables
|
|
|
|
_GDBN__ provides @dfn{convenience variables} that you can use within
|
|
|
|
_GDBN__ to hold on to a value and refer to it later. These variables
|
|
|
|
exist entirely within _GDBN__; they are not part of your program, and
|
|
|
|
setting a convenience variable has no direct effect on further execution
|
|
|
|
of your program. That's why you can use them freely.
|
|
|
|
|
|
|
|
Convenience variables are prefixed with @samp{$}. Any name preceded by
|
|
|
|
@samp{$} can be used for a convenience variable, unless it is one of
|
|
|
|
the predefined machine-specific register names (@pxref{Registers}).
|
|
|
|
(Value history references, in contrast, are @emph{numbers} preceded
|
|
|
|
by @samp{$}. @xref{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. Example:
|
|
|
|
|
|
|
|
@example
|
|
|
|
set $foo = *object_ptr
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
would save in @code{$foo} the value contained in the object pointed to by
|
|
|
|
@code{object_ptr}.
|
|
|
|
|
|
|
|
Using a convenience variable for the first time creates it; but its value
|
|
|
|
is @code{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.
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item show convenience
|
|
|
|
@kindex show convenience
|
|
|
|
Print a list of convenience variables used so far, and their values.
|
|
|
|
Abbreviated @code{show con}.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
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:
|
|
|
|
|
|
|
|
_0__@example
|
|
|
|
set $i = 0
|
|
|
|
print bar[$i++]->contents
|
|
|
|
@i{@dots{} repeat that command by typing @key{RET}.}
|
|
|
|
_1__@end example
|
|
|
|
|
|
|
|
Some convenience variables are created automatically by _GDBN__ and given
|
|
|
|
values likely to be useful.
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item $_
|
|
|
|
The variable @code{$_} is automatically set by the @code{x} command to
|
|
|
|
the last address examined (@pxref{Memory}). Other commands which
|
|
|
|
provide a default address for @code{x} to examine also set @code{$_}
|
|
|
|
to that address; these commands include @code{info line} and @code{info
|
|
|
|
breakpoint}.
|
|
|
|
|
|
|
|
@item $__
|
|
|
|
The variable @code{$__} is automatically set by the @code{x} command
|
|
|
|
to the value found in the last address examined.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
@node Registers, Floating Point Hardware, Convenience Vars, Data
|
|
|
|
@section Registers
|
|
|
|
|
|
|
|
@cindex registers
|
|
|
|
Machine register contents can be referred to in expressions as variables
|
|
|
|
with names starting with @samp{$}. The names of registers are different
|
|
|
|
for each machine; use @code{info registers} to see the names used on
|
|
|
|
your machine.
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item info registers
|
|
|
|
@kindex info registers
|
|
|
|
Print the names and values of all registers (in the selected stack frame).
|
|
|
|
|
|
|
|
@item info registers @var{regname}
|
|
|
|
Print the relativized value of register @var{regname}. @var{regname}
|
|
|
|
may be any register name valid on the machine you are using, with
|
|
|
|
or without the initial @samp{$}.
|
|
|
|
@end table
|
|
|
|
|
|
|
|
The register names @code{$pc} and @code{$sp} are used on most machines
|
|
|
|
for the program counter register and the stack pointer. For example,
|
|
|
|
you could print the program counter in hex with
|
|
|
|
@example
|
|
|
|
p/x $pc
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
or print the instruction to be executed next with
|
|
|
|
@example
|
|
|
|
x/i $pc
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
or add four to the stack pointer with
|
|
|
|
@example
|
|
|
|
set $sp += 4
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
The last is a way of removing one word from the stack, on machines where
|
|
|
|
stacks grow downward in memory (most machines, nowadays). This assumes
|
|
|
|
that the innermost stack frame is selected; setting @code{$sp} is
|
|
|
|
not allowed when other stack frames are selected. (To pop entire frames
|
|
|
|
off the stack, regardless of machine architecture, use @code{return};
|
|
|
|
@pxref{Returning}.)
|
|
|
|
|
|
|
|
Often @code{$fp} is used for a register that contains a pointer to the
|
|
|
|
current stack frame, and @code{$ps} is sometimes used for a register
|
|
|
|
that contains the processor status. These standard register names may
|
|
|
|
be available on your machine even though the @code{info registers}
|
|
|
|
command shows other names. For example, on the SPARC, @code{info
|
|
|
|
registers} displays the processor status register as @code{$psr} but you
|
|
|
|
can also refer to it as @code{$ps}.
|
|
|
|
|
|
|
|
_GDBN__ always considers the contents of an ordinary register as an
|
|
|
|
integer when the register is examined in this way. Some machines have
|
|
|
|
special registers which can hold nothing but floating point; these
|
|
|
|
registers are considered to have floating point values. There is no way
|
|
|
|
to refer to the contents of an ordinary register as floating point value
|
|
|
|
(although you can @emph{print} it as a floating point value with
|
|
|
|
@samp{print/f $@var{regname}}).
|
|
|
|
|
|
|
|
Some registers have distinct ``raw'' and ``virtual'' data formats. This
|
|
|
|
means that the data format in which the register contents are saved by
|
|
|
|
the operating system is not the same one that your program normally
|
|
|
|
sees. For example, the registers of the 68881 floating point
|
|
|
|
coprocessor are always saved in ``extended'' (raw) format, but all C
|
|
|
|
programs expect to work with ``double'' (virtual) format. In such
|
|
|
|
cases, _GDBN__ normally works with the virtual format only (the format that
|
|
|
|
makes sense for your program), but the @code{info registers} command
|
|
|
|
prints the data in both formats.
|
|
|
|
|
|
|
|
Normally, register values are relative to the selected stack frame
|
|
|
|
(@pxref{Selection}). This means that you get the value that the
|
|
|
|
register would contain if all stack frames farther in were exited and
|
|
|
|
their saved registers restored. In order to see the true contents of
|
|
|
|
hardware registers, you must select the innermost frame (with
|
|
|
|
@samp{frame 0}).
|
|
|
|
|
|
|
|
However, _GDBN__ must deduce where registers are saved, from the machine
|
|
|
|
code generated by your compiler. If some registers are not saved, or if
|
|
|
|
_GDBN__ is unable to locate the saved registers, the selected stack
|
|
|
|
frame will make no difference.
|
|
|
|
|
|
|
|
@node Floating Point Hardware, , Registers, Data
|
|
|
|
@section Floating Point Hardware
|
|
|
|
@cindex floating point
|
|
|
|
Depending on the host machine architecture, _GDBN__ may be able to give
|
|
|
|
you more information about the status of the floating point hardware.
|
|
|
|
|
|
|
|
@table @code
|
|
|
|
@item info float
|
|
|
|
@kindex info float
|
|
|
|
If available, provides hardware-dependent information about the floating
|
|
|
|
point unit. The exact contents and layout vary depending on the
|
|
|
|
floating point chip.
|
|
|
|
@end table
|
|
|
|
@c FIXME: this is a cop-out. Try to get examples, explanations. Only
|
|
|
|
@c FIXME...supported currently on arm's and 386's. Mark properly with
|
|
|
|
@c FIXME... m4 macros to isolate general statements from hardware-dep,
|
|
|
|
@c FIXME... at that point.
|