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
<!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: Ambiguous Expressions</title>
 
<meta name="description" content="Debugging with GDB: Ambiguous Expressions">
<meta name="keywords" content="Debugging with GDB: Ambiguous Expressions">
<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="Data.html#Data" rel="up" title="Data">
<link href="Variables.html#Variables" rel="next" title="Variables">
<link href="Expressions.html#Expressions" rel="previous" title="Expressions">
<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="Ambiguous-Expressions"></a>
<div class="header">
<p>
Next: <a href="Variables.html#Variables" accesskey="n" rel="next">Variables</a>, Previous: <a href="Expressions.html#Expressions" accesskey="p" rel="previous">Expressions</a>, Up: <a href="Data.html#Data" accesskey="u" rel="up">Data</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="Ambiguous-Expressions-1"></a>
<h3 class="section">10.2 Ambiguous Expressions</h3>
<a name="index-ambiguous-expressions"></a>
 
<p>Expressions can sometimes contain some ambiguous elements.  For instance,
some programming languages (notably Ada, C<tt>++</tt> and Objective-C) permit
a single function name to be defined several times, for application in
different contexts.  This is called <em>overloading</em>.  Another example
involving Ada is generics.  A <em>generic package</em> is similar to C<tt>++</tt>
templates and is typically instantiated several times, resulting in
the same function name being defined in different contexts.
</p>
<p>In some cases and depending on the language, it is possible to adjust
the expression to remove the ambiguity.  For instance in C<tt>++</tt>, you
can specify the signature of the function you want to break on, as in
<kbd>break <var>function</var>(<var>types</var>)</kbd>.  In Ada, using the fully
qualified name of your function often makes the expression unambiguous
as well.
</p>
<p>When an ambiguity that needs to be resolved is detected, the debugger
has the capability to display a menu of numbered choices for each
possibility, and then waits for the selection with the prompt &lsquo;<samp>&gt;</samp>&rsquo;.
The first option is always &lsquo;<samp>[0] cancel</samp>&rsquo;, and typing <kbd>0 <span class="key">RET</span></kbd>
aborts the current command.  If the command in which the expression was
used allows more than one choice to be selected, the next option in the
menu is &lsquo;<samp>[1] all</samp>&rsquo;, and typing <kbd>1 <span class="key">RET</span></kbd> selects all possible
choices.
</p>
<p>For example, the following session excerpt shows an attempt to set a
breakpoint at the overloaded symbol <code>String::after</code>.
We choose three particular definitions of that function name:
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) b String::after
[0] cancel
[1] all
[2] file:String.cc; line number:867
[3] file:String.cc; line number:860
[4] file:String.cc; line number:875
[5] file:String.cc; line number:853
[6] file:String.cc; line number:846
[7] file:String.cc; line number:735
&gt; 2 4 6
Breakpoint 1 at 0xb26c: file String.cc, line 867.
Breakpoint 2 at 0xb344: file String.cc, line 875.
Breakpoint 3 at 0xafcc: file String.cc, line 846.
Multiple breakpoints were set.
Use the &quot;delete&quot; command to delete unwanted
 breakpoints.
(gdb)
</pre></div>
 
<dl compact="compact">
<dd><a name="index-set-multiple_002dsymbols"></a>
</dd>
<dt><code>set multiple-symbols <var>mode</var></code></dt>
<dd><a name="index-multiple_002dsymbols-menu"></a>
 
<p>This option allows you to adjust the debugger behavior when an expression
is ambiguous.
</p>
<p>By default, <var>mode</var> is set to <code>all</code>.  If the command with which
the expression is used allows more than one choice, then <small>GDB</small>
automatically selects all possible choices.  For instance, inserting
a breakpoint on a function using an ambiguous name results in a breakpoint
inserted on each possible match.  However, if a unique choice must be made,
then <small>GDB</small> uses the menu to help you disambiguate the expression.
For instance, printing the address of an overloaded function will result
in the use of the menu.
</p>
<p>When <var>mode</var> is set to <code>ask</code>, the debugger always uses the menu
when an ambiguity is detected.
</p>
<p>Finally, when <var>mode</var> is set to <code>cancel</code>, the debugger reports
an error due to the ambiguity and the command is aborted.
</p>
<a name="index-show-multiple_002dsymbols"></a>
</dd>
<dt><code>show multiple-symbols</code></dt>
<dd><p>Show the current value of the <code>multiple-symbols</code> setting.
</p></dd>
</dl>
 
<hr>
<div class="header">
<p>
Next: <a href="Variables.html#Variables" accesskey="n" rel="next">Variables</a>, Previous: <a href="Expressions.html#Expressions" accesskey="p" rel="previous">Expressions</a>, Up: <a href="Data.html#Data" accesskey="u" rel="up">Data</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>