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
<!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: Break Commands</title>
 
<meta name="description" content="Debugging with GDB: Break Commands">
<meta name="keywords" content="Debugging with GDB: Break Commands">
<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="Breakpoints.html#Breakpoints" rel="up" title="Breakpoints">
<link href="Dynamic-printf.html#Dynamic-printf" rel="next" title="Dynamic printf">
<link href="Conditions.html#Conditions" rel="previous" title="Conditions">
<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="Break-Commands"></a>
<div class="header">
<p>
Next: <a href="Dynamic-printf.html#Dynamic-printf" accesskey="n" rel="next">Dynamic printf</a>, Previous: <a href="Conditions.html#Conditions" accesskey="p" rel="previous">Conditions</a>, Up: <a href="Breakpoints.html#Breakpoints" accesskey="u" rel="up">Breakpoints</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="Breakpoint-Command-Lists"></a>
<h4 class="subsection">5.1.7 Breakpoint Command Lists</h4>
 
<a name="index-breakpoint-commands"></a>
<p>You can give any breakpoint (or watchpoint or catchpoint) a series of
commands to execute when your program stops due to that breakpoint.  For
example, you might want to print the values of certain expressions, or
enable other breakpoints.
</p>
<dl compact="compact">
<dd><a name="index-commands"></a>
<a name="index-end-_0028breakpoint-commands_0029"></a>
</dd>
<dt><code>commands <span class="roman">[</span><var>list</var>&hellip;<span class="roman">]</span></code></dt>
<dt><code>&hellip; <var>command-list</var> &hellip;</code></dt>
<dt><code>end</code></dt>
<dd><p>Specify a list of commands for the given breakpoints.  The commands
themselves appear on the following lines.  Type a line containing just
<code>end</code> to terminate the commands.
</p>
<p>To remove all commands from a breakpoint, type <code>commands</code> and
follow it immediately with <code>end</code>; that is, give no commands.
</p>
<p>With no argument, <code>commands</code> refers to the last breakpoint,
watchpoint, or catchpoint set (not to the breakpoint most recently
encountered).  If the most recent breakpoints were set with a single
command, then the <code>commands</code> will apply to all the breakpoints
set by that command.  This applies to breakpoints set by
<code>rbreak</code>, and also applies when a single <code>break</code> command
creates multiple breakpoints (see <a href="Ambiguous-Expressions.html#Ambiguous-Expressions">Ambiguous
Expressions</a>).
</p></dd>
</dl>
 
<p>Pressing <tt class="key">RET</tt> as a means of repeating the last <small>GDB</small> command is
disabled within a <var>command-list</var>.
</p>
<p>You can use breakpoint commands to start your program up again.  Simply
use the <code>continue</code> command, or <code>step</code>, or any other command
that resumes execution.
</p>
<p>Any other commands in the command list, after a command that resumes
execution, are ignored.  This is because any time you resume execution
(even with a simple <code>next</code> or <code>step</code>), you may encounter
another breakpoint&mdash;which could have its own command list, leading to
ambiguities about which list to execute.
</p>
<a name="index-silent"></a>
<p>If the first command you specify in a command list is <code>silent</code>, the
usual message about stopping at a breakpoint is not printed.  This may
be desirable for breakpoints that are to print a specific message and
then continue.  If none of the remaining commands print anything, you
see no sign that the breakpoint was reached.  <code>silent</code> is
meaningful only at the beginning of a breakpoint command list.
</p>
<p>The commands <code>echo</code>, <code>output</code>, and <code>printf</code> allow you to
print precisely controlled output, and are often useful in silent
breakpoints.  See <a href="Output.html#Output">Commands for Controlled Output</a>.
</p>
<p>For example, here is how you could use breakpoint commands to print the
value of <code>x</code> at entry to <code>foo</code> whenever <code>x</code> is positive.
</p>
<div class="smallexample">
<pre class="smallexample">break foo if x&gt;0
commands
silent
printf &quot;x is %d\n&quot;,x
cont
end
</pre></div>
 
<p>One application for breakpoint commands is to compensate for one bug so
you can test for another.  Put a breakpoint just after the erroneous line
of code, give it a condition to detect the case in which something
erroneous has been done, and give it commands to assign correct values
to any variables that need them.  End with the <code>continue</code> command
so that your program does not stop, and start with the <code>silent</code>
command so that no output is produced.  Here is an example:
</p>
<div class="smallexample">
<pre class="smallexample">break 403
commands
silent
set x = y + 4
cont
end
</pre></div>
 
<hr>
<div class="header">
<p>
Next: <a href="Dynamic-printf.html#Dynamic-printf" accesskey="n" rel="next">Dynamic printf</a>, Previous: <a href="Conditions.html#Conditions" accesskey="p" rel="previous">Conditions</a>, Up: <a href="Breakpoints.html#Breakpoints" accesskey="u" rel="up">Breakpoints</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>