| <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-2019 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> |
| </head> |
| <body> |
| <div class="node"> |
| <a name="Symbols"></a> |
| <p> |
| Next: <a rel="next" accesskey="n" href="Altering.html#Altering">Altering</a>, |
| Previous: <a rel="previous" accesskey="p" href="Languages.html#Languages">Languages</a>, |
| Up: <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-1097"></a><a name="index-names-of-symbols-1098"></a><a name="index-quoting-names-1099"></a><a name="quoting-names"></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 |
| ‘<samp><span class="samp">foo</span></samp>’ ‘<samp><span class="samp">.</span></samp>’ ‘<samp><span class="samp">c</span></samp>’. To allow <span class="sc">gdb</span> to recognize |
| ‘<samp><span class="samp">foo.c</span></samp>’ 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-1100"></a> |
| <a name="index-case-sensitivity-in-symbol-names-1101"></a> |
| <a name="index-set-case_002dsensitive-1102"></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-1103"></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-set-print-type-methods-1104"></a><br><dt><code>set print type methods</code><dt><code>set print type methods on</code><dt><code>set print type methods off</code><dd>Normally, when <span class="sc">gdb</span> 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 <samp><span class="command">set |
| print type methods</span></samp>. Specifying <code>on</code> will cause <span class="sc">gdb</span> to |
| display the methods; this is the default. Specifying <code>off</code> will |
| cause <span class="sc">gdb</span> to omit the methods. |
| |
| <p><a name="index-show-print-type-methods-1105"></a><br><dt><code>show print type methods</code><dd>This command shows the current setting of method display when printing |
| classes. |
| |
| <p><a name="index-set-print-type-nested_002dtype_002dlimit-1106"></a><br><dt><code>set print type nested-type-limit </code><var>limit</var><dt><code>set print type nested-type-limit unlimited</code><dd>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-1107"></a><br><dt><code>show print type nested-type-limit</code><dd>This command shows the current display limit of nested types when |
| printing classes. |
| |
| <p><a name="index-set-print-type-typedefs-1108"></a><br><dt><code>set print type typedefs</code><dt><code>set print type typedefs on</code><dt><code>set print type typedefs off</code><dd> |
| Normally, when <span class="sc">gdb</span> 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 <samp><span class="command">set |
| print type typedefs</span></samp>. Specifying <code>on</code> will cause <span class="sc">gdb</span> to |
| display the typedef definitions; this is the default. Specifying |
| <code>off</code> will cause <span class="sc">gdb</span> 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-1109"></a><br><dt><code>show print type typedefs</code><dd>This command shows the current setting of typedef display when |
| printing classes. |
| |
| <p><a name="index-info-address-1110"></a><a name="index-address-of-a-symbol-1111"></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 ‘<samp><span class="samp">print &</span><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-1112"></a><a name="index-symbol-from-address-1113"></a><a name="index-closest-symbol-and-offset-for-an-address-1114"></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-demangle-1115"></a><a name="index-demangle-1116"></a><br><dt><code>demangle </code><span class="roman">[</span><code>-l </code><var>language</var><span class="roman">]</span> <span class="roman">[</span><var>–</var><span class="roman">]</span> <var>name</var><dd>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>The ‘<samp><span class="samp">--</span></samp>’ option specifies the end of options, |
| and is useful when <var>name</var> begins with a dash. |
| |
| <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-1117"></a><br><dt><code>whatis[/</code><var>flags</var><code>] [</code><var>arg</var><code>]</code><dd>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>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>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 <dfn>tag</dfn>). If you want to see the members of |
| such a compound data type, use <code>ptype</code>. |
| |
| <p>If <var>arg</var> is a type name that was defined using <code>typedef</code>, |
| <code>whatis</code> <dfn>unrolls</dfn> 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>For C code, the type names may also have the form ‘<samp><span class="samp">class |
| </span><var>class-name</var></samp>’, ‘<samp><span class="samp">struct </span><var>struct-tag</var></samp>’, ‘<samp><span class="samp">union |
| </span><var>union-tag</var></samp>’ or ‘<samp><span class="samp">enum </span><var>enum-tag</var></samp>’. |
| |
| <p><var>flags</var> can be used to modify how the type is displayed. |
| Available flags are: |
| |
| <dl> |
| <dt><code>r</code><dd>Display in “raw” form. Normally, <span class="sc">gdb</span> substitutes template |
| parameters and typedefs defined in a class when printing the class' |
| members. The <code>/r</code> flag disables this. |
| |
| <br><dt><code>m</code><dd>Do not print methods defined in the class. |
| |
| <br><dt><code>M</code><dd>Print methods defined in the class. This is the default, but the flag |
| exists in case you change the default with <samp><span class="command">set print type methods</span></samp>. |
| |
| <br><dt><code>t</code><dd>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. |
| |
| <br><dt><code>T</code><dd>Print typedefs defined in the class. This is the default, but the flag |
| exists in case you change the default with <samp><span class="command">set print type typedefs</span></samp>. |
| |
| <br><dt><code>o</code><dd>Print the offsets and sizes of fields in a struct, similar to what the |
| <samp><span class="command">pahole</span></samp> tool does. This option implies the <code>/tm</code> flags. |
| |
| <p>For example, given the following declarations: |
| |
| <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> |
| <p>Issuing a <kbd>ptype /o struct tuv</kbd> command would print: |
| |
| <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> |
| <p>Notice the format of the first column of comments. There, you can |
| find two parts separated by the ‘<samp><span class="samp">|</span></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>It is also possible to print offsets inside an union: |
| |
| <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> |
| <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>Another useful scenario is printing the offsets of a struct containing |
| bitfields: |
| |
| <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:27 | 4 */ int a6 : 5; |
| /* 16:56 | 8 */ int64_t a7 : 3; |
| |
| /* total size (bytes): 24 */ |
| } |
| </pre> |
| <p>Note how the offset information is now extended to also include how |
| many bits are left to be used in each bitfield. |
| </dl> |
| |
| <p><a name="index-ptype-1118"></a><br><dt><code>ptype[/</code><var>flags</var><code>] [</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>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>For example, for this variable declaration: |
| |
| <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> |
| <p class="noindent">the two commands give this output: |
| |
| <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> |
| <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-1119"></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 ‘<samp><span class="samp"><incomplete type></span></samp>’. 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 = <incomplete type> |
| </pre> |
| <p class="noindent">“Incomplete type” is C terminology for data types that are not |
| completely specified. |
| |
| <p><a name="index-unknown-type-1120"></a>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. <span class="sc">gdb</span> 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 |
| <span class="sc">gdb</span> has no type information shows: |
| |
| <pre class="smallexample"> (gdb) ptype var |
| type = <data variable, no debug info> |
| </pre> |
| <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-1121"></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, ‘<samp><span class="samp">i type value</span></samp>’ gives information on all |
| types in your program whose names include the string <code>value</code>, but |
| ‘<samp><span class="samp">i type ^value$</span></samp>’ gives information only on types whose complete |
| name is <code>value</code>. |
| |
| <p>In programs using different languages, <span class="sc">gdb</span> chooses the syntax |
| to print the type description according to the |
| ‘<samp><span class="samp">set language</span></samp>’ value: using ‘<samp><span class="samp">set language auto</span></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>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><a name="index-info-type_002dprinters-1122"></a><br><dt><code>info type-printers</code><dd>Versions of <span class="sc">gdb</span> that ship with Python scripting enabled may |
| have “type printers” available. When using <samp><span class="command">ptype</span></samp> or |
| <samp><span class="command">whatis</span></samp>, 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><code>info type-printers</code> displays all the available type printers. |
| |
| <p><a name="index-enable-type_002dprinter-1123"></a><a name="index-disable-type_002dprinter-1124"></a><br><dt><code>enable type-printer </code><var>name</var><code>...</code><br><dt><code>disable type-printer </code><var>name</var><code>...</code><dd>These commands can be used to enable or disable type printers. |
| |
| <p><a name="index-info-scope-1125"></a><a name="index-local-variables-1126"></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—a function name, a source line, or |
| an address preceded by a ‘<samp><span class="samp">*</span></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: |
| |
| <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-1127"></a><br><dt><code>info source</code><dd>Show information about the current source file—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>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>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-1128"></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-1129"></a><br><dt><code>info functions [-q]</code><dd>Print the names and data types of all defined functions. |
| Similarly to ‘<samp><span class="samp">info types</span></samp>’, this command groups its output by source |
| files and annotates each function definition with its source line |
| number. |
| |
| <p>In programs using different languages, <span class="sc">gdb</span> chooses the syntax |
| to print the function name and type according to the |
| ‘<samp><span class="samp">set language</span></samp>’ value: using ‘<samp><span class="samp">set language auto</span></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>The optional flag ‘<samp><span class="samp">-q</span></samp>’, which stands for ‘<samp><span class="samp">quiet</span></samp>’, disables |
| printing header information and messages explaining why no functions |
| have been printed. |
| |
| <br><dt><code>info functions [-q] [-t </code><var>type_regexp</var><code>] [</code><var>regexp</var><code>]</code><dd>Like ‘<samp><span class="samp">info functions</span></samp>’, but only print the names and data types |
| of the functions selected with the provided regexp(s). |
| |
| <p>If <var>regexp</var> is provided, print only the functions whose names |
| match the regular expression <var>regexp</var>. |
| Thus, ‘<samp><span class="samp">info fun step</span></samp>’ finds all functions whose |
| names include <code>step</code>; ‘<samp><span class="samp">info fun ^step</span></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><span class="samp">operator*()</span></samp>’), they may be quoted with a backslash. |
| |
| <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><span class="samp">info fun -t '^int ('</span></samp>’ finds the functions that return |
| an integer; ‘<samp><span class="samp">info fun -t '(.*int.*'</span></samp>’ finds the functions that |
| have an argument type containing int; ‘<samp><span class="samp">info fun -t '^int (' ^step</span></samp>’ |
| finds the functions whose names start with <code>step</code> and that return |
| int. |
| |
| <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-1130"></a><br><dt><code>info variables [-q]</code><dd>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>In programs using different languages, <span class="sc">gdb</span> chooses the syntax |
| to print the variable name and type according to the |
| ‘<samp><span class="samp">set language</span></samp>’ value: using ‘<samp><span class="samp">set language auto</span></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>The optional flag ‘<samp><span class="samp">-q</span></samp>’, which stands for ‘<samp><span class="samp">quiet</span></samp>’, disables |
| printing header information and messages explaining why no variables |
| have been printed. |
| |
| <br><dt><code>info variables [-q] [-t </code><var>type_regexp</var><code>] [</code><var>regexp</var><code>]</code><dd>Like <kbd>info variables</kbd>, but only print the variables selected |
| with the provided regexp(s). |
| |
| <p>If <var>regexp</var> is provided, print only the variables whose names |
| match the regular expression <var>regexp</var>. |
| |
| <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>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-classes-1131"></a><a name="index-Objective_002dC_002c-classes-and-selectors-1132"></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-1133"></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-opaque-data-types-1134"></a><a name="index-set-opaque_002dtype_002dresolution-1135"></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>—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>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"> {<no data fields>} |
| </pre> |
| <p><a name="index-show-opaque_002dtype_002dresolution-1136"></a><br><dt><code>show opaque-type-resolution</code><dd>Show whether opaque types are resolved or not. |
| |
| <p><a name="index-set-print-symbol_002dloading-1137"></a><a name="index-print-messages-when-symbols-are-loaded-1138"></a><br><dt><code>set print symbol-loading</code><dt><code>set print symbol-loading full</code><dt><code>set print symbol-loading brief</code><dt><code>set print symbol-loading off</code><dd>The <code>set print symbol-loading</code> command allows you to control the |
| printing of messages when <span class="sc">gdb</span> 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 <span class="sc">gdb</span> 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-1139"></a><br><dt><code>show print symbol-loading</code><dd>Show whether messages will be printed when a <span class="sc">gdb</span> command |
| entered from the keyboard causes symbol information to be loaded. |
| |
| <p><a name="index-maint-print-symbols-1140"></a><a name="index-symbol-dump-1141"></a><a name="index-maint-print-psymbols-1142"></a><a name="index-partial-symbol-dump-1143"></a><a name="index-maint-print-msymbols-1144"></a><a name="index-minimal-symbol-dump-1145"></a><br><dt><code>maint print symbols </code><span class="roman">[</span><code>-pc </code><var>address</var><span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span><dt><code>maint print symbols </code><span class="roman">[</span><code>-objfile </code><var>objfile</var><span class="roman">]</span> <span class="roman">[</span><code>-source </code><var>source</var><span class="roman">]</span> <span class="roman">[</span><code>--</code><span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span><dt><code>maint print psymbols </code><span class="roman">[</span><code>-objfile </code><var>objfile</var><span class="roman">]</span> <span class="roman">[</span><code>-pc </code><var>address</var><span class="roman">]</span> <span class="roman">[</span><code>--</code><span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span><dt><code>maint print psymbols </code><span class="roman">[</span><code>-objfile </code><var>objfile</var><span class="roman">]</span> <span class="roman">[</span><code>-source </code><var>source</var><span class="roman">]</span> <span class="roman">[</span><code>--</code><span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span><dt><code>maint print msymbols </code><span class="roman">[</span><code>-objfile </code><var>objfile</var><span class="roman">]</span> <span class="roman">[</span><code>--</code><span class="roman">]</span> <span class="roman">[</span><var>filename</var><span class="roman">]</span><dd>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 </code><var>objfile</var> is specified, only dump symbols for |
| that objfile. |
| If <code>-pc </code><var>address</var> 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 </code><var>source</var> is specified, only dump symbols for that |
| source file. |
| |
| <p>These commands are used to debug the <span class="sc">gdb</span> symbol-reading code. |
| These commands do not modify internal <span class="sc">gdb</span> state, therefore |
| ‘<samp><span class="samp">maint print symbols</span></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><span class="samp">maint print psymbols</span></samp>’ instead, the dump shows information |
| about symbols that <span class="sc">gdb</span> only knows partially—that is, symbols |
| defined in files that <span class="sc">gdb</span> has skimmed, but not yet read completely. |
| Finally, ‘<samp><span class="samp">maint print msymbols</span></samp>’ just dumps “minimal symbols”, e.g., |
| “ELF symbols”. |
| |
| <p>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-1146"></a><a name="index-maint-info-psymtabs-1147"></a><a name="index-listing-_0040value_007bGDBN_007d_0027s-internal-symbol-tables-1148"></a><a name="index-symbol-tables_002c-listing-_0040value_007bGDBN_007d_0027s-internal-1149"></a><a name="index-full-symbol-tables_002c-listing-_0040value_007bGDBN_007d_0027s-internal-1150"></a><a name="index-partial-symbol-tables_002c-listing-_0040value_007bGDBN_007d_0027s-internal-1151"></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 ‘<samp><span class="samp">dwarf2read</span></samp>’, belonging to the ‘<samp><span class="samp">gdb</span></samp>’ 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> |
| <p><a name="index-maint-info-line_002dtable-1152"></a><a name="index-listing-_0040value_007bGDBN_007d_0027s-internal-line-tables-1153"></a><a name="index-line-tables_002c-listing-_0040value_007bGDBN_007d_0027s-internal-1154"></a><br><dt><code>maint info line-table </code><span class="roman">[</span> <var>regexp</var> <span class="roman">]</span><dd> |
| 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-1155"></a><a name="index-symbol-cache-size-1156"></a><br><dt><code>maint set symbol-cache-size </code><var>size</var><dd>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-1157"></a><br><dt><code>maint show symbol-cache-size</code><dd>Show the size of the symbol cache. |
| |
| <p><a name="index-maint-print-symbol_002dcache-1158"></a><a name="index-symbol-cache_002c-printing-its-contents-1159"></a><br><dt><code>maint print symbol-cache</code><dd>Print the contents of the symbol cache. |
| This is useful when debugging symbol cache issues. |
| |
| <p><a name="index-maint-print-symbol_002dcache_002dstatistics-1160"></a><a name="index-symbol-cache_002c-printing-usage-statistics-1161"></a><br><dt><code>maint print symbol-cache-statistics</code><dd>Print symbol cache usage statistics. |
| This helps determine how well the cache is being utilized. |
| |
| <p><a name="index-maint-flush_002dsymbol_002dcache-1162"></a><a name="index-symbol-cache_002c-flushing-1163"></a><br><dt><code>maint flush-symbol-cache</code><dd>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. |
| |
| </dl> |
| |
| </body></html> |
| |