Debugging with GDB (September 2007)

82 Debugging with GDB
The second example fails because the CARDINAL 1 is not type-compatible with the REAL
2.3.
For the expressions you use in GDB commands, you can tell the GDB type checker to
skip checking; to treat any mismatches as errors and abandon the expression; or to only
issue warnings when type mismatches occur, and evaluate the expression anyway. When
you choose the last of these, GDB evaluates expressions like the second example above, but
also issues a warning.
Even if you turn type checking off, there may be other reasons related to type that
prevent GDB from evaluating an e xpression. For instance, GDB does not know how to
add an int and a struct foo. 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.
Each language defines to what degree it is strict about type. For instance C requires 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 Section 9.4 [Supported languages], page 83, for further details on specific languages.
GDB provides some additional commands for controlling the type checker:
set check type auto
Set type checking on or off based on the current working language. See Sec-
tion 9.4 [Supported languages], page 83, for the default settings for each lan-
guage.
set check type on
set check type off
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 express ion while type checking
is on, GDB prints a message and aborts evaluation of the expression.
set check type warn
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, GDB cannot add numbers and structures.
show type Show the current setting of the type checker, and whether or not GDB is setting
it automatically.
9.3.2 An overview of range checking
In some languages 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.
For expressions you use in GDB commands, you can tell GDB 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.