18.104.22.168 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
.allafter 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 GNAT compiler never generates the prefix
Standardfor any of the standard symbols defined by the Ada language. gdb knows about this: it will strip the prefix from names when you use it, and will never look for a name you have so qualified among local symbols, nor match against symbols in other packages or subprograms. If you have defined entities anywhere in your program other than parameters and local variables whose simple names match names in
Standard, GNAT's lack of qualification here can cause confusion. When this happens, you can usually resolve the confusion by qualifying the problematic names with package
Older versions of the compiler sometimes generate erroneous debugging information, resulting in the debugger incorrectly printing the value of affected entities. In some cases, the debugger is able to work around an issue automatically. In other cases, the debugger is able to work around the issue, but the work-around has to be specifically enabled.
set ada trust-PAD-over-XVS on
- Configure GDB to strictly follow the GNAT encoding when computing the
value of Ada entities, particularly when
PAD___XVStypes are involved (see
ada/exp_dbug.adsin the GCC sources for a complete description of the encoding used by the GNAT compiler). This is the default.
set ada trust-PAD-over-XVS off
- This is related to the encoding using by the GNAT compiler. If gdb
sometimes prints the wrong value for certain entities, changing
offactivates a work-around which may fix the issue. It is always safe to set
off, but this incurs a slight performance penalty, so it is recommended to leave this setting to