The commands described in this chapter allow you to inquire about the symbols (names of variables, functions and types) defined in your program. This information is inherent in the text of your program and does not change as your program executes. GDB finds it in your program's symbol table, in the file indicated when you started GDB (see section Choosing files), or by one of the file-management commands (see section Commands to specify files).
Occasionally, you may need to refer to symbols that contain unusual characters, which GDB ordinarily treats as word delimiters. The most frequent case is in referring to static variables in other source files (see section Program variables). File names are recorded in object files as debugging symbols, but GDB would ordinarily parse a typical file name, like `foo.c', as the three words `foo' `.' `c'. To allow GDB to recognize `foo.c' as a single symbol, enclose it in single quotes; for example,
p 'foo.c'::x
looks up the value of x
in the scope of the file `foo.c'.
info address symbol
info symbol addr
(gdb) info symbol 0x54320 _initialize_vx + 396 in section .textThis is the opposite of the
info address
command. You can use
it to find out the name of a variable or a function given its address.
whatis expr
whatis
$
, the last value in the value history.
ptype typename
ptype expr
ptype
ptype
differs from whatis
by printing a detailed description, instead
of just the name of the type.
For example, for this variable declaration:
struct complex {double real; double imag;} v;the two commands give this output:
(gdb) whatis v type = struct complex (gdb) ptype v type = struct complex { double real; double imag; }As with
whatis
, using ptype
without an argument refers to
the type of $
, the last value in the value history.
info types regexp
info types
value
, but `i type ^value$' gives
information only on types whose complete name is value
.
This command differs from ptype
in two ways: first, like
whatis
, it does not print a detailed description; second, it
lists all source files where a type is defined.
info scope addr
(gdb) info scope command_line_handler Scope for command_line_handler: Symbol rl is an argument at stack/frame offset 8, length 4. Symbol linebuffer is in static storage at address 0x150a18, length 4. Symbol linelength is in static storage at address 0x150a1c, length 4. Symbol p is a local variable in register $esi, length 4. Symbol p1 is a local variable in register $ebx, length 4. Symbol nline is a local variable in register $edx, length 4. Symbol repeat is a local variable at frame offset -8, length 4.This command is especially useful for determining what data to collect during a trace experiment, see section Tracepoint Action Lists.
info source
info sources
info functions
info functions regexp
step
; `info fun ^step' finds those whose names
start with step
. If a function name contains characters
that conflict with the regular expression language (eg.
`operator*()'), they may be quoted with a backslash.
info variables
info variables regexp
info classes
info classes regexp
info selectors
info selectors regexp
set symbol-reloading on
set symbol-reloading off
symbol-reloading
off, since otherwise GDB
may discard symbols when linking large programs, that may contain
several modules (from different directories or libraries) with the same
name.
show symbol-reloading
on
or off
setting.
set opaque-type-resolution on
struct
, class
, or
union
---for example, struct MyType *
---that is used in one
source file although the full declaration of struct MyType
is in
another source file. The default is on.
A change in the setting of this subcommand will not take effect until
the next time symbols for a file are loaded.
set opaque-type-resolution off
{<no data fields>}
show opaque-type-resolution
maint print symbols filename
maint print psymbols filename
maint print msymbols filename
info sources
to find out which files these are. If you
use `maint print psymbols' instead, the dump shows information about
symbols that GDB only knows partially--that is, symbols defined in
files that GDB has skimmed, but not yet read completely. Finally,
`maint print msymbols' dumps just the minimal symbol information
required for each object file from which GDB has read some symbols.
See section Commands to specify files, for a discussion of how
GDB reads symbols (in the description of symbol-file
).
maint info symtabs [ regexp ]
maint info psymtabs [ regexp ]
struct symtab
or struct partial_symtab
structures whose names match regexp. If regexp is not
given, list them all. The output includes expressions which you can
copy into a GDB debugging this one to examine a particular
structure in more detail. For example:
(gdb) maint info psymtabs dwarf2read { objfile /home/gnu/build/gdb/gdb ((struct objfile *) 0x82e69d0) { psymtab /home/gnu/src/gdb/dwarf2read.c ((struct partial_symtab *) 0x8474b10) readin no fullname (null) text addresses 0x814d3c8 -- 0x8158074 globals (* (struct partial_symbol **) 0x8507a08 @ 9) statics (* (struct partial_symbol **) 0x40e95b78 @ 2882) dependencies (none) } } (gdb) maint info symtabs (gdb)We see that there is one partial symbol table whose filename contains the string `dwarf2read', belonging to the `gdb' executable; and we see that GDB has not read in any symtabs yet at all. If we set a breakpoint on a function, that will cause GDB to read the symtab for the compilation unit containing that function:
(gdb) break dwarf2_psymtab_to_symtab Breakpoint 1 at 0x814e5da: file /home/gnu/src/gdb/dwarf2read.c, line 1574. (gdb) maint info symtabs { objfile /home/gnu/build/gdb/gdb ((struct objfile *) 0x82e69d0) { symtab /home/gnu/src/gdb/dwarf2read.c ((struct symtab *) 0x86c1f38) dirname (null) fullname (null) blockvector ((struct blockvector *) 0x86c1bd0) (primary) debugformat DWARF 2 } } (gdb)
Go to the first, previous, next, last section, table of contents.