When code being evaluated from the REPL hits an error, Guile remembers the execution context where the error occurred and can give you three levels of information about what the error was and exactly where it occurred.
By default, Guile displays only the first level, which is the most immediate information about where and why the error occurred, for example:
(make-string (* 4 (+ 3 #\s)) #\space) -| standard input:2:19: In procedure + in expression (+ 3 #\s): standard input:2:19: Wrong type argument: #\s ABORT: (wrong-type-arg) Type "(backtrace)" to get more information or "(debug)" to enter the debugger.
However, as the message above says, you can obtain more information
about the context of the error by typing (backtrace)
or
(debug)
.
(backtrace)
displays the Scheme call stack at the point where the
error occurred:
(backtrace) -| Backtrace: In standard input: 2: 0* [make-string ... 2: 1* [* 4 ... 2: 2* [+ 3 #\s] Type "(debug-enable 'backtrace)" if you would like a backtrace automatically if an error occurs in the future.
In a more complex scenario than this one, this can be extremely useful
for understanding where and why the error occurred. You can make Guile
show the backtrace automatically by adding (debug-enable
'backtrace)
to your .guile.
(debug)
takes you into Guile's interactive debugger, which
provides commands that allow you to
backtrace
command — see Display Backtrace)
up
, down
, frame
, position
, info args
and info frame
commands — see Frame Selection and
Frame Information)
evaluate
command — see Frame Evaluation).
The interactive debugger is documented further in the following section.