Mercurial > octave-antonio
diff doc/interpreter/debug.txi @ 6646:bd0a70c3f2db
[project @ 2007-05-22 02:27:43 by jwe]
author | jwe |
---|---|
date | Tue, 22 May 2007 02:27:43 +0000 |
parents | 8f6d418d31c3 |
children | 415b8b0106d0 |
line wrap: on
line diff
--- a/doc/interpreter/debug.txi Mon May 21 21:05:54 2007 +0000 +++ b/doc/interpreter/debug.txi Tue May 22 02:27:43 2007 +0000 @@ -5,18 +5,114 @@ @node Debugging @chapter Debugging -@DOCSTRING(dbstop) +Octave includes a built-in debugger to aid in the development of +scripts. This can be used to interrupt the execution of an Octave script +at a certain point, or when certain conditions are met. Once execution +has stopped, and debug mode is entered, the symbol table at the point +where execution has stopped can be examined and modified to check for +errors. -@DOCSTRING(dbclear) +The normal commandline editing and history functions are available in +debug mode. However, one limitation on the debug mode is that +commands entered at the debug prompt are evaluated as strings, rather +than being handled by the Octave parser. This means that all commands in +debug mode must be contained on a single line. That is, it is alright to +write + +@example +debug> for i = 1:n, foo(i); endfor +@end example -@DOCSTRING(dbstatus) +@noindent +in debug mode. However, writing the above in three lines will not be +correctly evaluated. To leave the debug mode, you should simply type +either @code{quit} or @code{exit}. + +@menu +* Entering Debug Mode:: +* Breakpoints:: +* Debug Mode:: +@end menu -@DOCSTRING(dbwhere) +@node Entering Debug Mode +@section Entering Debug Mode -@DOCSTRING(dbtype) +There are two basic means of interrupting the execution of an Octave +script. These are breakpoints @ref{Breakpoints}, discussed in the next +section and interruption based on some condition. + +Octave supports three means to stop execution based on the values set in +the functions @code{debug_on_interrupt}, @code{debug_on_warning} and +@code{debug_on_error}. @DOCSTRING(debug_on_interrupt) @DOCSTRING(debug_on_warning) @DOCSTRING(debug_on_error) + +@node Breakpoints +@section Breakpoints + +Breakpoints can be set in any Octave function, using the @code{dbstop} +function. + +@DOCSTRING(dbstop) + +@noindent +Note that breakpoints can not be set in built-in functions +(eg. @code{sin}, etc) or dynamically loaded function (ie. oct-files). To +set a breakpoint immediately on entering a function, the breakpoint +should be set to line 1. The leading comment block will be ignored and +the breakpoint will be set to the first executable statement in the +function. For example + +@example +@group +dbstop ("asind", 1) +@result{} 27 +@end group +@end example + +@noindent +Note that the return value of @code{27} means that the breakpoint was +effectively set to line 27. The status of breakpoints in a function can +be queried with the @code{dbstatus} function. + +@DOCSTRING(dbstatus) + +@noindent +Taking the above as an example, @code{dbstatus ("asind")} should return +27. The breakpoints can then be cleared with the @code{dbclear} function + +@DOCSTRING(dbclear) + +@noindent +To clear all of the breakpoints in a function the recommended means, +following the above example, is then + +@example +dbclear ("asind", dbstatus ("asind")); +@end example + +Another simple means of setting a breakpoint in an Octave script is the +use of the @code{keyboard} function. + +@DOCSTRING(keyboard) + +@noindent +The @code{keyboard} function is typically placed in a script at the +point where the user desires that the execution is stopped. It +automatically sets the running script into the debug mode. + +@node Debug Mode +@section Debug Mode + +There are two additional support functions that allow the user to +interrogate where in the execution of a script Octave entered the debug +mode and to print the code in the script surrounding the point where +Octave entered debug mode. + +@DOCSTRING(dbwhere) + +@DOCSTRING(dbtype)