annotate doc/interpreter/debug.txi @ 6648:4971ff18d2d7

[project @ 2007-05-22 03:17:36 by jwe]
author jwe
date Tue, 22 May 2007 03:17:36 +0000
parents 415b8b0106d0
children 083721ae3dfa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4175
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
1 @c Copyright (C) 1996, 1997 John W. Eaton
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
2 @c This is part of the Octave manual.
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
3 @c For copying conditions, see the file gpl.texi.
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
4
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
5 @node Debugging
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
6 @chapter Debugging
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
7
6646
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
8 Octave includes a built-in debugger to aid in the development of
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
9 scripts. This can be used to interrupt the execution of an Octave script
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
10 at a certain point, or when certain conditions are met. Once execution
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
11 has stopped, and debug mode is entered, the symbol table at the point
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
12 where execution has stopped can be examined and modified to check for
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
13 errors.
4175
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
14
6646
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
15 The normal commandline editing and history functions are available in
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
16 debug mode. However, one limitation on the debug mode is that
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
17 commands entered at the debug prompt are evaluated as strings, rather
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
18 than being handled by the Octave parser. This means that all commands in
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
19 debug mode must be contained on a single line. That is, it is alright to
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
20 write
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
21
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
22 @example
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
23 debug> for i = 1:n, foo(i); endfor
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
24 @end example
4175
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
25
6646
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
26 @noindent
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
27 in debug mode. However, writing the above in three lines will not be
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
28 correctly evaluated. To leave the debug mode, you should simply type
6647
415b8b0106d0 [project @ 2007-05-22 02:57:21 by jwe]
jwe
parents: 6646
diff changeset
29 either @code{quit}, @code{exit}, @code{return} or @code{dbcont}.
6646
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
30
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
31 @menu
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
32 * Entering Debug Mode::
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
33 * Breakpoints::
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
34 * Debug Mode::
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
35 @end menu
4175
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
36
6646
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
37 @node Entering Debug Mode
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
38 @section Entering Debug Mode
4175
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
39
6646
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
40 There are two basic means of interrupting the execution of an Octave
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
41 script. These are breakpoints @ref{Breakpoints}, discussed in the next
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
42 section and interruption based on some condition.
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
43
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
44 Octave supports three means to stop execution based on the values set in
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
45 the functions @code{debug_on_interrupt}, @code{debug_on_warning} and
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
46 @code{debug_on_error}.
4175
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
47
4185
8f6d418d31c3 [project @ 2002-11-15 23:22:03 by jwe]
jwe
parents: 4175
diff changeset
48 @DOCSTRING(debug_on_interrupt)
4175
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
49
b3cd3d12da7e [project @ 2002-11-13 02:45:39 by jwe]
jwe
parents:
diff changeset
50 @DOCSTRING(debug_on_warning)
4185
8f6d418d31c3 [project @ 2002-11-15 23:22:03 by jwe]
jwe
parents: 4175
diff changeset
51
8f6d418d31c3 [project @ 2002-11-15 23:22:03 by jwe]
jwe
parents: 4175
diff changeset
52 @DOCSTRING(debug_on_error)
6646
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
53
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
54 @node Breakpoints
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
55 @section Breakpoints
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
56
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
57 Breakpoints can be set in any Octave function, using the @code{dbstop}
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
58 function.
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
59
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
60 @DOCSTRING(dbstop)
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
61
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
62 @noindent
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
63 Note that breakpoints can not be set in built-in functions
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
64 (eg. @code{sin}, etc) or dynamically loaded function (ie. oct-files). To
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
65 set a breakpoint immediately on entering a function, the breakpoint
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
66 should be set to line 1. The leading comment block will be ignored and
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
67 the breakpoint will be set to the first executable statement in the
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
68 function. For example
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
69
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
70 @example
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
71 @group
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
72 dbstop ("asind", 1)
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
73 @result{} 27
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
74 @end group
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
75 @end example
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
76
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
77 @noindent
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
78 Note that the return value of @code{27} means that the breakpoint was
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
79 effectively set to line 27. The status of breakpoints in a function can
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
80 be queried with the @code{dbstatus} function.
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
81
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
82 @DOCSTRING(dbstatus)
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
83
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
84 @noindent
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
85 Taking the above as an example, @code{dbstatus ("asind")} should return
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
86 27. The breakpoints can then be cleared with the @code{dbclear} function
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
87
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
88 @DOCSTRING(dbclear)
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
89
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
90 @noindent
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
91 To clear all of the breakpoints in a function the recommended means,
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
92 following the above example, is then
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
93
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
94 @example
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
95 dbclear ("asind", dbstatus ("asind"));
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
96 @end example
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
97
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
98 Another simple means of setting a breakpoint in an Octave script is the
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
99 use of the @code{keyboard} function.
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
100
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
101 @DOCSTRING(keyboard)
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
102
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
103 @noindent
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
104 The @code{keyboard} function is typically placed in a script at the
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
105 point where the user desires that the execution is stopped. It
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
106 automatically sets the running script into the debug mode.
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
107
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
108 @node Debug Mode
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
109 @section Debug Mode
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
110
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
111 There are two additional support functions that allow the user to
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
112 interrogate where in the execution of a script Octave entered the debug
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
113 mode and to print the code in the script surrounding the point where
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
114 Octave entered debug mode.
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
115
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
116 @DOCSTRING(dbwhere)
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
117
bd0a70c3f2db [project @ 2007-05-22 02:27:43 by jwe]
jwe
parents: 4185
diff changeset
118 @DOCSTRING(dbtype)
6647
415b8b0106d0 [project @ 2007-05-22 02:57:21 by jwe]
jwe
parents: 6646
diff changeset
119
6648
4971ff18d2d7 [project @ 2007-05-22 03:17:36 by jwe]
jwe
parents: 6647
diff changeset
120 Debug mode equally allows single line stepping through a function using
4971ff18d2d7 [project @ 2007-05-22 03:17:36 by jwe]
jwe
parents: 6647
diff changeset
121 the commands @code{dbstep} and @code{dbnext}. These differ slightly in
4971ff18d2d7 [project @ 2007-05-22 03:17:36 by jwe]
jwe
parents: 6647
diff changeset
122 the way they treat the next executable line if the next line itself is a
4971ff18d2d7 [project @ 2007-05-22 03:17:36 by jwe]
jwe
parents: 6647
diff changeset
123 function defined in an m-file. The @code{dbnext} command will execute
4971ff18d2d7 [project @ 2007-05-22 03:17:36 by jwe]
jwe
parents: 6647
diff changeset
124 the next line, while staying in the existing function being debugged.
4971ff18d2d7 [project @ 2007-05-22 03:17:36 by jwe]
jwe
parents: 6647
diff changeset
125 The @code{dbstep} command will step in to the new function.