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
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2017 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.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: Define</title>
 
<meta name="description" content="Debugging with GDB: Define">
<meta name="keywords" content="Debugging with GDB: Define">
<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="Sequences.html#Sequences" rel="up" title="Sequences">
<link href="Hooks.html#Hooks" rel="next" title="Hooks">
<link href="Sequences.html#Sequences" rel="prev" title="Sequences">
<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="Define"></a>
<div class="header">
<p>
Next: <a href="Hooks.html#Hooks" accesskey="n" rel="next">Hooks</a>, Up: <a href="Sequences.html#Sequences" accesskey="u" rel="up">Sequences</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="User_002ddefined-Commands"></a>
<h4 class="subsection">23.1.1 User-defined Commands</h4>
 
<a name="index-user_002ddefined-command"></a>
<a name="index-arguments_002c-to-user_002ddefined-commands"></a>
<p>A <em>user-defined command</em> is a sequence of <small>GDB</small> commands to
which you assign a new name as a command.  This is done with the
<code>define</code> command.  User commands may accept up to 10 arguments
separated by whitespace.  Arguments are accessed within the user command
via <code>$arg0&hellip;$arg9</code>.  A trivial example:
</p>
<div class="smallexample">
<pre class="smallexample">define adder
  print $arg0 + $arg1 + $arg2
end
</pre></div>
 
<p>To execute the command use:
</p>
<div class="smallexample">
<pre class="smallexample">adder 1 2 3
</pre></div>
 
<p>This defines the command <code>adder</code>, which prints the sum of
its three arguments.  Note the arguments are text substitutions, so they may
reference variables, use complex expressions, or even perform inferior
functions calls.
</p>
<a name="index-argument-count-in-user_002ddefined-commands"></a>
<a name="index-how-many-arguments-_0028user_002ddefined-commands_0029"></a>
<p>In addition, <code>$argc</code> may be used to find out how many arguments have
been passed.  This expands to a number in the range 0&hellip;10.
</p>
<div class="smallexample">
<pre class="smallexample">define adder
  if $argc == 2
    print $arg0 + $arg1
  end
  if $argc == 3
    print $arg0 + $arg1 + $arg2
  end
end
</pre></div>
 
<dl compact="compact">
<dd>
<a name="index-define"></a>
</dd>
<dt><code>define <var>commandname</var></code></dt>
<dd><p>Define a command named <var>commandname</var>.  If there is already a command
by that name, you are asked to confirm that you want to redefine it.
The argument <var>commandname</var> may be a bare command name consisting of letters,
numbers, dashes, and underscores.  It may also start with any predefined
prefix command.  For example, &lsquo;<samp>define target my-target</samp>&rsquo; creates
a user-defined &lsquo;<samp>target my-target</samp>&rsquo; command.
</p>
<p>The definition of the command is made up of other <small>GDB</small> command lines,
which are given following the <code>define</code> command.  The end of these
commands is marked by a line containing <code>end</code>.
</p>
<a name="index-document"></a>
<a name="index-end-_0028user_002ddefined-commands_0029"></a>
</dd>
<dt><code>document <var>commandname</var></code></dt>
<dd><p>Document the user-defined command <var>commandname</var>, so that it can be
accessed by <code>help</code>.  The command <var>commandname</var> must already be
defined.  This command reads lines of documentation just as <code>define</code>
reads the lines of the command definition, ending with <code>end</code>.
After the <code>document</code> command is finished, <code>help</code> on command
<var>commandname</var> displays the documentation you have written.
</p>
<p>You may use the <code>document</code> command again to change the
documentation of a command.  Redefining the command with <code>define</code>
does not change the documentation.
</p>
<a name="index-dont_002drepeat-1"></a>
<a name="index-don_0027t-repeat-command"></a>
</dd>
<dt><code>dont-repeat</code></dt>
<dd><p>Used inside a user-defined command, this tells <small>GDB</small> that this
command should not be repeated when the user hits <tt class="key">RET</tt>
(see <a href="Command-Syntax.html#Command-Syntax">repeat last command</a>).
</p>
<a name="index-help-user_002ddefined"></a>
</dd>
<dt><code>help user-defined</code></dt>
<dd><p>List all user-defined commands and all python commands defined in class
COMAND_USER.  The first line of the documentation or docstring is
included (if any).
</p>
<a name="index-show-user"></a>
</dd>
<dt><code>show user</code></dt>
<dt><code>show user <var>commandname</var></code></dt>
<dd><p>Display the <small>GDB</small> commands used to define <var>commandname</var> (but
not its documentation).  If no <var>commandname</var> is given, display the
definitions for all user-defined commands.
This does not work for user-defined python commands.
</p>
<a name="index-infinite-recursion-in-user_002ddefined-commands"></a>
<a name="index-show-max_002duser_002dcall_002ddepth"></a>
<a name="index-set-max_002duser_002dcall_002ddepth"></a>
</dd>
<dt><code>show max-user-call-depth</code></dt>
<dt><code>set max-user-call-depth</code></dt>
<dd><p>The value of <code>max-user-call-depth</code> controls how many recursion
levels are allowed in user-defined commands before <small>GDB</small> suspects an
infinite recursion and aborts the command.
This does not apply to user-defined python commands.
</p></dd>
</dl>
 
<p>In addition to the above commands, user-defined commands frequently
use control flow commands, described in <a href="Command-Files.html#Command-Files">Command Files</a>.
</p>
<p>When user-defined commands are executed, the
commands of the definition are not printed.  An error in any command
stops execution of the user-defined command.
</p>
<p>If used interactively, commands that would ask for confirmation proceed
without asking when used inside a user-defined command.  Many <small>GDB</small>
commands that normally print messages to say what they are doing omit the
messages when used in a user-defined command.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Hooks.html#Hooks" accesskey="n" rel="next">Hooks</a>, Up: <a href="Sequences.html#Sequences" accesskey="u" rel="up">Sequences</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>