blob: 5a5be8542b9e87263d63b4d1a59c87c5c068acea [file] [log] [blame]
<html lang="en">
<head>
<title>Symbols - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="prev" href="Languages.html#Languages" title="Languages">
<link rel="next" href="Altering.html#Altering" title="Altering">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Symbols"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Altering.html#Altering">Altering</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Languages.html#Languages">Languages</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
<hr>
</div>
<h2 class="chapter">16 Examining the Symbol Table</h2>
<p>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. <span class="sc">gdb</span> finds it in your
program's symbol table, in the file indicated when you started <span class="sc">gdb</span>
(see <a href="File-Options.html#File-Options">Choosing Files</a>), or by one of the
file-management commands (see <a href="Files.html#Files">Commands to Specify Files</a>).
<p><a name="index-symbol-names-883"></a><a name="index-names-of-symbols-884"></a><a name="index-quoting-names-885"></a>Occasionally, you may need to refer to symbols that contain unusual
characters, which <span class="sc">gdb</span> ordinarily treats as word delimiters. The
most frequent case is in referring to static variables in other
source files (see <a href="Variables.html#Variables">Program Variables</a>). File names
are recorded in object files as debugging symbols, but <span class="sc">gdb</span> would
ordinarily parse a typical file name, like <samp><span class="file">foo.c</span></samp>, as the three words
&lsquo;<samp><span class="samp">foo</span></samp>&rsquo; &lsquo;<samp><span class="samp">.</span></samp>&rsquo; &lsquo;<samp><span class="samp">c</span></samp>&rsquo;. To allow <span class="sc">gdb</span> to recognize
&lsquo;<samp><span class="samp">foo.c</span></samp>&rsquo; as a single symbol, enclose it in single quotes; for example,
<pre class="smallexample"> p 'foo.c'::x
</pre>
<p class="noindent">looks up the value of <code>x</code> in the scope of the file <samp><span class="file">foo.c</span></samp>.
<a name="index-case_002dinsensitive-symbol-names-886"></a>
<a name="index-case-sensitivity-in-symbol-names-887"></a>
<a name="index-set-case_002dsensitive-888"></a>
<dl><dt><code>set case-sensitive on</code><dt><code>set case-sensitive off</code><dt><code>set case-sensitive auto</code><dd>Normally, when <span class="sc">gdb</span> looks up symbols, it matches their names
with case sensitivity determined by the current source language.
Occasionally, you may wish to control that. The command <code>set
case-sensitive</code> lets you do that by specifying <code>on</code> for
case-sensitive matches or <code>off</code> for case-insensitive ones. If
you specify <code>auto</code>, case sensitivity is reset to the default
suitable for the source language. The default is case-sensitive
matches for all languages except for Fortran, for which the default is
case-insensitive matches.
<p><a name="index-show-case_002dsensitive-889"></a><br><dt><code>show case-sensitive</code><dd>This command shows the current setting of case sensitivity for symbols
lookups.
<p><a name="index-info-address-890"></a><a name="index-address-of-a-symbol-891"></a><br><dt><code>info address </code><var>symbol</var><dd>Describe where the data for <var>symbol</var> is stored. For a register
variable, this says which register it is kept in. For a non-register
local variable, this prints the stack-frame offset at which the variable
is always stored.
<p>Note the contrast with &lsquo;<samp><span class="samp">print &amp;</span><var>symbol</var></samp>&rsquo;, which does not work
at all for a register variable, and for a stack local variable prints
the exact address of the current instantiation of the variable.
<p><a name="index-info-symbol-892"></a><a name="index-symbol-from-address-893"></a><a name="index-closest-symbol-and-offset-for-an-address-894"></a><br><dt><code>info symbol </code><var>addr</var><dd>Print the name of a symbol which is stored at the address <var>addr</var>.
If no symbol is stored exactly at <var>addr</var>, <span class="sc">gdb</span> prints the
nearest symbol and an offset from it:
<pre class="smallexample"> (gdb) info symbol 0x54320
_initialize_vx + 396 in section .text
</pre>
<p class="noindent">This is the opposite of the <code>info address</code> command. You can use
it to find out the name of a variable or a function given its address.
<p>For dynamically linked executables, the name of executable or shared
library containing the symbol is also printed:
<pre class="smallexample"> (gdb) info symbol 0x400225
_start + 5 in section .text of /tmp/a.out
(gdb) info symbol 0x2aaaac2811cf
__read_nocancel + 6 in section .text of /usr/lib64/libc.so.6
</pre>
<p><a name="index-whatis-895"></a><br><dt><code>whatis [</code><var>arg</var><code>]</code><dd>Print the data type of <var>arg</var>, which can be either an expression or
a data type. With no argument, print the data type of <code>$</code>, the
last value in the value history. If <var>arg</var> is an expression, it is
not actually evaluated, and any side-effecting operations (such as
assignments or function calls) inside it do not take place. If
<var>arg</var> is a type name, it may be the name of a type or typedef, or
for C code it may have the form &lsquo;<samp><span class="samp">class </span><var>class-name</var></samp>&rsquo;,
&lsquo;<samp><span class="samp">struct </span><var>struct-tag</var></samp>&rsquo;, &lsquo;<samp><span class="samp">union </span><var>union-tag</var></samp>&rsquo; or
&lsquo;<samp><span class="samp">enum </span><var>enum-tag</var></samp>&rsquo;.
See <a href="Expressions.html#Expressions">Expressions</a>.
<p><a name="index-ptype-896"></a><br><dt><code>ptype [</code><var>arg</var><code>]</code><dd><code>ptype</code> accepts the same arguments as <code>whatis</code>, but prints a
detailed description of the type, instead of just the name of the type.
See <a href="Expressions.html#Expressions">Expressions</a>.
<p>For example, for this variable declaration:
<pre class="smallexample"> struct complex {double real; double imag;} v;
</pre>
<p class="noindent">the two commands give this output:
<pre class="smallexample"> (gdb) whatis v
type = struct complex
(gdb) ptype v
type = struct complex {
double real;
double imag;
}
</pre>
<p class="noindent">As with <code>whatis</code>, using <code>ptype</code> without an argument refers to
the type of <code>$</code>, the last value in the value history.
<p><a name="index-incomplete-type-897"></a>Sometimes, programs use opaque data types or incomplete specifications
of complex data structure. If the debug information included in the
program does not allow <span class="sc">gdb</span> to display a full declaration of
the data type, it will say &lsquo;<samp><span class="samp">&lt;incomplete type&gt;</span></samp>&rsquo;. For example,
given these declarations:
<pre class="smallexample"> struct foo;
struct foo *fooptr;
</pre>
<p class="noindent">but no definition for <code>struct foo</code> itself, <span class="sc">gdb</span> will say:
<pre class="smallexample"> (gdb) ptype foo
$1 = &lt;incomplete type&gt;
</pre>
<p class="noindent">&ldquo;Incomplete type&rdquo; is C terminology for data types that are not
completely specified.
<p><a name="index-info-types-898"></a><br><dt><code>info types </code><var>regexp</var><dt><code>info types</code><dd>Print a brief description of all types whose names match the regular
expression <var>regexp</var> (or all types in your program, if you supply
no argument). Each complete typename is matched as though it were a
complete line; thus, &lsquo;<samp><span class="samp">i type value</span></samp>&rsquo; gives information on all
types in your program whose names include the string <code>value</code>, but
&lsquo;<samp><span class="samp">i type ^value$</span></samp>&rsquo; gives information only on types whose complete
name is <code>value</code>.
<p>This command differs from <code>ptype</code> in two ways: first, like
<code>whatis</code>, it does not print a detailed description; second, it
lists all source files where a type is defined.
<p><a name="index-info-scope-899"></a><a name="index-local-variables-900"></a><br><dt><code>info scope </code><var>location</var><dd>List all the variables local to a particular scope. This command
accepts a <var>location</var> argument&mdash;a function name, a source line, or
an address preceded by a &lsquo;<samp><span class="samp">*</span></samp>&rsquo;, and prints all the variables local
to the scope defined by that location. (See <a href="Specify-Location.html#Specify-Location">Specify Location</a>, for
details about supported forms of <var>location</var>.) For example:
<pre class="smallexample"> (gdb) <b>info scope command_line_handler</b>
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.
</pre>
<p class="noindent">This command is especially useful for determining what data to collect
during a <dfn>trace experiment</dfn>, see <a href="Tracepoint-Actions.html#Tracepoint-Actions">collect</a>.
<p><a name="index-info-source-901"></a><br><dt><code>info source</code><dd>Show information about the current source file&mdash;that is, the source file for
the function containing the current point of execution:
<ul>
<li>the name of the source file, and the directory containing it,
<li>the directory it was compiled in,
<li>its length, in lines,
<li>which programming language it is written in,
<li>whether the executable includes debugging information for that file, and
if so, what format the information is in (e.g., STABS, Dwarf 2, etc.), and
<li>whether the debugging information includes information about
preprocessor macros.
</ul>
<p><a name="index-info-sources-902"></a><br><dt><code>info sources</code><dd>Print the names of all source files in your program for which there is
debugging information, organized into two lists: files whose symbols
have already been read, and files whose symbols will be read when needed.
<p><a name="index-info-functions-903"></a><br><dt><code>info functions</code><dd>Print the names and data types of all defined functions.
<br><dt><code>info functions </code><var>regexp</var><dd>Print the names and data types of all defined functions
whose names contain a match for regular expression <var>regexp</var>.
Thus, &lsquo;<samp><span class="samp">info fun step</span></samp>&rsquo; finds all functions whose names
include <code>step</code>; &lsquo;<samp><span class="samp">info fun ^step</span></samp>&rsquo; finds those whose names
start with <code>step</code>. If a function name contains characters
that conflict with the regular expression language (e.g.
&lsquo;<samp><span class="samp">operator*()</span></samp>&rsquo;), they may be quoted with a backslash.
<p><a name="index-info-variables-904"></a><br><dt><code>info variables</code><dd>Print the names and data types of all variables that are defined
outside of functions (i.e. excluding local variables).
<br><dt><code>info variables </code><var>regexp</var><dd>Print the names and data types of all variables (except for local
variables) whose names contain a match for regular expression
<var>regexp</var>.
<p><a name="index-info-classes-905"></a><a name="index-Objective_002dC_002c-classes-and-selectors-906"></a><br><dt><code>info classes</code><dt><code>info classes </code><var>regexp</var><dd>Display all Objective-C classes in your program, or
(with the <var>regexp</var> argument) all those matching a particular regular
expression.
<p><a name="index-info-selectors-907"></a><br><dt><code>info selectors</code><dt><code>info selectors </code><var>regexp</var><dd>Display all Objective-C selectors in your program, or
(with the <var>regexp</var> argument) all those matching a particular regular
expression.
<p><a name="index-reloading-symbols-908"></a>Some systems allow individual object files that make up your program to
be replaced without stopping and restarting your program. For example,
in VxWorks you can simply recompile a defective object file and keep on
running. If you are running on one of these systems, you can allow
<span class="sc">gdb</span> to reload the symbols for automatically relinked modules:
<a name="index-set-symbol_002dreloading-909"></a>
<dl><dt><code>set symbol-reloading on</code><dd>Replace symbol definitions for the corresponding source file when an
object file with a particular name is seen again.
<br><dt><code>set symbol-reloading off</code><dd>Do not replace symbol definitions when encountering object files of the
same name more than once. This is the default state; if you are not
running on a system that permits automatic relinking of modules, you
should leave <code>symbol-reloading</code> off, since otherwise <span class="sc">gdb</span>
may discard symbols when linking large programs, that may contain
several modules (from different directories or libraries) with the same
name.
<p><a name="index-show-symbol_002dreloading-910"></a><br><dt><code>show symbol-reloading</code><dd>Show the current <code>on</code> or <code>off</code> setting.
</dl>
<p><a name="index-opaque-data-types-911"></a><a name="index-set-opaque_002dtype_002dresolution-912"></a><br><dt><code>set opaque-type-resolution on</code><dd>Tell <span class="sc">gdb</span> to resolve opaque types. An opaque type is a type
declared as a pointer to a <code>struct</code>, <code>class</code>, or
<code>union</code>&mdash;for example, <code>struct MyType *</code>&mdash;that is used in one
source file although the full declaration of <code>struct MyType</code> is in
another source file. The default is on.
<p>A change in the setting of this subcommand will not take effect until
the next time symbols for a file are loaded.
<br><dt><code>set opaque-type-resolution off</code><dd>Tell <span class="sc">gdb</span> not to resolve opaque types. In this case, the type
is printed as follows:
<pre class="smallexample"> {&lt;no data fields&gt;}
</pre>
<p><a name="index-show-opaque_002dtype_002dresolution-913"></a><br><dt><code>show opaque-type-resolution</code><dd>Show whether opaque types are resolved or not.
<p><a name="index-maint-print-symbols-914"></a><a name="index-symbol-dump-915"></a><a name="index-maint-print-psymbols-916"></a><a name="index-partial-symbol-dump-917"></a><br><dt><code>maint print symbols </code><var>filename</var><dt><code>maint print psymbols </code><var>filename</var><dt><code>maint print msymbols </code><var>filename</var><dd>Write a dump of debugging symbol data into the file <var>filename</var>.
These commands are used to debug the <span class="sc">gdb</span> symbol-reading code. Only
symbols with debugging data are included. If you use &lsquo;<samp><span class="samp">maint print
symbols</span></samp>&rsquo;, <span class="sc">gdb</span> includes all the symbols for which it has already
collected full details: that is, <var>filename</var> reflects symbols for
only those files whose symbols <span class="sc">gdb</span> has read. You can use the
command <code>info sources</code> to find out which files these are. If you
use &lsquo;<samp><span class="samp">maint print psymbols</span></samp>&rsquo; instead, the dump shows information about
symbols that <span class="sc">gdb</span> only knows partially&mdash;that is, symbols defined in
files that <span class="sc">gdb</span> has skimmed, but not yet read completely. Finally,
&lsquo;<samp><span class="samp">maint print msymbols</span></samp>&rsquo; dumps just the minimal symbol information
required for each object file from which <span class="sc">gdb</span> has read some symbols.
See <a href="Files.html#Files">Commands to Specify Files</a>, for a discussion of how
<span class="sc">gdb</span> reads symbols (in the description of <code>symbol-file</code>).
<p><a name="index-maint-info-symtabs-918"></a><a name="index-maint-info-psymtabs-919"></a><a name="index-listing-_0040value_007bGDBN_007d_0027s-internal-symbol-tables-920"></a><a name="index-symbol-tables_002c-listing-_0040value_007bGDBN_007d_0027s-internal-921"></a><a name="index-full-symbol-tables_002c-listing-_0040value_007bGDBN_007d_0027s-internal-922"></a><a name="index-partial-symbol-tables_002c-listing-_0040value_007bGDBN_007d_0027s-internal-923"></a><br><dt><code>maint info symtabs </code><span class="roman">[</span> <var>regexp</var> <span class="roman">]</span><dt><code>maint info psymtabs </code><span class="roman">[</span> <var>regexp</var> <span class="roman">]</span><dd>
List the <code>struct symtab</code> or <code>struct partial_symtab</code>
structures whose names match <var>regexp</var>. If <var>regexp</var> is not
given, list them all. The output includes expressions which you can
copy into a <span class="sc">gdb</span> debugging this one to examine a particular
structure in more detail. For example:
<pre class="smallexample"> (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)
</pre>
<p class="noindent">We see that there is one partial symbol table whose filename contains
the string &lsquo;<samp><span class="samp">dwarf2read</span></samp>&rsquo;, belonging to the &lsquo;<samp><span class="samp">gdb</span></samp>&rsquo; executable;
and we see that <span class="sc">gdb</span> has not read in any symtabs yet at all.
If we set a breakpoint on a function, that will cause <span class="sc">gdb</span> to
read the symtab for the compilation unit containing that function:
<pre class="smallexample"> (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)
linetable ((struct linetable *) 0x8370fa0)
debugformat DWARF 2
}
}
(gdb)
</pre>
</dl>
</body></html>