前: Type Checking, 上: Checks
いくつかの言語 (例えば、 Modula-2) では、 型の上限を超えるとエラーになります。 このチェックは、 実行時に行われます。 このような範囲チェックは、 計算結果がオーバーフローしたり、 配列の要素へのアクセス時に使うインデックスが配列の上限を超えたりすることがないことを確実にすることによって、 プログラムの正しさを確かなものにすることを意図したものです。
GDBコマンドの中で使う式については、 範囲エラーの扱いを以下のいずれかにするよう GDBに指示することができます。
範囲エラーは、 数値がオーバフローした場合、 配列インデックスの上限を超えた場合、 どの型のメンバでもない定数が入力された場合に発生します。 しかし、 言語の中には、 数値のオーバフローをエラーとして扱わないものもあります。 C言語の多くの実装では、 数学的演算によるオーバフローは、 結果の値を「一巡」させて小さな値にします。 例えば、 mが整数値の最大値、 sが整数値の最小値とすると、
m + 1 => s
になります。
これも個々の言語に固有な性質であり、 場合によっては、 個々のコンパイラやマシンに固有な性質であることもあります。 特定の言語に関する詳細については、 See Supported languages。
GDBは、 範囲チェック機能を制御するためのコマンドをさらにいくつか提供しています。
set check range auto
set check range on
set check range off
set check range warn
show range