hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2021 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 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: Index Files</title>
 
<meta name="description" content="Debugging with GDB: Index Files">
<meta name="keywords" content="Debugging with GDB: Index Files">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<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="GDB-Files.html#GDB-Files" rel="up" title="GDB Files">
<link href="Symbol-Errors.html#Symbol-Errors" rel="next" title="Symbol Errors">
<link href="MiniDebugInfo.html#MiniDebugInfo" rel="previous" title="MiniDebugInfo">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
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.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Index-Files"></a>
<div class="header">
<p>
Next: <a href="Symbol-Errors.html#Symbol-Errors" accesskey="n" rel="next">Symbol Errors</a>, Previous: <a href="MiniDebugInfo.html#MiniDebugInfo" accesskey="p" rel="previous">MiniDebugInfo</a>, Up: <a href="GDB-Files.html#GDB-Files" accesskey="u" rel="up">GDB Files</a> &nbsp; [<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="Index-Files-Speed-Up-GDB"></a>
<h3 class="section">18.5 Index Files Speed Up <small>GDB</small></h3>
<a name="index-index-files"></a>
<a name="index-_002egdb_005findex-section"></a>
 
<p>When <small>GDB</small> finds a symbol file, it scans the symbols in the
file in order to construct an internal symbol table.  This lets most
<small>GDB</small> operations work quickly&mdash;at the cost of a delay early
on.  For large programs, this delay can be quite lengthy, so
<small>GDB</small> provides a way to build an index, which speeds up
startup.
</p>
<p>For convenience, <small>GDB</small> comes with a program,
<code>gdb-add-index</code>, which can be used to add the index to a
symbol file.  It takes the symbol file as its only argument:
</p>
<div class="smallexample">
<pre class="smallexample">$ gdb-add-index symfile
</pre></div>
 
<p>See <a href="gdb_002dadd_002dindex-man.html#gdb_002dadd_002dindex">gdb-add-index</a>.
</p>
<p>It is also possible to do the work manually.  Here is what
<code>gdb-add-index</code> does behind the curtains.
</p>
<p>The index is stored as a section in the symbol file.  <small>GDB</small> can
write the index to a file, then you can put it into the symbol file
using <code>objcopy</code>.
</p>
<p>To create an index file, use the <code>save gdb-index</code> command:
</p>
<dl compact="compact">
<dt><code>save gdb-index [-dwarf-5] <var>directory</var></code></dt>
<dd><a name="index-save-gdb_002dindex"></a>
<p>Create index files for all symbol files currently known by
<small>GDB</small>.  For each known <var>symbol-file</var>, this command by
default creates it produces a single file
<samp><var>symbol-file</var>.gdb-index</samp>.  If you invoke this command with
the <samp>-dwarf-5</samp> option, it produces 2 files:
<samp><var>symbol-file</var>.debug_names</samp> and
<samp><var>symbol-file</var>.debug_str</samp>.  The files are created in the
given <var>directory</var>.
</p></dd>
</dl>
 
<p>Once you have created an index file you can merge it into your symbol
file, here named <samp>symfile</samp>, using <code>objcopy</code>:
</p>
<div class="smallexample">
<pre class="smallexample">$ objcopy --add-section .gdb_index=symfile.gdb-index \
    --set-section-flags .gdb_index=readonly symfile symfile
</pre></div>
 
<p>Or for <code>-dwarf-5</code>:
</p>
<div class="smallexample">
<pre class="smallexample">$ objcopy --dump-section .debug_str=symfile.debug_str.new symfile
$ cat symfile.debug_str &gt;&gt;symfile.debug_str.new
$ objcopy --add-section .debug_names=symfile.gdb-index \
    --set-section-flags .debug_names=readonly \
    --update-section .debug_str=symfile.debug_str.new symfile symfile
</pre></div>
 
<p><small>GDB</small> will normally ignore older versions of <samp>.gdb_index</samp>
sections that have been deprecated.  Usually they are deprecated because
they are missing a new feature or have performance issues.
To tell <small>GDB</small> to use a deprecated index section anyway
specify <code>set use-deprecated-index-sections on</code>.
The default is <code>off</code>.
This can speed up startup, but may result in some functionality being lost.
See <a href="Index-Section-Format.html#Index-Section-Format">Index Section Format</a>.
</p>
<p><em>Warning:</em> Setting <code>use-deprecated-index-sections</code> to <code>on</code>
must be done before gdb reads the file.  The following will not work:
</p>
<div class="smallexample">
<pre class="smallexample">$ gdb -ex &quot;set use-deprecated-index-sections on&quot; &lt;program&gt;
</pre></div>
 
<p>Instead you must do, for example,
</p>
<div class="smallexample">
<pre class="smallexample">$ gdb -iex &quot;set use-deprecated-index-sections on&quot; &lt;program&gt;
</pre></div>
 
<p>Indices only work when using DWARF debugging information, not stabs.
</p>
<a name="Automatic-Symbol-Index-Cache"></a>
<h4 class="subsection">18.5.1 Automatic Symbol Index Cache</h4>
 
<a name="index-automatic-symbol-index-cache"></a>
<p>It is possible for <small>GDB</small> to automatically save a copy of this index in a
cache on disk and retrieve it from there when loading the same binary in the
future.  This feature can be turned on with <kbd>set index-cache on</kbd>.  The
following commands can be used to tweak the behavior of the index cache.
</p>
<dl compact="compact">
<dd>
<a name="index-set-index_002dcache"></a>
</dd>
<dt><code>set index-cache on</code></dt>
<dt><code>set index-cache off</code></dt>
<dd><p>Enable or disable the use of the symbol index cache.
</p>
</dd>
<dt><code>set index-cache directory <var>directory</var></code></dt>
<dd><a name="index-show-index_002dcache"></a>
</dd>
<dt><code>show index-cache directory</code></dt>
<dd><p>Set/show the directory where index files will be saved.
</p>
<p>The default value for this directory depends on the host platform.  On
most systems, the index is cached in the <samp>gdb</samp> subdirectory of
the directory pointed to by the <code>XDG_CACHE_HOME</code> environment
variable, if it is defined, else in the <samp>.cache/gdb</samp> subdirectory
of your home directory.  However, on some systems, the default may
differ according to local convention.
</p>
<p>There is no limit on the disk space used by index cache.  It is perfectly safe
to delete the content of that directory to free up disk space.
</p>
</dd>
<dt><code>show index-cache stats</code></dt>
<dd><p>Print the number of cache hits and misses since the launch of <small>GDB</small>.
</p>
</dd>
</dl>
 
<hr>
<div class="header">
<p>
Next: <a href="Symbol-Errors.html#Symbol-Errors" accesskey="n" rel="next">Symbol Errors</a>, Previous: <a href="MiniDebugInfo.html#MiniDebugInfo" accesskey="p" rel="previous">MiniDebugInfo</a>, Up: <a href="GDB-Files.html#GDB-Files" accesskey="u" rel="up">GDB Files</a> &nbsp; [<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>