blob: c4cf121d49c6f0830b95b7e30dd0efb1c8a9306c [file] [log] [blame]
<html lang="en">
<head>
<title>Type Checking - 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="Checks.html#Checks" title="Checks">
<link rel="next" href="Range-Checking.html#Range-Checking" title="Range Checking">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Type-Checking"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Range-Checking.html#Range-Checking">Range Checking</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Checks.html#Checks">Checks</a>
<hr>
</div>
<h4 class="subsection">15.3.1 An Overview of Type Checking</h4>
<p>Some languages, such as Modula-2, are strongly typed, meaning that the
arguments to operators and functions have to be of the correct type,
otherwise an error occurs. These checks prevent type mismatch
errors from ever causing any run-time problems. For example,
<pre class="smallexample"> 1 + 2 &rArr; 3
<br>but<br>
error--&gt; 1 + 2.3
</pre>
<p>The second example fails because the <code>CARDINAL</code> 1 is not
type-compatible with the <code>REAL</code> 2.3.
<p>For the expressions you use in <span class="sc">gdb</span> commands, you can tell the
<span class="sc">gdb</span> type checker to skip checking;
to treat any mismatches as errors and abandon the expression;
or to only issue warnings when type mismatches occur,
but evaluate the expression anyway. When you choose the last of
these, <span class="sc">gdb</span> evaluates expressions like the second example above, but
also issues a warning.
<p>Even if you turn type checking off, there may be other reasons
related to type that prevent <span class="sc">gdb</span> from evaluating an expression.
For instance, <span class="sc">gdb</span> does not know how to add an <code>int</code> and
a <code>struct foo</code>. These particular type errors have nothing to do
with the language in use, and usually arise from expressions, such as
the one described above, which make little sense to evaluate anyway.
<p>Each language defines to what degree it is strict about type. For
instance, both Modula-2 and C require the arguments to arithmetical
operators to be numbers. In C, enumerated types and pointers can be
represented as numbers, so that they are valid arguments to mathematical
operators. See <a href="Supported-Languages.html#Supported-Languages">Supported Languages</a>, for further
details on specific languages.
<p><span class="sc">gdb</span> provides some additional commands for controlling the type checker:
<p><a name="index-set-check-type-787"></a><a name="index-show-check-type-788"></a>
<dl>
<dt><code>set check type auto</code><dd>Set type checking on or off based on the current working language.
See <a href="Supported-Languages.html#Supported-Languages">Supported Languages</a>, for the default settings for
each language.
<br><dt><code>set check type on</code><dt><code>set check type off</code><dd>Set type checking on or off, overriding the default setting for the
current working language. Issue a warning if the setting does not
match the language default. If any type mismatches occur in
evaluating an expression while type checking is on, <span class="sc">gdb</span> prints a
message and aborts evaluation of the expression.
<br><dt><code>set check type warn</code><dd>Cause the type checker to issue warnings, but to always attempt to
evaluate the expression. Evaluating the expression may still
be impossible for other reasons. For example, <span class="sc">gdb</span> cannot add
numbers and structures.
<br><dt><code>show type</code><dd>Show the current setting of the type checker, and whether or not <span class="sc">gdb</span>
is setting it automatically.
</dl>
<p><a name="index-range-checking-789"></a><a name="index-checks_002c-range-790"></a>
</body></html>