12.4.3.9 Known Peculiarities of Ada Mode
Besides the omissions listed previously (see Omissions from Ada),
we know of several problems with and limitations of Ada mode in GDB,
some of which will be fixed with planned future releases of the debugger
and the GNU Ada compiler.
- Currently, the debugger
has insufficient information to determine whether certain pointers represent
pointers to objects or the objects themselves.
Thus, the user may have to tack an extra .all after an expression
to get it printed properly.
- Static constants that the compiler chooses not to materialize as objects in
storage are invisible to the debugger.
- Named parameter associations in function argument lists are ignored (the
argument lists are treated as positional).
- Many useful library packages are currently invisible to the debugger.
- Fixed-point arithmetic, conversions, input, and output is carried out using
floating-point arithmetic, and may give results that only approximate those on
the host machine.
- The type of the 'Address attribute may not be System.Address.
- When stopped in a particular subprogram, you can access variables defined
in other, lexically
enclosing subprograms by their simple names. At the moment, however, this
may not always work; it depends on whether the compiler happens to have
made the necessary information (the “static link”) available
at execution time, which it can sometimes avoid. Of course,
even in those cases where
the compiler does not provide the information, you can still look at such
variables by issuing the appropriate number of
up
commands to get to
frame containing the variable you wish to see.
Access to non-local variables does not, at the moment, work in
the test expressions for conditional breakpoints
(see Break conditions) unless you happen to specify these
while stopped in the subprogram in which they are to be applied.
- Depending on the platform, it is not always possible to set breakpoints
on nested functions by name (e.g.,
break foo
). In effect, the
nested functions act like local variables of the enclosing function.
On these platforms, you must wait until GDB is stopped in
the enclosing function before using this form of break
command.
This is not much of a limitation, since you can still set a breakpoint on
the first line of the desired function using the usual
break
file:
line syntax.