|
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <!-- Copyright (C) 1988-2020 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." -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Symbols (Debugging with GDB)</title>
-
- <meta name="description" content="Symbols (Debugging with GDB)">
- <meta name="keywords" content="Symbols (Debugging with GDB)">
- <meta name="resource-type" content="document">
- <meta name="distribution" content="global">
- <meta name="Generator" content="makeinfo">
- <link href="index.html#Top" rel="start" title="Top">
- <link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
- <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
- <link href="index.html#Top" rel="up" title="Top">
- <link href="Altering.html#Altering" rel="next" title="Altering">
- <link href="Unsupported-Languages.html#Unsupported-Languages" rel="prev" title="Unsupported Languages">
- <style type="text/css">
- <!--
- a.summary-letter {text-decoration: none}
- blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
- div.display {margin-left: 3.2em}
- div.example {margin-left: 3.2em}
- div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
- kbd {font-style: oblique}
- pre.display {font-family: inherit}
- pre.format {font-family: inherit}
- pre.menu-comment {font-family: serif}
- pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
- span.nolinebreak {white-space: nowrap}
- span.roman {font-family: initial; font-weight: normal}
- span.sansserif {font-family: sans-serif; font-weight: normal}
- ul.no-bullet {list-style: none}
- -->
- </style>
-
-
- </head>
-
- <body lang="en">
- <a name="Symbols"></a>
- <div class="header">
- <p>
- Next: <a href="Altering.html#Altering" accesskey="n" rel="next">Altering</a>, Previous: <a href="Languages.html#Languages" accesskey="p" rel="prev">Languages</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <hr>
- <a name="Examining-the-Symbol-Table"></a>
- <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. <small>GDB</small> finds it in your
- program’s symbol table, in the file indicated when you started <small>GDB</small>
- (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"></a>
- <a name="index-names-of-symbols"></a>
- <a name="index-quoting-names"></a>
- <a name="quoting-names"></a><p>Occasionally, you may need to refer to symbols that contain unusual
- characters, which <small>GDB</small> 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 <small>GDB</small> would
- ordinarily parse a typical file name, like <samp>foo.c</samp>, as the three words
- ‘<samp>foo</samp>’ ‘<samp>.</samp>’ ‘<samp>c</samp>’. To allow <small>GDB</small> to recognize
- ‘<samp>foo.c</samp>’ as a single symbol, enclose it in single quotes; for example,
- </p>
- <div class="smallexample">
- <pre class="smallexample">p 'foo.c'::x
- </pre></div>
-
- <p>looks up the value of <code>x</code> in the scope of the file <samp>foo.c</samp>.
- </p>
- <dl compact="compact">
- <dd><a name="index-case_002dinsensitive-symbol-names"></a>
- <a name="index-case-sensitivity-in-symbol-names"></a>
- <a name="index-set-case_002dsensitive"></a>
- </dd>
- <dt><code>set case-sensitive on</code></dt>
- <dt><code>set case-sensitive off</code></dt>
- <dt><code>set case-sensitive auto</code></dt>
- <dd><p>Normally, when <small>GDB</small> 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"></a>
- </dd>
- <dt><code>show case-sensitive</code></dt>
- <dd><p>This command shows the current setting of case sensitivity for symbols
- lookups.
- </p>
- <a name="index-set-print-type-methods"></a>
- </dd>
- <dt><code>set print type methods</code></dt>
- <dt><code>set print type methods on</code></dt>
- <dt><code>set print type methods off</code></dt>
- <dd><p>Normally, when <small>GDB</small> prints a class, it displays any methods
- declared in that class. You can control this behavior either by
- passing the appropriate flag to <code>ptype</code>, or using <code>set
- print type methods</code>. Specifying <code>on</code> will cause <small>GDB</small> to
- display the methods; this is the default. Specifying <code>off</code> will
- cause <small>GDB</small> to omit the methods.
- </p>
- <a name="index-show-print-type-methods"></a>
- </dd>
- <dt><code>show print type methods</code></dt>
- <dd><p>This command shows the current setting of method display when printing
- classes.
- </p>
- <a name="index-set-print-type-nested_002dtype_002dlimit"></a>
- </dd>
- <dt><code>set print type nested-type-limit <var>limit</var></code></dt>
- <dt><code>set print type nested-type-limit unlimited</code></dt>
- <dd><p>Set the limit of displayed nested types that the type printer will
- show. A <var>limit</var> of <code>unlimited</code> or <code>-1</code> will show all
- nested definitions. By default, the type printer will not show any nested
- types defined in classes.
- </p>
- <a name="index-show-print-type-nested_002dtype_002dlimit"></a>
- </dd>
- <dt><code>show print type nested-type-limit</code></dt>
- <dd><p>This command shows the current display limit of nested types when
- printing classes.
- </p>
- <a name="index-set-print-type-typedefs"></a>
- </dd>
- <dt><code>set print type typedefs</code></dt>
- <dt><code>set print type typedefs on</code></dt>
- <dt><code>set print type typedefs off</code></dt>
- <dd>
- <p>Normally, when <small>GDB</small> prints a class, it displays any typedefs
- defined in that class. You can control this behavior either by
- passing the appropriate flag to <code>ptype</code>, or using <code>set
- print type typedefs</code>. Specifying <code>on</code> will cause <small>GDB</small> to
- display the typedef definitions; this is the default. Specifying
- <code>off</code> will cause <small>GDB</small> to omit the typedef definitions.
- Note that this controls whether the typedef definition itself is
- printed, not whether typedef names are substituted when printing other
- types.
- </p>
- <a name="index-show-print-type-typedefs"></a>
- </dd>
- <dt><code>show print type typedefs</code></dt>
- <dd><p>This command shows the current setting of typedef display when
- printing classes.
- </p>
- <a name="index-info-address"></a>
- <a name="index-address-of-a-symbol"></a>
- </dd>
- <dt><code>info address <var>symbol</var></code></dt>
- <dd><p>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>
- <p>Note the contrast with ‘<samp>print &<var>symbol</var></samp>’, 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"></a>
- <a name="index-symbol-from-address"></a>
- <a name="index-closest-symbol-and-offset-for-an-address"></a>
- </dd>
- <dt><code>info symbol <var>addr</var></code></dt>
- <dd><p>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>, <small>GDB</small> prints the
- nearest symbol and an offset from it:
- </p>
- <div class="smallexample">
- <pre class="smallexample">(gdb) info symbol 0x54320
- _initialize_vx + 396 in section .text
- </pre></div>
-
- <p>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>
- <p>For dynamically linked executables, the name of executable or shared
- library containing the symbol is also printed:
- </p>
- <div class="smallexample">
- <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></div>
-
- <a name="index-demangle-1"></a>
- <a name="index-demangle"></a>
- </dd>
- <dt><code>demangle <span class="roman">[</span>-l <var>language</var><span class="roman">]</span> <span class="roman">[</span><var>--</var><span class="roman">]</span> <var>name</var></code></dt>
- <dd><p>Demangle <var>name</var>.
- If <var>language</var> is provided it is the name of the language to demangle
- <var>name</var> in. Otherwise <var>name</var> is demangled in the current language.
- </p>
- <p>The ‘<samp>--</samp>’ option specifies the end of options,
- and is useful when <var>name</var> begins with a dash.
- </p>
- <p>The parameter <code>demangle-style</code> specifies how to interpret the kind
- of mangling used. See <a href="Print-Settings.html#Print-Settings">Print Settings</a>.
- </p>
- <a name="index-whatis"></a>
- </dd>
- <dt><code>whatis[/<var>flags</var>] [<var>arg</var>]</code></dt>
- <dd><p>Print the data type of <var>arg</var>, which can be either an expression
- or a name of a data type. With no argument, print the data type of
- <code>$</code>, the last value in the value history.
- </p>
- <p>If <var>arg</var> is an expression (see <a href="Expressions.html#Expressions">Expressions</a>), it
- is not actually evaluated, and any side-effecting operations (such as
- assignments or function calls) inside it do not take place.
- </p>
- <p>If <var>arg</var> is a variable or an expression, <code>whatis</code> prints its
- literal type as it is used in the source code. If the type was
- defined using a <code>typedef</code>, <code>whatis</code> will <em>not</em> print
- the data type underlying the <code>typedef</code>. If the type of the
- variable or the expression is a compound data type, such as
- <code>struct</code> or <code>class</code>, <code>whatis</code> never prints their
- fields or methods. It just prints the <code>struct</code>/<code>class</code>
- name (a.k.a. its <em>tag</em>). If you want to see the members of
- such a compound data type, use <code>ptype</code>.
- </p>
- <p>If <var>arg</var> is a type name that was defined using <code>typedef</code>,
- <code>whatis</code> <em>unrolls</em> only one level of that <code>typedef</code>.
- Unrolling means that <code>whatis</code> will show the underlying type used
- in the <code>typedef</code> declaration of <var>arg</var>. However, if that
- underlying type is also a <code>typedef</code>, <code>whatis</code> will not
- unroll it.
- </p>
- <p>For C code, the type names may also have the form ‘<samp>class
- <var>class-name</var></samp>’, ‘<samp>struct <var>struct-tag</var></samp>’, ‘<samp>union
- <var>union-tag</var></samp>’ or ‘<samp>enum <var>enum-tag</var></samp>’.
- </p>
- <p><var>flags</var> can be used to modify how the type is displayed.
- Available flags are:
- </p>
- <dl compact="compact">
- <dt><code>r</code></dt>
- <dd><p>Display in “raw” form. Normally, <small>GDB</small> substitutes template
- parameters and typedefs defined in a class when printing the class’
- members. The <code>/r</code> flag disables this.
- </p>
- </dd>
- <dt><code>m</code></dt>
- <dd><p>Do not print methods defined in the class.
- </p>
- </dd>
- <dt><code>M</code></dt>
- <dd><p>Print methods defined in the class. This is the default, but the flag
- exists in case you change the default with <code>set print type methods</code>.
- </p>
- </dd>
- <dt><code>t</code></dt>
- <dd><p>Do not print typedefs defined in the class. Note that this controls
- whether the typedef definition itself is printed, not whether typedef
- names are substituted when printing other types.
- </p>
- </dd>
- <dt><code>T</code></dt>
- <dd><p>Print typedefs defined in the class. This is the default, but the flag
- exists in case you change the default with <code>set print type typedefs</code>.
- </p>
- </dd>
- <dt><code>o</code></dt>
- <dd><p>Print the offsets and sizes of fields in a struct, similar to what the
- <code>pahole</code> tool does. This option implies the <code>/tm</code> flags.
- </p>
- <p>For example, given the following declarations:
- </p>
- <div class="smallexample">
- <pre class="smallexample">struct tuv
- {
- int a1;
- char *a2;
- int a3;
- };
-
- struct xyz
- {
- int f1;
- char f2;
- void *f3;
- struct tuv f4;
- };
-
- union qwe
- {
- struct tuv fff1;
- struct xyz fff2;
- };
-
- struct tyu
- {
- int a1 : 1;
- int a2 : 3;
- int a3 : 23;
- char a4 : 2;
- int64_t a5;
- int a6 : 5;
- int64_t a7 : 3;
- };
- </pre></div>
-
- <p>Issuing a <kbd>ptype /o struct tuv</kbd> command would print:
- </p>
- <div class="smallexample">
- <pre class="smallexample">(gdb) ptype /o struct tuv
- /* offset | size */ type = struct tuv {
- /* 0 | 4 */ int a1;
- /* XXX 4-byte hole */
- /* 8 | 8 */ char *a2;
- /* 16 | 4 */ int a3;
-
- /* total size (bytes): 24 */
- }
- </pre></div>
-
- <p>Notice the format of the first column of comments. There, you can
- find two parts separated by the ‘<samp>|</samp>’ character: the <em>offset</em>,
- which indicates where the field is located inside the struct, in
- bytes, and the <em>size</em> of the field. Another interesting line is
- the marker of a <em>hole</em> in the struct, indicating that it may be
- possible to pack the struct and make it use less space by reorganizing
- its fields.
- </p>
- <p>It is also possible to print offsets inside an union:
- </p>
- <div class="smallexample">
- <pre class="smallexample">(gdb) ptype /o union qwe
- /* offset | size */ type = union qwe {
- /* 24 */ struct tuv {
- /* 0 | 4 */ int a1;
- /* XXX 4-byte hole */
- /* 8 | 8 */ char *a2;
- /* 16 | 4 */ int a3;
-
- /* total size (bytes): 24 */
- } fff1;
- /* 40 */ struct xyz {
- /* 0 | 4 */ int f1;
- /* 4 | 1 */ char f2;
- /* XXX 3-byte hole */
- /* 8 | 8 */ void *f3;
- /* 16 | 24 */ struct tuv {
- /* 16 | 4 */ int a1;
- /* XXX 4-byte hole */
- /* 24 | 8 */ char *a2;
- /* 32 | 4 */ int a3;
-
- /* total size (bytes): 24 */
- } f4;
-
- /* total size (bytes): 40 */
- } fff2;
-
- /* total size (bytes): 40 */
- }
- </pre></div>
-
- <p>In this case, since <code>struct tuv</code> and <code>struct xyz</code> occupy the
- same space (because we are dealing with an union), the offset is not
- printed for them. However, you can still examine the offset of each
- of these structures’ fields.
- </p>
- <p>Another useful scenario is printing the offsets of a struct containing
- bitfields:
- </p>
- <div class="smallexample">
- <pre class="smallexample">(gdb) ptype /o struct tyu
- /* offset | size */ type = struct tyu {
- /* 0:31 | 4 */ int a1 : 1;
- /* 0:28 | 4 */ int a2 : 3;
- /* 0: 5 | 4 */ int a3 : 23;
- /* 3: 3 | 1 */ signed char a4 : 2;
- /* XXX 3-bit hole */
- /* XXX 4-byte hole */
- /* 8 | 8 */ int64_t a5;
- /* 16: 0 | 4 */ int a6 : 5;
- /* 16: 5 | 8 */ int64_t a7 : 3;
- "/* XXX 7-byte padding */
-
- /* total size (bytes): 24 */
- }
- </pre></div>
-
- <p>Note how the offset information is now extended to also include the
- first bit of the bitfield.
- </p></dd>
- </dl>
-
- <a name="index-ptype"></a>
- </dd>
- <dt><code>ptype[/<var>flags</var>] [<var>arg</var>]</code></dt>
- <dd><p><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>
- <p>Contrary to <code>whatis</code>, <code>ptype</code> always unrolls any
- <code>typedef</code>s in its argument declaration, whether the argument is
- a variable, expression, or a data type. This means that <code>ptype</code>
- of a variable or an expression will not print literally its type as
- present in the source code—use <code>whatis</code> for that. <code>typedef</code>s at
- the pointer or reference targets are also unrolled. Only <code>typedef</code>s of
- fields, methods and inner <code>class typedef</code>s of <code>struct</code>s,
- <code>class</code>es and <code>union</code>s are not unrolled even with <code>ptype</code>.
- </p>
- <p>For example, for this variable declaration:
- </p>
- <div class="smallexample">
- <pre class="smallexample">typedef double real_t;
- struct complex { real_t real; double imag; };
- typedef struct complex complex_t;
- complex_t var;
- real_t *real_pointer_var;
- </pre></div>
-
- <p>the two commands give this output:
- </p>
- <div class="smallexample">
- <pre class="smallexample">(gdb) whatis var
- type = complex_t
- (gdb) ptype var
- type = struct complex {
- real_t real;
- double imag;
- }
- (gdb) whatis complex_t
- type = struct complex
- (gdb) whatis struct complex
- type = struct complex
- (gdb) ptype struct complex
- type = struct complex {
- real_t real;
- double imag;
- }
- (gdb) whatis real_pointer_var
- type = real_t *
- (gdb) ptype real_pointer_var
- type = double *
- </pre></div>
-
- <p>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"></a>
- <p>Sometimes, programs use opaque data types or incomplete specifications
- of complex data structure. If the debug information included in the
- program does not allow <small>GDB</small> to display a full declaration of
- the data type, it will say ‘<samp><incomplete type></samp>’. For example,
- given these declarations:
- </p>
- <div class="smallexample">
- <pre class="smallexample"> struct foo;
- struct foo *fooptr;
- </pre></div>
-
- <p>but no definition for <code>struct foo</code> itself, <small>GDB</small> will say:
- </p>
- <div class="smallexample">
- <pre class="smallexample"> (gdb) ptype foo
- $1 = <incomplete type>
- </pre></div>
-
- <p>“Incomplete type” is C terminology for data types that are not
- completely specified.
- </p>
- <a name="index-unknown-type"></a>
- <p>Othertimes, information about a variable’s type is completely absent
- from the debug information included in the program. This most often
- happens when the program or library where the variable is defined
- includes no debug information at all. <small>GDB</small> knows the variable
- exists from inspecting the linker/loader symbol table (e.g., the ELF
- dynamic symbol table), but such symbols do not contain type
- information. Inspecting the type of a (global) variable for which
- <small>GDB</small> has no type information shows:
- </p>
- <div class="smallexample">
- <pre class="smallexample"> (gdb) ptype var
- type = <data variable, no debug info>
- </pre></div>
-
- <p>See <a href="Variables.html#Variables">no debug info variables</a>, for how to print the values
- of such variables.
- </p>
- <a name="index-info-types"></a>
- </dd>
- <dt><code>info types [-q] [<var>regexp</var>]</code></dt>
- <dd><p>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, ‘<samp>i type value</samp>’ gives information on all
- types in your program whose names include the string <code>value</code>, but
- ‘<samp>i type ^value$</samp>’ gives information only on types whose complete
- name is <code>value</code>.
- </p>
- <p>In programs using different languages, <small>GDB</small> chooses the syntax
- to print the type description according to the
- ‘<samp>set language</samp>’ value: using ‘<samp>set language auto</samp>’
- (see <a href="Automatically.html#Automatically">Set Language Automatically</a>) means to use the
- language of the type, other values mean to use
- the manually specified language (see <a href="Manually.html#Manually">Set Language Manually</a>).
- </p>
- <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 and line numbers where a type is defined.
- </p>
- <p>The output from ‘<samp>into types</samp>’ is proceeded with a header line
- describing what types are being listed. The optional flag ‘<samp>-q</samp>’,
- which stands for ‘<samp>quiet</samp>’, disables printing this header
- information.
- </p>
- <a name="index-info-type_002dprinters"></a>
- </dd>
- <dt><code>info type-printers</code></dt>
- <dd><p>Versions of <small>GDB</small> that ship with Python scripting enabled may
- have “type printers” available. When using <code>ptype</code> or
- <code>whatis</code>, these printers are consulted when the name of a type
- is needed. See <a href="Type-Printing-API.html#Type-Printing-API">Type Printing API</a>, for more information on writing
- type printers.
- </p>
- <p><code>info type-printers</code> displays all the available type printers.
- </p>
- <a name="index-enable-type_002dprinter"></a>
- <a name="index-disable-type_002dprinter"></a>
- </dd>
- <dt><code>enable type-printer <var>name</var>…</code></dt>
- <dt><code>disable type-printer <var>name</var>…</code></dt>
- <dd><p>These commands can be used to enable or disable type printers.
- </p>
- <a name="index-info-scope"></a>
- <a name="index-local-variables"></a>
- </dd>
- <dt><code>info scope <var>location</var></code></dt>
- <dd><p>List all the variables local to a particular scope. This command
- accepts a <var>location</var> argument—a function name, a source line, or
- an address preceded by a ‘<samp>*</samp>’, 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:
- </p>
- <div class="smallexample">
- <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></div>
-
- <p>This command is especially useful for determining what data to collect
- during a <em>trace experiment</em>, see <a href="Tracepoint-Actions.html#Tracepoint-Actions">collect</a>.
- </p>
- <a name="index-info-source"></a>
- </dd>
- <dt><code>info source</code></dt>
- <dd><p>Show information about the current source file—that is, the source file for
- the function containing the current point of execution:
- </p><ul>
- <li> the name of the source file, and the directory containing it,
- </li><li> the directory it was compiled in,
- </li><li> its length, in lines,
- </li><li> which programming language it is written in,
- </li><li> if the debug information provides it, the program that compiled the file
- (which may include, e.g., the compiler version and command line arguments),
- </li><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><li> whether the debugging information includes information about
- preprocessor macros.
- </li></ul>
-
-
- <a name="index-info-sources"></a>
- </dd>
- <dt><code>info sources</code></dt>
- <dd><p>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>
- </dd>
- <dt><code>info sources [-dirname | -basename] [--] [<var>regexp</var>]</code></dt>
- <dd><p>Like ‘<samp>info sources</samp>’, but only print the names of the files
- matching the provided <var>regexp</var>.
- By default, the <var>regexp</var> is used to match anywhere in the filename.
- If <code>-dirname</code>, only files having a dirname matching <var>regexp</var> are shown.
- If <code>-basename</code>, only files having a basename matching <var>regexp</var>
- are shown.
- The matching is case-sensitive, except on operating systems that
- have case-insensitive filesystem (e.g., MS-Windows).
- </p>
- <a name="index-info-functions"></a>
- </dd>
- <dt><code>info functions [-q] [-n]</code></dt>
- <dd><p>Print the names and data types of all defined functions.
- Similarly to ‘<samp>info types</samp>’, this command groups its output by source
- files and annotates each function definition with its source line
- number.
- </p>
- <p>In programs using different languages, <small>GDB</small> chooses the syntax
- to print the function name and type according to the
- ‘<samp>set language</samp>’ value: using ‘<samp>set language auto</samp>’
- (see <a href="Automatically.html#Automatically">Set Language Automatically</a>) means to use the
- language of the function, other values mean to use
- the manually specified language (see <a href="Manually.html#Manually">Set Language Manually</a>).
- </p>
- <p>The ‘<samp>-n</samp>’ flag excludes <em>non-debugging symbols</em> from the
- results. A non-debugging symbol is a symbol that comes from the
- executable’s symbol table, not from the debug information (for
- example, DWARF) associated with the executable.
- </p>
- <p>The optional flag ‘<samp>-q</samp>’, which stands for ‘<samp>quiet</samp>’, disables
- printing header information and messages explaining why no functions
- have been printed.
- </p>
- </dd>
- <dt><code>info functions [-q] [-n] [-t <var>type_regexp</var>] [<var>regexp</var>]</code></dt>
- <dd><p>Like ‘<samp>info functions</samp>’, but only print the names and data types
- of the functions selected with the provided regexp(s).
- </p>
- <p>If <var>regexp</var> is provided, print only the functions whose names
- match the regular expression <var>regexp</var>.
- Thus, ‘<samp>info fun step</samp>’ finds all functions whose
- names include <code>step</code>; ‘<samp>info fun ^step</samp>’ finds those whose names
- start with <code>step</code>. If a function name contains characters that
- conflict with the regular expression language (e.g.
- ‘<samp>operator*()</samp>’), they may be quoted with a backslash.
- </p>
- <p>If <var>type_regexp</var> is provided, print only the functions whose
- types, as printed by the <code>whatis</code> command, match
- the regular expression <var>type_regexp</var>.
- If <var>type_regexp</var> contains space(s), it should be enclosed in
- quote characters. If needed, use backslash to escape the meaning
- of special characters or quotes.
- Thus, ‘<samp>info fun -t '^int ('</samp>’ finds the functions that return
- an integer; ‘<samp>info fun -t '(.*int.*'</samp>’ finds the functions that
- have an argument type containing int; ‘<samp>info fun -t '^int (' ^step</samp>’
- finds the functions whose names start with <code>step</code> and that return
- int.
- </p>
- <p>If both <var>regexp</var> and <var>type_regexp</var> are provided, a function
- is printed only if its name matches <var>regexp</var> and its type matches
- <var>type_regexp</var>.
- </p>
-
- <a name="index-info-variables"></a>
- </dd>
- <dt><code>info variables [-q] [-n]</code></dt>
- <dd><p>Print the names and data types of all variables that are defined
- outside of functions (i.e. excluding local variables).
- The printed variables are grouped by source files and annotated with
- their respective source line numbers.
- </p>
- <p>In programs using different languages, <small>GDB</small> chooses the syntax
- to print the variable name and type according to the
- ‘<samp>set language</samp>’ value: using ‘<samp>set language auto</samp>’
- (see <a href="Automatically.html#Automatically">Set Language Automatically</a>) means to use the
- language of the variable, other values mean to use
- the manually specified language (see <a href="Manually.html#Manually">Set Language Manually</a>).
- </p>
- <p>The ‘<samp>-n</samp>’ flag excludes non-debugging symbols from the results.
- </p>
- <p>The optional flag ‘<samp>-q</samp>’, which stands for ‘<samp>quiet</samp>’, disables
- printing header information and messages explaining why no variables
- have been printed.
- </p>
- </dd>
- <dt><code>info variables [-q] [-n] [-t <var>type_regexp</var>] [<var>regexp</var>]</code></dt>
- <dd><p>Like <kbd>info variables</kbd>, but only print the variables selected
- with the provided regexp(s).
- </p>
- <p>If <var>regexp</var> is provided, print only the variables whose names
- match the regular expression <var>regexp</var>.
- </p>
- <p>If <var>type_regexp</var> is provided, print only the variables whose
- types, as printed by the <code>whatis</code> command, match
- the regular expression <var>type_regexp</var>.
- If <var>type_regexp</var> contains space(s), it should be enclosed in
- quote characters. If needed, use backslash to escape the meaning
- of special characters or quotes.
- </p>
- <p>If both <var>regexp</var> and <var>type_regexp</var> are provided, an argument
- is printed only if its name matches <var>regexp</var> and its type matches
- <var>type_regexp</var>.
- </p>
- <a name="index-info-modules"></a>
- <a name="index-modules"></a>
- </dd>
- <dt><code>info modules <span class="roman">[</span>-q<span class="roman">]</span> <span class="roman">[</span><var>regexp</var><span class="roman">]</span></code></dt>
- <dd><p>List all Fortran modules in the program, or all modules matching the
- optional regular expression <var>regexp</var>.
- </p>
- <p>The optional flag ‘<samp>-q</samp>’, which stands for ‘<samp>quiet</samp>’, disables
- printing header information and messages explaining why no modules
- have been printed.
- </p>
- <a name="index-info-module"></a>
- <a name="index-Fortran-modules_002c-information-about"></a>
- <a name="index-functions-and-variables-by-Fortran-module"></a>
- <a name="index-module-functions-and-variables"></a>
- </dd>
- <dt><code>info module functions <span class="roman">[</span>-q<span class="roman">]</span> <span class="roman">[</span>-m <var>module-regexp</var><span class="roman">]</span> <span class="roman">[</span>-t <var>type-regexp</var><span class="roman">]</span> <span class="roman">[</span><var>regexp</var><span class="roman">]</span></code></dt>
- <dt><code>info module variables <span class="roman">[</span>-q<span class="roman">]</span> <span class="roman">[</span>-m <var>module-regexp</var><span class="roman">]</span> <span class="roman">[</span>-t <var>type-regexp</var><span class="roman">]</span> <span class="roman">[</span><var>regexp</var><span class="roman">]</span></code></dt>
- <dd><p>List all functions or variables within all Fortran modules. The set
- of functions or variables listed can be limited by providing some or
- all of the optional regular expressions. If <var>module-regexp</var> is
- provided, then only Fortran modules matching <var>module-regexp</var> will
- be searched. Only functions or variables whose type matches the
- optional regular expression <var>type-regexp</var> will be listed. And
- only functions or variables whose name matches the optional regular
- expression <var>regexp</var> will be listed.
- </p>
- <p>The optional flag ‘<samp>-q</samp>’, which stands for ‘<samp>quiet</samp>’, disables
- printing header information and messages explaining why no functions
- or variables have been printed.
- </p>
- <a name="index-info-classes"></a>
- <a name="index-Objective_002dC_002c-classes-and-selectors"></a>
- </dd>
- <dt><code>info classes</code></dt>
- <dt><code>info classes <var>regexp</var></code></dt>
- <dd><p>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"></a>
- </dd>
- <dt><code>info selectors</code></dt>
- <dt><code>info selectors <var>regexp</var></code></dt>
- <dd><p>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-opaque-data-types"></a>
- <a name="index-set-opaque_002dtype_002dresolution"></a>
- </dd>
- <dt><code>set opaque-type-resolution on</code></dt>
- <dd><p>Tell <small>GDB</small> 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>—for example, <code>struct MyType *</code>—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>
- <p>A change in the setting of this subcommand will not take effect until
- the next time symbols for a file are loaded.
- </p>
- </dd>
- <dt><code>set opaque-type-resolution off</code></dt>
- <dd><p>Tell <small>GDB</small> not to resolve opaque types. In this case, the type
- is printed as follows:
- </p><div class="smallexample">
- <pre class="smallexample">{<no data fields>}
- </pre></div>
-
- <a name="index-show-opaque_002dtype_002dresolution"></a>
- </dd>
- <dt><code>show opaque-type-resolution</code></dt>
- <dd><p>Show whether opaque types are resolved or not.
- </p>
- <a name="index-set-print-symbol_002dloading"></a>
- <a name="index-print-messages-when-symbols-are-loaded"></a>
- </dd>
- <dt><code>set print symbol-loading</code></dt>
- <dt><code>set print symbol-loading full</code></dt>
- <dt><code>set print symbol-loading brief</code></dt>
- <dt><code>set print symbol-loading off</code></dt>
- <dd><p>The <code>set print symbol-loading</code> command allows you to control the
- printing of messages when <small>GDB</small> loads symbol information.
- By default a message is printed for the executable and one for each
- shared library, and normally this is what you want. However, when
- debugging apps with large numbers of shared libraries these messages
- can be annoying.
- When set to <code>brief</code> a message is printed for each executable,
- and when <small>GDB</small> loads a collection of shared libraries at once
- it will only print one message regardless of the number of shared
- libraries. When set to <code>off</code> no messages are printed.
- </p>
- <a name="index-show-print-symbol_002dloading"></a>
- </dd>
- <dt><code>show print symbol-loading</code></dt>
- <dd><p>Show whether messages will be printed when a <small>GDB</small> command
- entered from the keyboard causes symbol information to be loaded.
- </p>
- <a name="index-maint-print-symbols"></a>
- <a name="index-symbol-dump"></a>
- <a name="index-maint-print-psymbols"></a>
- <a name="index-partial-symbol-dump"></a>
- <a name="index-maint-print-msymbols"></a>
- <a name="index-minimal-symbol-dump"></a>
- </dd>
- <dt><code>maint print symbols <span class="roman">[</span>-pc <var>address</var><span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span></code></dt>
- <dt><code>maint print symbols <span class="roman">[</span>-objfile <var>objfile</var><span class="roman">]</span> <span class="roman">[</span>-source <var>source</var><span class="roman">]</span> <span class="roman">[</span>--<span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span></code></dt>
- <dt><code>maint print psymbols <span class="roman">[</span>-objfile <var>objfile</var><span class="roman">]</span> <span class="roman">[</span>-pc <var>address</var><span class="roman">]</span> <span class="roman">[</span>--<span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span></code></dt>
- <dt><code>maint print psymbols <span class="roman">[</span>-objfile <var>objfile</var><span class="roman">]</span> <span class="roman">[</span>-source <var>source</var><span class="roman">]</span> <span class="roman">[</span>--<span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span></code></dt>
- <dt><code>maint print msymbols <span class="roman">[</span>-objfile <var>objfile</var><span class="roman">]</span> <span class="roman">[</span>--<span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span></code></dt>
- <dd><p>Write a dump of debugging symbol data into the file <var>filename</var> or
- the terminal if <var>filename</var> is unspecified.
- If <code>-objfile <var>objfile</var></code> is specified, only dump symbols for
- that objfile.
- If <code>-pc <var>address</var></code> is specified, only dump symbols for the file
- with code at that address. Note that <var>address</var> may be a symbol like
- <code>main</code>.
- If <code>-source <var>source</var></code> is specified, only dump symbols for that
- source file.
- </p>
- <p>These commands are used to debug the <small>GDB</small> symbol-reading code.
- These commands do not modify internal <small>GDB</small> state, therefore
- ‘<samp>maint print symbols</samp>’ will only print symbols for already expanded symbol
- tables.
- You can use the command <code>info sources</code> to find out which files these are.
- If you use ‘<samp>maint print psymbols</samp>’ instead, the dump shows information
- about symbols that <small>GDB</small> only knows partially—that is, symbols
- defined in files that <small>GDB</small> has skimmed, but not yet read completely.
- Finally, ‘<samp>maint print msymbols</samp>’ just dumps “minimal symbols”, e.g.,
- “ELF symbols”.
- </p>
- <p>See <a href="Files.html#Files">Commands to Specify Files</a>, for a discussion of how
- <small>GDB</small> reads symbols (in the description of <code>symbol-file</code>).
- </p>
- <a name="index-maint-info-symtabs"></a>
- <a name="index-maint-info-psymtabs"></a>
- <a name="index-listing-GDB_0027s-internal-symbol-tables"></a>
- <a name="index-symbol-tables_002c-listing-GDB_0027s-internal"></a>
- <a name="index-full-symbol-tables_002c-listing-GDB_0027s-internal"></a>
- <a name="index-partial-symbol-tables_002c-listing-GDB_0027s-internal"></a>
- </dd>
- <dt><code>maint info symtabs <span class="roman">[</span> <var>regexp</var> <span class="roman">]</span></code></dt>
- <dt><code>maint info psymtabs <span class="roman">[</span> <var>regexp</var> <span class="roman">]</span></code></dt>
- <dd>
- <p>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 <small>GDB</small> debugging this one to examine a particular
- structure in more detail. For example:
- </p>
- <div class="smallexample">
- <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></div>
- <p>We see that there is one partial symbol table whose filename contains
- the string ‘<samp>dwarf2read</samp>’, belonging to the ‘<samp>gdb</samp>’ executable;
- and we see that <small>GDB</small> has not read in any symtabs yet at all.
- If we set a breakpoint on a function, that will cause <small>GDB</small> to
- read the symtab for the compilation unit containing that function:
- </p>
- <div class="smallexample">
- <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></div>
-
- <a name="index-maint-info-line_002dtable"></a>
- <a name="index-listing-GDB_0027s-internal-line-tables"></a>
- <a name="index-line-tables_002c-listing-GDB_0027s-internal"></a>
- </dd>
- <dt><code>maint info line-table <span class="roman">[</span> <var>regexp</var> <span class="roman">]</span></code></dt>
- <dd>
- <p>List the <code>struct linetable</code> from all <code>struct symtab</code>
- instances whose name matches <var>regexp</var>. If <var>regexp</var> is not
- given, list the <code>struct linetable</code> from all <code>struct symtab</code>.
- </p>
- <a name="index-maint-set-symbol_002dcache_002dsize"></a>
- <a name="index-symbol-cache-size"></a>
- </dd>
- <dt><code>maint set symbol-cache-size <var>size</var></code></dt>
- <dd><p>Set the size of the symbol cache to <var>size</var>.
- The default size is intended to be good enough for debugging
- most applications. This option exists to allow for experimenting
- with different sizes.
- </p>
- <a name="index-maint-show-symbol_002dcache_002dsize"></a>
- </dd>
- <dt><code>maint show symbol-cache-size</code></dt>
- <dd><p>Show the size of the symbol cache.
- </p>
- <a name="index-maint-print-symbol_002dcache"></a>
- <a name="index-symbol-cache_002c-printing-its-contents"></a>
- </dd>
- <dt><code>maint print symbol-cache</code></dt>
- <dd><p>Print the contents of the symbol cache.
- This is useful when debugging symbol cache issues.
- </p>
- <a name="index-maint-print-symbol_002dcache_002dstatistics"></a>
- <a name="index-symbol-cache_002c-printing-usage-statistics"></a>
- </dd>
- <dt><code>maint print symbol-cache-statistics</code></dt>
- <dd><p>Print symbol cache usage statistics.
- This helps determine how well the cache is being utilized.
- </p>
- <a name="index-maint-flush_002dsymbol_002dcache"></a>
- <a name="index-symbol-cache_002c-flushing"></a>
- </dd>
- <dt><code>maint flush-symbol-cache</code></dt>
- <dd><p>Flush the contents of the symbol cache, all entries are removed.
- This command is useful when debugging the symbol cache.
- It is also useful when collecting performance data.
- </p>
- </dd>
- </dl>
-
- <hr>
- <div class="header">
- <p>
- Next: <a href="Altering.html#Altering" accesskey="n" rel="next">Altering</a>, Previous: <a href="Languages.html#Languages" accesskey="p" rel="prev">Languages</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
- </div>
-
-
-
- </body>
- </html>
|