97 lines
4.6 KiB
HTML
97 lines
4.6 KiB
HTML
|
<html lang="en">
|
||
|
<head>
|
||
|
<title>Range 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="prev" href="Type-Checking.html#Type-Checking" title="Type Checking">
|
||
|
<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="Range-Checking"></a>
|
||
|
<p>
|
||
|
Previous: <a rel="previous" accesskey="p" href="Type-Checking.html#Type-Checking">Type Checking</a>,
|
||
|
Up: <a rel="up" accesskey="u" href="Checks.html#Checks">Checks</a>
|
||
|
<hr>
|
||
|
</div>
|
||
|
|
||
|
<h4 class="subsection">15.3.2 An Overview of Range Checking</h4>
|
||
|
|
||
|
<p>In some languages (such as Modula-2), it is an error to exceed the
|
||
|
bounds of a type; this is enforced with run-time checks. Such range
|
||
|
checking is meant to ensure program correctness by making sure
|
||
|
computations do not overflow, or indices on an array element access do
|
||
|
not exceed the bounds of the array.
|
||
|
|
||
|
<p>For expressions you use in <span class="sc">gdb</span> commands, you can tell
|
||
|
<span class="sc">gdb</span> to treat range errors in one of three ways: ignore them,
|
||
|
always treat them as errors and abandon the expression, or issue
|
||
|
warnings but evaluate the expression anyway.
|
||
|
|
||
|
<p>A range error can result from numerical overflow, from exceeding an
|
||
|
array index bound, or when you type a constant that is not a member
|
||
|
of any type. Some languages, however, do not treat overflows as an
|
||
|
error. In many implementations of C, mathematical overflow causes the
|
||
|
result to “wrap around” to lower values—for example, if <var>m</var> is
|
||
|
the largest integer value, and <var>s</var> is the smallest, then
|
||
|
|
||
|
<pre class="smallexample"> <var>m</var> + 1 ⇒ <var>s</var>
|
||
|
</pre>
|
||
|
<p>This, too, is specific to individual languages, and in some cases
|
||
|
specific to individual compilers or machines. 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 range checker:
|
||
|
|
||
|
<p><a name="index-set-check-range-979"></a><a name="index-show-check-range-980"></a>
|
||
|
<dl>
|
||
|
<dt><code>set check range auto</code><dd>Set range 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 range on</code><dt><code>set check range off</code><dd>Set range checking on or off, overriding the default setting for the
|
||
|
current working language. A warning is issued if the setting does not
|
||
|
match the language default. If a range error occurs and range checking is on,
|
||
|
then a message is printed and evaluation of the expression is aborted.
|
||
|
|
||
|
<br><dt><code>set check range warn</code><dd>Output messages when the <span class="sc">gdb</span> range checker detects a range error,
|
||
|
but attempt to evaluate the expression anyway. Evaluating the
|
||
|
expression may still be impossible for other reasons, such as accessing
|
||
|
memory that the process does not own (a typical example from many Unix
|
||
|
systems).
|
||
|
|
||
|
<br><dt><code>show range</code><dd>Show the current setting of the range checker, and whether or not it is
|
||
|
being set automatically by <span class="sc">gdb</span>.
|
||
|
</dl>
|
||
|
|
||
|
</body></html>
|
||
|
|