blob: ca55b57eee3a755d4855206af2ece3667724ac42 [file] [log] [blame]
<html lang="en">
<head>
<title>Guile Exception Handling - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Guile-API.html#Guile-API" title="Guile API">
<link rel="prev" href="GDB-Scheme-Data-Types.html#GDB-Scheme-Data-Types" title="GDB Scheme Data Types">
<link rel="next" href="Values-From-Inferior-In-Guile.html#Values-From-Inferior-In-Guile" title="Values From Inferior In Guile">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988-2019 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.''
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<a name="Guile-Exception-Handling"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Values-From-Inferior-In-Guile.html#Values-From-Inferior-In-Guile">Values From Inferior In Guile</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="GDB-Scheme-Data-Types.html#GDB-Scheme-Data-Types">GDB Scheme Data Types</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Guile-API.html#Guile-API">Guile API</a>
<hr>
</div>
<h5 class="subsubsection">23.3.3.4 Guile Exception Handling</h5>
<p><a name="index-guile-exceptions-2473"></a><a name="index-exceptions_002c-guile-2474"></a><a name="index-set-guile-print_002dstack-2475"></a>
When executing the <code>guile</code> command, Guile exceptions
uncaught within the Guile code are translated to calls to the
<span class="sc">gdb</span> error-reporting mechanism. If the command that called
<code>guile</code> does not handle the error, <span class="sc">gdb</span> will
terminate it and report the error according to the setting of
the <code>guile print-stack</code> parameter.
<p>The <code>guile print-stack</code> parameter has three settings:
<dl>
<dt><code>none</code><dd>Nothing is printed.
<br><dt><code>message</code><dd>An error message is printed containing the Guile exception name,
the associated value, and the Guile call stack backtrace at the
point where the exception was raised. Example:
<pre class="smallexample"> (gdb) guile (display foo)
ERROR: In procedure memoize-variable-access!:
ERROR: Unbound variable: foo
Error while executing Scheme code.
</pre>
<br><dt><code>full</code><dd>In addition to an error message a full backtrace is printed.
<pre class="smallexample"> (gdb) set guile print-stack full
(gdb) guile (display foo)
Guile Backtrace:
In ice-9/boot-9.scm:
157: 10 [catch #t #&lt;catch-closure 2c76e20&gt; ...]
In unknown file:
?: 9 [apply-smob/1 #&lt;catch-closure 2c76e20&gt;]
In ice-9/boot-9.scm:
157: 8 [catch #t #&lt;catch-closure 2c76d20&gt; ...]
In unknown file:
?: 7 [apply-smob/1 #&lt;catch-closure 2c76d20&gt;]
?: 6 [call-with-input-string "(display foo)" ...]
In ice-9/boot-9.scm:
2320: 5 [save-module-excursion #&lt;procedure 2c2dc30 ... ()&gt;]
In ice-9/eval-string.scm:
44: 4 [read-and-eval #&lt;input: string 27cb410&gt; #:lang ...]
37: 3 [lp (display foo)]
In ice-9/eval.scm:
387: 2 [eval # ()]
393: 1 [eval #&lt;memoized foo&gt; ()]
In unknown file:
?: 0 [memoize-variable-access! #&lt;memoized foo&gt; ...]
ERROR: In procedure memoize-variable-access!:
ERROR: Unbound variable: foo
Error while executing Scheme code.
</pre>
</dl>
<p><span class="sc">gdb</span> errors that happen in <span class="sc">gdb</span> commands invoked by
Guile code are converted to Guile exceptions. The type of the
Guile exception depends on the error.
<p>Guile procedures provided by <span class="sc">gdb</span> can throw the standard
Guile exceptions like <code>wrong-type-arg</code> and <code>out-of-range</code>.
<p>User interrupt (via <kbd>C-c</kbd> or by typing <kbd>q</kbd> at a pagination
prompt) is translated to a Guile <code>signal</code> exception with value
<code>SIGINT</code>.
<p><span class="sc">gdb</span> Guile procedures can also throw these exceptions:
<dl>
<dt><code>gdb:error</code><a name="index-gdb_003aerror-2476"></a><dd>This exception is a catch-all for errors generated from within <span class="sc">gdb</span>.
<br><dt><code>gdb:invalid-object</code><a name="index-gdb_003ainvalid_002dobject-2477"></a><dd>This exception is thrown when accessing Guile objects that wrap underlying
<span class="sc">gdb</span> objects have become invalid. For example, a
<code>&lt;gdb:breakpoint&gt;</code> object becomes invalid if the user deletes it
from the command line. The object still exists in Guile, but the
object it represents is gone. Further operations on this breakpoint
will throw this exception.
<br><dt><code>gdb:memory-error</code><a name="index-gdb_003amemory_002derror-2478"></a><dd>This exception is thrown when an operation tried to access invalid
memory in the inferior.
<br><dt><code>gdb:pp-type-error</code><a name="index-gdb_003app_002dtype_002derror-2479"></a><dd>This exception is thrown when a Guile pretty-printer passes a bad object
to <span class="sc">gdb</span>.
</dl>
<p>The following exception-related procedures are provided by the
<code>(gdb)</code> module.
<div class="defun">
&mdash; Scheme Procedure: <b>make-exception</b><var> key args<a name="index-make_002dexception-2480"></a></var><br>
<blockquote><p>Return a <code>&lt;gdb:exception&gt;</code> object given by its <var>key</var> and
<var>args</var>, which are the standard Guile parameters of an exception.
See the Guile documentation for more information (see <a href="../guile/Exceptions.html#Exceptions">Exceptions</a>).
</p></blockquote></div>
<div class="defun">
&mdash; Scheme Procedure: <b>exception?</b><var> object<a name="index-exception_003f-2481"></a></var><br>
<blockquote><p>Return <code>#t</code> if <var>object</var> is a <code>&lt;gdb:exception&gt;</code> object.
Otherwise return <code>#f</code>.
</p></blockquote></div>
<div class="defun">
&mdash; Scheme Procedure: <b>exception-key</b><var> exception<a name="index-exception_002dkey-2482"></a></var><br>
<blockquote><p>Return the <var>args</var> field of a <code>&lt;gdb:exception&gt;</code> object.
</p></blockquote></div>
<div class="defun">
&mdash; Scheme Procedure: <b>exception-args</b><var> exception<a name="index-exception_002dargs-2483"></a></var><br>
<blockquote><p>Return the <var>args</var> field of a <code>&lt;gdb:exception&gt;</code> object.
</p></blockquote></div>
</body></html>