3063 lines
		
	
	
	
		
			131 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			3063 lines
		
	
	
	
		
			131 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<HTML>
 | 
						|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | 
						|
<!-- Created on March, 27  2008 by texi2html 1.64 -->
 | 
						|
<!-- 
 | 
						|
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
 | 
						|
            Karl Berry  <karl@freefriends.org>
 | 
						|
            Olaf Bachmann <obachman@mathematik.uni-kl.de>
 | 
						|
            and many others.
 | 
						|
Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
 | 
						|
Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
 | 
						|
 
 | 
						|
-->
 | 
						|
<HEAD>
 | 
						|
<TITLE>Debugging with GDB: Languages</TITLE>
 | 
						|
 | 
						|
<META NAME="description" CONTENT="Debugging with GDB: Languages">
 | 
						|
<META NAME="keywords" CONTENT="Debugging with GDB: Languages">
 | 
						|
<META NAME="resource-type" CONTENT="document">
 | 
						|
<META NAME="distribution" CONTENT="global">
 | 
						|
<META NAME="Generator" CONTENT="texi2html 1.64">
 | 
						|
 | 
						|
</HEAD>
 | 
						|
 | 
						|
<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
 | 
						|
 | 
						|
<A NAME="SEC102"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_12.html#SEC101"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC103"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_3.html#SEC6"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_14.html#SEC146"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H1> 12. Using GDB with Different Languages </H1>
 | 
						|
<!--docid::SEC102::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Although programming languages generally have common aspects, they are
 | 
						|
rarely expressed in the same manner.  For instance, in ANSI C,
 | 
						|
dereferencing a pointer <CODE>p</CODE> is accomplished by <CODE>*p</CODE>, but in
 | 
						|
Modula-2, it is accomplished by <CODE>p^</CODE>.  Values can also be
 | 
						|
represented (and displayed) differently.  Hex numbers in C appear as
 | 
						|
<SAMP>`0x1ae'</SAMP>, while in Modula-2 they appear as <SAMP>`1AEH'</SAMP>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX568"></A>
 | 
						|
Language-specific information is built into GDB for some languages,
 | 
						|
allowing you to express operations like the above in your program's
 | 
						|
native language, and allowing GDB to output values in a manner
 | 
						|
consistent with the syntax of your program's native language.  The
 | 
						|
language you use to build expressions is called the <EM>working
 | 
						|
language</EM>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC103">12.1 Switching Between Source Languages</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Switching between source languages</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC107">12.2 Displaying the Language</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Displaying the language</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC108">12.3 Type and Range Checking</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Type and range checks</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC111">12.4 Supported Languages</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Supported languages</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC145">12.5 Unsupported Languages</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Unsupported languages</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Setting"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC103"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC104"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC107"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 12.1 Switching Between Source Languages </H2>
 | 
						|
<!--docid::SEC103::-->
 | 
						|
<P>
 | 
						|
 | 
						|
There are two ways to control the working language--either have GDB
 | 
						|
set it automatically, or select it manually yourself.  You can use the
 | 
						|
<CODE>set language</CODE> command for either purpose.  On startup, GDB
 | 
						|
defaults to setting the language automatically.  The working language is
 | 
						|
used to determine how expressions you type are interpreted, how values
 | 
						|
are printed, etc.
 | 
						|
</P><P>
 | 
						|
 | 
						|
In addition to the working language, every source file that
 | 
						|
GDB knows about has its own working language.  For some object
 | 
						|
file formats, the compiler might indicate which language a particular
 | 
						|
source file is in.  However, most of the time GDB infers the
 | 
						|
language from the name of the file.  The language of a source file
 | 
						|
controls whether C<TT>++</TT> names are demangled--this way <CODE>backtrace</CODE> can
 | 
						|
show each frame appropriately for its own language.  There is no way to
 | 
						|
set the language of a source file from within GDB, but you can
 | 
						|
set the language associated with a filename extension.  See section <A HREF="gdb_13.html#SEC107">Displaying the Language</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
This is most commonly a problem when you use a program, such
 | 
						|
as <CODE>cfront</CODE> or <CODE>f2c</CODE>, that generates C but is written in
 | 
						|
another language.  In that case, make the
 | 
						|
program use <CODE>#line</CODE> directives in its C output; that way
 | 
						|
GDB will know the correct language of the source code of the original
 | 
						|
program, and will display that source code, not the generated C code.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC104">12.1.1 List of Filename Extensions and Languages</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Filename extensions and languages.</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC105">12.1.2 Setting the Working Language</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Setting the working language manually</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC106">12.1.3 Having GDB Infer the Source Language</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Having GDB infer the source language</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Filenames"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC104"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC103"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC105"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC103"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC107"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.1.1 List of Filename Extensions and Languages </H3>
 | 
						|
<!--docid::SEC104::-->
 | 
						|
<P>
 | 
						|
 | 
						|
If a source file name ends in one of the following extensions, then
 | 
						|
GDB infers that its language is the one indicated.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><TT>`.ada'</TT>
 | 
						|
<DD><DT><TT>`.ads'</TT>
 | 
						|
<DD><DT><TT>`.adb'</TT>
 | 
						|
<DD><DT><TT>`.a'</TT>
 | 
						|
<DD>Ada source file.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><TT>`.c'</TT>
 | 
						|
<DD>C source file
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><TT>`.C'</TT>
 | 
						|
<DD><DT><TT>`.cc'</TT>
 | 
						|
<DD><DT><TT>`.cp'</TT>
 | 
						|
<DD><DT><TT>`.cpp'</TT>
 | 
						|
<DD><DT><TT>`.cxx'</TT>
 | 
						|
<DD><DT><TT>`.c++'</TT>
 | 
						|
<DD>C<TT>++</TT> source file
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><TT>`.m'</TT>
 | 
						|
<DD>Objective-C source file
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><TT>`.f'</TT>
 | 
						|
<DD><DT><TT>`.F'</TT>
 | 
						|
<DD>Fortran source file
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><TT>`.mod'</TT>
 | 
						|
<DD>Modula-2 source file
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><TT>`.s'</TT>
 | 
						|
<DD><DT><TT>`.S'</TT>
 | 
						|
<DD>Assembler source file.  This actually behaves almost like C, but
 | 
						|
GDB does not skip over function prologues when stepping.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
In addition, you may set the language associated with a filename
 | 
						|
extension.  See section <A HREF="gdb_13.html#SEC107">Displaying the Language</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Manually"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC105"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC104"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC106"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC106"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC103"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC107"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.1.2 Setting the Working Language </H3>
 | 
						|
<!--docid::SEC105::-->
 | 
						|
<P>
 | 
						|
 | 
						|
If you allow GDB to set the language automatically,
 | 
						|
expressions are interpreted the same way in your debugging session and
 | 
						|
your program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX569"></A>
 | 
						|
If you wish, you may set the language manually.  To do this, issue the
 | 
						|
command <SAMP>`set language <VAR>lang</VAR>'</SAMP>, where <VAR>lang</VAR> is the name of
 | 
						|
a language, such as
 | 
						|
<CODE>c</CODE> or <CODE>modula-2</CODE>.
 | 
						|
For a list of the supported languages, type <SAMP>`set language'</SAMP>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Setting the language manually prevents GDB from updating the working
 | 
						|
language automatically.  This can lead to confusion if you try
 | 
						|
to debug a program when the working language is not the same as the
 | 
						|
source language, when an expression is acceptable to both
 | 
						|
languages--but means different things.  For instance, if the current
 | 
						|
source file were written in C, and GDB was parsing Modula-2, a
 | 
						|
command such as:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>print a = b + c
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
might not have the effect you intended.  In C, this means to add
 | 
						|
<CODE>b</CODE> and <CODE>c</CODE> and place the result in <CODE>a</CODE>.  The result
 | 
						|
printed would be the value of <CODE>a</CODE>.  In Modula-2, this means to compare
 | 
						|
<CODE>a</CODE> to the result of <CODE>b+c</CODE>, yielding a <CODE>BOOLEAN</CODE> value.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Automatically"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC106"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC105"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC107"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC103"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC107"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.1.3 Having GDB Infer the Source Language </H3>
 | 
						|
<!--docid::SEC106::-->
 | 
						|
<P>
 | 
						|
 | 
						|
To have GDB set the working language automatically, use
 | 
						|
<SAMP>`set language local'</SAMP> or <SAMP>`set language auto'</SAMP>.  GDB
 | 
						|
then infers the working language.  That is, when your program stops in a
 | 
						|
frame (usually by encountering a breakpoint), GDB sets the
 | 
						|
working language to the language recorded for the function in that
 | 
						|
frame.  If the language for a frame is unknown (that is, if the function
 | 
						|
or block corresponding to the frame was defined in a source file that
 | 
						|
does not have a recognized extension), the current working language is
 | 
						|
not changed, and GDB issues a warning.
 | 
						|
</P><P>
 | 
						|
 | 
						|
This may not seem necessary for most programs, which are written
 | 
						|
entirely in one source language.  However, program modules and libraries
 | 
						|
written in one source language can be used by a main program written in
 | 
						|
a different source language.  Using <SAMP>`set language auto'</SAMP> in this
 | 
						|
case frees you from having to set the working language manually.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Show"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC107"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC106"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC108"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC108"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_14.html#SEC146"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 12.2 Displaying the Language </H2>
 | 
						|
<!--docid::SEC107::-->
 | 
						|
<P>
 | 
						|
 | 
						|
The following commands help you find out which language is the
 | 
						|
working language, and also what language source files were written in.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>show language</CODE>
 | 
						|
<DD><A NAME="IDX570"></A>
 | 
						|
Display the current working language.  This is the
 | 
						|
language you can use with commands such as <CODE>print</CODE> to
 | 
						|
build and compute expressions that may involve variables in your program.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>info frame</CODE>
 | 
						|
<DD><A NAME="IDX571"></A>
 | 
						|
Display the source language for this frame.  This language becomes the
 | 
						|
working language if you use an identifier from this frame.
 | 
						|
See section <A HREF="gdb_7.html#SEC50">Information about a Frame</A>, to identify the other
 | 
						|
information listed here.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>info source</CODE>
 | 
						|
<DD><A NAME="IDX572"></A>
 | 
						|
Display the source language of this source file.
 | 
						|
See section <A HREF="gdb_14.html#SEC146">Examining the Symbol Table</A>, to identify the other
 | 
						|
information listed here.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
In unusual circumstances, you may have source files with extensions
 | 
						|
not in the standard list.  You can then set the extension associated
 | 
						|
with a language explicitly:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set extension-language <VAR>ext</VAR> <VAR>language</VAR></CODE>
 | 
						|
<DD><A NAME="IDX573"></A>
 | 
						|
Tell GDB that source files with extension <VAR>ext</VAR> are to be
 | 
						|
assumed as written in the source language <VAR>language</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>info extensions</CODE>
 | 
						|
<DD><A NAME="IDX574"></A>
 | 
						|
List all the filename extensions and the associated languages.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Checks"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC108"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC107"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC109"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 12.3 Type and Range Checking </H2>
 | 
						|
<!--docid::SEC108::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM> In this release, the GDB commands for type and range
 | 
						|
checking are included, but they do not yet have any effect.  This
 | 
						|
section documents the intended facilities.
 | 
						|
</BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
Some languages are designed to guard you against making seemingly common
 | 
						|
errors through a series of compile- and run-time checks.  These include
 | 
						|
checking the type of arguments to functions and operators, and making
 | 
						|
sure mathematical overflows are caught at run time.  Checks such as
 | 
						|
these help to ensure a program's correctness once it has been compiled
 | 
						|
by eliminating type mismatches, and providing active checks for range
 | 
						|
errors when your program is running.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB can check for conditions like the above if you wish.
 | 
						|
Although GDB does not check the statements in your program,
 | 
						|
it can check expressions entered directly into GDB for
 | 
						|
evaluation via the <CODE>print</CODE> command, for example.  As with the
 | 
						|
working language, GDB can also decide whether or not to check
 | 
						|
automatically based on your program's source language.
 | 
						|
See section <A HREF="gdb_13.html#SEC111">Supported Languages</A>, for the default
 | 
						|
settings of supported languages.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC109">12.3.1 An Overview of Type Checking</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">An overview of type checking</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC110">12.3.2 An Overview of Range Checking</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">An overview of range checking</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX575"></A>
 | 
						|
<A NAME="IDX576"></A>
 | 
						|
<A NAME="Type Checking"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC109"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC108"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC110"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC108"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.3.1 An Overview of Type Checking </H3>
 | 
						|
<!--docid::SEC109::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Some languages, such as Modula-2, are strongly typed, meaning that the
 | 
						|
arguments to operators and functions have to be of the correct type,
 | 
						|
otherwise an error occurs.  These checks prevent type mismatch
 | 
						|
errors from ever causing any run-time problems.  For example,
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>1 + 2 => 3
 | 
						|
but
 | 
						|
error--> 1 + 2.3
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The second example fails because the <CODE>CARDINAL</CODE> 1 is not
 | 
						|
type-compatible with the <CODE>REAL</CODE> 2.3.
 | 
						|
</P><P>
 | 
						|
 | 
						|
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,
 | 
						|
but evaluate the expression anyway.  When you choose the last of
 | 
						|
these, GDB evaluates expressions like the second example above, but
 | 
						|
also issues a warning.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Even if you turn type checking off, there may be other reasons
 | 
						|
related to type that prevent GDB from evaluating an expression.
 | 
						|
For instance, GDB does not know how to add an <CODE>int</CODE> and
 | 
						|
a <CODE>struct foo</CODE>.  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.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Each language defines to what degree it is strict about type.  For
 | 
						|
instance, both Modula-2 and C require 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 <A HREF="gdb_13.html#SEC111">Supported Languages</A>, for further
 | 
						|
details on specific languages.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB provides some additional commands for controlling the type checker:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX577"></A>
 | 
						|
<A NAME="IDX578"></A>
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set check type auto</CODE>
 | 
						|
<DD>Set type checking on or off based on the current working language.
 | 
						|
See section <A HREF="gdb_13.html#SEC111">Supported Languages</A>, for the default settings for
 | 
						|
each language.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set check type on</CODE>
 | 
						|
<DD><DT><CODE>set check type off</CODE>
 | 
						|
<DD>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 expression while type checking is on, GDB prints a
 | 
						|
message and aborts evaluation of the expression.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set check type warn</CODE>
 | 
						|
<DD>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.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show type</CODE>
 | 
						|
<DD>Show the current setting of the type checker, and whether or not GDB
 | 
						|
is setting it automatically.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX579"></A>
 | 
						|
<A NAME="IDX580"></A>
 | 
						|
<A NAME="Range Checking"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC110"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC109"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC108"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.3.2 An Overview of Range Checking </H3>
 | 
						|
<!--docid::SEC110::-->
 | 
						|
<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><P>
 | 
						|
 | 
						|
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.
 | 
						|
</P><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
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><VAR>m</VAR> + 1 => <VAR>s</VAR>
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
This, too, is specific to individual languages, and in some cases
 | 
						|
specific to individual compilers or machines.  See section <A HREF="gdb_13.html#SEC111">Supported Languages</A>, for further details on specific languages.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB provides some additional commands for controlling the range checker:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX581"></A>
 | 
						|
<A NAME="IDX582"></A>
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set check range auto</CODE>
 | 
						|
<DD>Set range checking on or off based on the current working language.
 | 
						|
See section <A HREF="gdb_13.html#SEC111">Supported Languages</A>, for the default settings for
 | 
						|
each language.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set check range on</CODE>
 | 
						|
<DD><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.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set check range warn</CODE>
 | 
						|
<DD>Output messages when the GDB 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).
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show range</CODE>
 | 
						|
<DD>Show the current setting of the range checker, and whether or not it is
 | 
						|
being set automatically by GDB.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Supported Languages"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC111"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC110"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 12.4 Supported Languages </H2>
 | 
						|
<!--docid::SEC111::-->
 | 
						|
<P>
 | 
						|
 | 
						|
GDB supports C, C<TT>++</TT>, Objective-C, Fortran, Java, Pascal,
 | 
						|
assembly, Modula-2, and Ada.
 | 
						|
Some GDB features may be used in expressions regardless of the
 | 
						|
language you use: the GDB <CODE>@</CODE> and <CODE>::</CODE> operators,
 | 
						|
and the <SAMP>`{type}addr'</SAMP> construct (see section <A HREF="gdb_9.html#SEC60">Expressions</A>) can be used with the constructs of any supported
 | 
						|
language.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The following sections detail to what degree each source language is
 | 
						|
supported by GDB.  These sections are not meant to be language
 | 
						|
tutorials or references, but serve only as a reference guide to what the
 | 
						|
GDB expression parser accepts, and what input and output
 | 
						|
formats should look like for different languages.  There are many good
 | 
						|
books written on each of these languages; please look to these for a
 | 
						|
language reference or tutorial.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC112">12.4.1 C and C<TT>++</TT></A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC121">12.4.2 Objective-C</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC124">12.4.3 Fortran</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC128">12.4.4 Pascal</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC129">12.4.5 Modula-2</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC139">12.4.6 Ada</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="C"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC112"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC113"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.4.1 C and C<TT>++</TT> </H3>
 | 
						|
<!--docid::SEC112::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX583"></A>
 | 
						|
<A NAME="IDX584"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
Since C and C<TT>++</TT> are so closely related, many features of GDB apply
 | 
						|
to both languages.  Whenever this is the case, we discuss those languages
 | 
						|
together.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX585"></A>
 | 
						|
<A NAME="IDX586"></A>
 | 
						|
<A NAME="IDX587"></A>
 | 
						|
The C<TT>++</TT> debugging facilities are jointly implemented by the C<TT>++</TT>
 | 
						|
compiler and GDB.  Therefore, to debug your C<TT>++</TT> code
 | 
						|
effectively, you must compile your C<TT>++</TT> programs with a supported
 | 
						|
C<TT>++</TT> compiler, such as GNU <CODE>g++</CODE>, or the HP ANSI C<TT>++</TT>
 | 
						|
compiler (<CODE>aCC</CODE>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
For best results when using GNU C<TT>++</TT>, use the DWARF 2 debugging
 | 
						|
format; if it doesn't work on your system, try the stabs+ debugging
 | 
						|
format.  You can select those formats explicitly with the <CODE>g++</CODE>
 | 
						|
command-line options <SAMP>`-gdwarf-2'</SAMP> and <SAMP>`-gstabs+'</SAMP>.
 | 
						|
See section `Options for Debugging Your Program or GCC' in <CITE>Using the GNU Compiler Collection (GCC)</CITE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC113">12.4.1.1 C and C<TT>++</TT> Operators</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">C and C<TT>++</TT> operators</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC114">12.4.1.2 C and C<TT>++</TT> Constants</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">C and C<TT>++</TT> constants</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC115">12.4.1.3 C<TT>++</TT> Expressions</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">C<TT>++</TT> expressions</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC116">12.4.1.4 C and C<TT>++</TT> Defaults</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Default settings for C and C<TT>++</TT></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC117">12.4.1.5 C and C<TT>++</TT> Type and Range Checks</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">C and C<TT>++</TT> type and range checks</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC118">12.4.1.6 GDB and C</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC119">12.4.1.7 GDB Features for C<TT>++</TT></A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">GDB features for C<TT>++</TT></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC120">12.4.1.8 Decimal Floating Point format</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Numbers in Decimal Floating Point format</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="C Operators"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC113"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC114"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.1.1 C and C<TT>++</TT> Operators </H4>
 | 
						|
<!--docid::SEC113::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX588"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
Operators must be defined on values of specific types.  For instance,
 | 
						|
<CODE>+</CODE> is defined on numbers, but not on structures.  Operators are
 | 
						|
often defined on groups of types.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For the purposes of C and C<TT>++</TT>, the following definitions hold:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Integral types</EM> include <CODE>int</CODE> with any of its storage-class
 | 
						|
specifiers; <CODE>char</CODE>; <CODE>enum</CODE>; and, for C<TT>++</TT>, <CODE>bool</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Floating-point types</EM> include <CODE>float</CODE>, <CODE>double</CODE>, and
 | 
						|
<CODE>long double</CODE> (if supported by the target platform).
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Pointer types</EM> include all types defined as <CODE>(<VAR>type</VAR> *)</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Scalar types</EM> include all of the above.
 | 
						|
<P>
 | 
						|
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
The following operators are supported.  They are listed here
 | 
						|
in order of increasing precedence:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>,</CODE>
 | 
						|
<DD>The comma or sequencing operator.  Expressions in a comma-separated list
 | 
						|
are evaluated from left to right, with the result of the entire
 | 
						|
expression being the last expression evaluated.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>=</CODE>
 | 
						|
<DD>Assignment.  The value of an assignment expression is the value
 | 
						|
assigned.  Defined on scalar types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE><VAR>op</VAR>=</CODE>
 | 
						|
<DD>Used in an expression of the form <CODE><VAR>a</VAR> <VAR>op</VAR>= <VAR>b</VAR></CODE>,
 | 
						|
and translated to <CODE><VAR>a</VAR> = <VAR>a op b</VAR></CODE>.
 | 
						|
<CODE><VAR>op</VAR>=</CODE> and <CODE>=</CODE> have the same precedence.
 | 
						|
<VAR>op</VAR> is any one of the operators <CODE>|</CODE>, <CODE>^</CODE>, <CODE>&</CODE>,
 | 
						|
<CODE><<</CODE>, <CODE>>></CODE>, <CODE>+</CODE>, <CODE>-</CODE>, <CODE>*</CODE>, <CODE>/</CODE>, <CODE>%</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>?:</CODE>
 | 
						|
<DD>The ternary operator.  <CODE><VAR>a</VAR> ? <VAR>b</VAR> : <VAR>c</VAR></CODE> can be thought
 | 
						|
of as:  if <VAR>a</VAR> then <VAR>b</VAR> else <VAR>c</VAR>.  <VAR>a</VAR> should be of an
 | 
						|
integral type.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>||</CODE>
 | 
						|
<DD>Logical OR.  Defined on integral types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>&&</CODE>
 | 
						|
<DD>Logical AND.  Defined on integral types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>|</CODE>
 | 
						|
<DD>Bitwise OR.  Defined on integral types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>^</CODE>
 | 
						|
<DD>Bitwise exclusive-OR.  Defined on integral types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>&</CODE>
 | 
						|
<DD>Bitwise AND.  Defined on integral types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>==, !=</CODE>
 | 
						|
<DD>Equality and inequality.  Defined on scalar types.  The value of these
 | 
						|
expressions is 0 for false and non-zero for true.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE><, >, <=, >=</CODE>
 | 
						|
<DD>Less than, greater than, less than or equal, greater than or equal.
 | 
						|
Defined on scalar types.  The value of these expressions is 0 for false
 | 
						|
and non-zero for true.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE><<, >></CODE>
 | 
						|
<DD>left shift, and right shift.  Defined on integral types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>@</CODE>
 | 
						|
<DD>The GDB "artificial array" operator (see section <A HREF="gdb_9.html#SEC60">Expressions</A>).
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>+, -</CODE>
 | 
						|
<DD>Addition and subtraction.  Defined on integral types, floating-point types and
 | 
						|
pointer types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>*, /, %</CODE>
 | 
						|
<DD>Multiplication, division, and modulus.  Multiplication and division are
 | 
						|
defined on integral and floating-point types.  Modulus is defined on
 | 
						|
integral types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>++, --</CODE>
 | 
						|
<DD>Increment and decrement.  When appearing before a variable, the
 | 
						|
operation is performed before the variable is used in an expression;
 | 
						|
when appearing after it, the variable's value is used before the
 | 
						|
operation takes place.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>*</CODE>
 | 
						|
<DD>Pointer dereferencing.  Defined on pointer types.  Same precedence as
 | 
						|
<CODE>++</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>&</CODE>
 | 
						|
<DD>Address operator.  Defined on variables.  Same precedence as <CODE>++</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
For debugging C<TT>++</TT>, GDB implements a use of <SAMP>`&'</SAMP> beyond what is
 | 
						|
allowed in the C<TT>++</TT> language itself: you can use <SAMP>`&(&<VAR>ref</VAR>)'</SAMP>
 | 
						|
to examine the address
 | 
						|
where a C<TT>++</TT> reference variable (declared with <SAMP>`&<VAR>ref</VAR>'</SAMP>) is
 | 
						|
stored.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>-</CODE>
 | 
						|
<DD>Negative.  Defined on integral and floating-point types.  Same
 | 
						|
precedence as <CODE>++</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>!</CODE>
 | 
						|
<DD>Logical negation.  Defined on integral types.  Same precedence as
 | 
						|
<CODE>++</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>~</CODE>
 | 
						|
<DD>Bitwise complement operator.  Defined on integral types.  Same precedence as
 | 
						|
<CODE>++</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>., -></CODE>
 | 
						|
<DD>Structure member, and pointer-to-structure member.  For convenience,
 | 
						|
GDB regards the two as equivalent, choosing whether to dereference a
 | 
						|
pointer based on the stored type information.
 | 
						|
Defined on <CODE>struct</CODE> and <CODE>union</CODE> data.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>.*, ->*</CODE>
 | 
						|
<DD>Dereferences of pointers to members.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>[]</CODE>
 | 
						|
<DD>Array indexing.  <CODE><VAR>a</VAR>[<VAR>i</VAR>]</CODE> is defined as
 | 
						|
<CODE>*(<VAR>a</VAR>+<VAR>i</VAR>)</CODE>.  Same precedence as <CODE>-></CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>()</CODE>
 | 
						|
<DD>Function parameter list.  Same precedence as <CODE>-></CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>::</CODE>
 | 
						|
<DD>C<TT>++</TT> scope resolution operator.  Defined on <CODE>struct</CODE>, <CODE>union</CODE>,
 | 
						|
and <CODE>class</CODE> types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>::</CODE>
 | 
						|
<DD>Doubled colons also represent the GDB scope operator
 | 
						|
(see section <A HREF="gdb_9.html#SEC60">Expressions</A>).  Same precedence as <CODE>::</CODE>,
 | 
						|
above.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
If an operator is redefined in the user code, GDB usually
 | 
						|
attempts to invoke the redefined version instead of using the operator's
 | 
						|
predefined meaning.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="C Constants"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC114"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC113"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC115"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC115"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.1.2 C and C<TT>++</TT> Constants </H4>
 | 
						|
<!--docid::SEC114::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX589"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB allows you to express the constants of C and C<TT>++</TT> in the
 | 
						|
following ways:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
Integer constants are a sequence of digits.  Octal constants are
 | 
						|
specified by a leading <SAMP>`0'</SAMP> (i.e. zero), and hexadecimal constants
 | 
						|
by a leading <SAMP>`0x'</SAMP> or <SAMP>`0X'</SAMP>.  Constants may also end with a letter
 | 
						|
<SAMP>`l'</SAMP>, specifying that the constant should be treated as a
 | 
						|
<CODE>long</CODE> value.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Floating point constants are a sequence of digits, followed by a decimal
 | 
						|
point, followed by a sequence of digits, and optionally followed by an
 | 
						|
exponent.  An exponent is of the form:
 | 
						|
<SAMP>`e[[+]|-]<VAR>nnn</VAR>'</SAMP>, where <VAR>nnn</VAR> is another
 | 
						|
sequence of digits.  The <SAMP>`+'</SAMP> is optional for positive exponents.
 | 
						|
A floating-point constant may also end with a letter <SAMP>`f'</SAMP> or
 | 
						|
<SAMP>`F'</SAMP>, specifying that the constant should be treated as being of
 | 
						|
the <CODE>float</CODE> (as opposed to the default <CODE>double</CODE>) type; or with
 | 
						|
a letter <SAMP>`l'</SAMP> or <SAMP>`L'</SAMP>, which specifies a <CODE>long double</CODE>
 | 
						|
constant.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Enumerated constants consist of enumerated identifiers, or their
 | 
						|
integral equivalents.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Character constants are a single character surrounded by single quotes
 | 
						|
(<CODE>'</CODE>), or a number--the ordinal value of the corresponding character
 | 
						|
(usually its ASCII value).  Within quotes, the single character may
 | 
						|
be represented by a letter or by <EM>escape sequences</EM>, which are of
 | 
						|
the form <SAMP>`\<VAR>nnn</VAR>'</SAMP>, where <VAR>nnn</VAR> is the octal representation
 | 
						|
of the character's ordinal value; or of the form <SAMP>`\<VAR>x</VAR>'</SAMP>, where
 | 
						|
<SAMP>`<VAR>x</VAR>'</SAMP> is a predefined special character--for example,
 | 
						|
<SAMP>`\n'</SAMP> for newline.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
String constants are a sequence of character constants surrounded by
 | 
						|
double quotes (<CODE>"</CODE>).  Any valid character constant (as described
 | 
						|
above) may appear.  Double quotes within the string must be preceded by
 | 
						|
a backslash, so for instance <SAMP>`"a\"b'c"'</SAMP> is a string of five
 | 
						|
characters.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Pointer constants are an integral value.  You can also write pointers
 | 
						|
to constants using the C operator <SAMP>`&'</SAMP>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Array constants are comma-separated lists surrounded by braces <SAMP>`{'</SAMP>
 | 
						|
and <SAMP>`}'</SAMP>; for example, <SAMP>`{1,2,3}'</SAMP> is a three-element array of
 | 
						|
integers, <SAMP>`{{1,2}, {3,4}, {5,6}}'</SAMP> is a three-by-two array,
 | 
						|
and <SAMP>`{&"hi", &"there", &"fred"}'</SAMP> is a three-element array of pointers.
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="C Plus Plus Expressions"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC115"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC114"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC116"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC116"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.1.3 C<TT>++</TT> Expressions </H4>
 | 
						|
<!--docid::SEC115::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX590"></A>
 | 
						|
GDB expression handling can interpret most C<TT>++</TT> expressions.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX591"></A>
 | 
						|
<A NAME="IDX592"></A>
 | 
						|
<A NAME="IDX593"></A>
 | 
						|
<A NAME="IDX594"></A>
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM> GDB can only debug C<TT>++</TT> code if you use the
 | 
						|
proper compiler and the proper debug format.  Currently, GDB
 | 
						|
works best when debugging C<TT>++</TT> code that is compiled with
 | 
						|
GCC 2.95.3 or with GCC 3.1 or newer, using the options
 | 
						|
<SAMP>`-gdwarf-2'</SAMP> or <SAMP>`-gstabs+'</SAMP>.  DWARF 2 is preferred over
 | 
						|
stabs+.  Most configurations of GCC emit either DWARF 2 or
 | 
						|
stabs+ as their default debug format, so you usually don't need to
 | 
						|
specify a debug format explicitly.  Other compilers and/or debug formats
 | 
						|
are likely to work badly or not at all when using GDB to debug
 | 
						|
C<TT>++</TT> code.
 | 
						|
</BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<OL>
 | 
						|
 | 
						|
<A NAME="IDX595"></A>
 | 
						|
<LI>
 | 
						|
Member function calls are allowed; you can use expressions like
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>count = aml->GetOriginal(x, y)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="IDX596"></A>
 | 
						|
<A NAME="IDX597"></A>
 | 
						|
<LI>
 | 
						|
While a member function is active (in the selected stack frame), your
 | 
						|
expressions have the same namespace available as the member function;
 | 
						|
that is, GDB allows implicit references to the class instance
 | 
						|
pointer <CODE>this</CODE> following the same rules as C<TT>++</TT>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX598"></A>
 | 
						|
<A NAME="IDX599"></A>
 | 
						|
<A NAME="IDX600"></A>
 | 
						|
<LI>
 | 
						|
You can call overloaded functions; GDB resolves the function
 | 
						|
call to the right definition, with some restrictions.  GDB does not
 | 
						|
perform overload resolution involving user-defined type conversions,
 | 
						|
calls to constructors, or instantiations of templates that do not exist
 | 
						|
in the program.  It also cannot handle ellipsis argument lists or
 | 
						|
default arguments.
 | 
						|
<P>
 | 
						|
 | 
						|
It does perform integral conversions and promotions, floating-point
 | 
						|
promotions, arithmetic conversions, pointer conversions, conversions of
 | 
						|
class objects to base classes, and standard conversions such as those of
 | 
						|
functions or arrays to pointers; it requires an exact match on the
 | 
						|
number of function arguments.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Overload resolution is always performed, unless you have specified
 | 
						|
<CODE>set overload-resolution off</CODE>.  See section <A HREF="gdb_13.html#SEC119">GDB Features for C<TT>++</TT></A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You must specify <CODE>set overload-resolution off</CODE> in order to use an
 | 
						|
explicit function signature to call an overloaded function, as in
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>p 'foo(char,int)'('x', 13)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The GDB command-completion facility can simplify this;
 | 
						|
see <A HREF="gdb_4.html#SEC16">Command Completion</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX601"></A>
 | 
						|
<LI>
 | 
						|
GDB understands variables declared as C<TT>++</TT> references; you can use
 | 
						|
them in expressions just as you do in C<TT>++</TT> source--they are automatically
 | 
						|
dereferenced.
 | 
						|
<P>
 | 
						|
 | 
						|
In the parameter list shown when GDB displays a frame, the values of
 | 
						|
reference variables are not displayed (unlike other variables); this
 | 
						|
avoids clutter, since references are often used for large structures.
 | 
						|
The <EM>address</EM> of a reference variable is always shown, unless
 | 
						|
you have specified <SAMP>`set print address off'</SAMP>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
GDB supports the C<TT>++</TT> name resolution operator <CODE>::</CODE>---your
 | 
						|
expressions can use it just as expressions in your program do.  Since
 | 
						|
one scope may be defined in another, you can use <CODE>::</CODE> repeatedly if
 | 
						|
necessary, for example in an expression like
 | 
						|
<SAMP>`<VAR>scope1</VAR>::<VAR>scope2</VAR>::<VAR>name</VAR>'</SAMP>.  GDB also allows
 | 
						|
resolving name scope by reference to source files, in both C and C<TT>++</TT>
 | 
						|
debugging (see section <A HREF="gdb_9.html#SEC61">Program Variables</A>).
 | 
						|
</OL>
 | 
						|
<P>
 | 
						|
 | 
						|
In addition, when used with HP's C<TT>++</TT> compiler, GDB supports
 | 
						|
calling virtual functions correctly, printing out virtual bases of
 | 
						|
objects, calling functions in a base subobject, casting objects, and
 | 
						|
invoking user-defined operators.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="C Defaults"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC116"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC115"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC117"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC117"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.1.4 C and C<TT>++</TT> Defaults </H4>
 | 
						|
<!--docid::SEC116::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX602"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you allow GDB to set type and range checking automatically, they
 | 
						|
both default to <CODE>off</CODE> whenever the working language changes to
 | 
						|
C or C<TT>++</TT>.  This happens regardless of whether you or GDB
 | 
						|
selects the working language.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you allow GDB to set the language automatically, it
 | 
						|
recognizes source files whose names end with <TT>`.c'</TT>, <TT>`.C'</TT>, or
 | 
						|
<TT>`.cc'</TT>, etc, and when GDB enters code compiled from one of
 | 
						|
these files, it sets the working language to C or C<TT>++</TT>.
 | 
						|
See section <A HREF="gdb_13.html#SEC106">Having GDB Infer the Source Language</A>,
 | 
						|
for further details.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="C Checks"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC117"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC116"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC118"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC118"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.1.5 C and C<TT>++</TT> Type and Range Checks </H4>
 | 
						|
<!--docid::SEC117::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX603"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
By default, when GDB parses C or C<TT>++</TT> expressions, type checking
 | 
						|
is not used.  However, if you turn type checking on, GDB
 | 
						|
considers two variables type equivalent if:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
The two variables are structured and have the same structure, union, or
 | 
						|
enumerated tag.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The two variables have the same type name, or types that have been
 | 
						|
declared equivalent through <CODE>typedef</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
Range checking, if turned on, is done on mathematical operations.  Array
 | 
						|
indices are not checked, since they are often used to index a pointer
 | 
						|
that is not itself an array.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Debugging C"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC118"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC117"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC119"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC119"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.1.6 GDB and C </H4>
 | 
						|
<!--docid::SEC118::-->
 | 
						|
<P>
 | 
						|
 | 
						|
The <CODE>set print union</CODE> and <CODE>show print union</CODE> commands apply to
 | 
						|
the <CODE>union</CODE> type.  When set to <SAMP>`on'</SAMP>, any <CODE>union</CODE> that is
 | 
						|
inside a <CODE>struct</CODE> or <CODE>class</CODE> is also printed.  Otherwise, it
 | 
						|
appears as <SAMP>`{...}'</SAMP>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The <CODE>@</CODE> operator aids in the debugging of dynamic arrays, formed
 | 
						|
with pointers and a memory allocation function.  See section <A HREF="gdb_9.html#SEC60">Expressions</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Debugging C Plus Plus"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC119"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC118"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC120"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC120"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.1.7 GDB Features for C<TT>++</TT> </H4>
 | 
						|
<!--docid::SEC119::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX604"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
Some GDB commands are particularly useful with C<TT>++</TT>, and some are
 | 
						|
designed specifically for use with C<TT>++</TT>.  Here is a summary:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX605"></A>
 | 
						|
<DT><CODE>breakpoint menus</CODE>
 | 
						|
<DD>When you want a breakpoint in a function whose name is overloaded,
 | 
						|
GDB breakpoint menus help you specify which function definition
 | 
						|
you want.  See section <A HREF="gdb_6.html#SEC40">Breakpoint Menus</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX606"></A>
 | 
						|
<DT><CODE>rbreak <VAR>regex</VAR></CODE>
 | 
						|
<DD>Setting breakpoints using regular expressions is helpful for setting
 | 
						|
breakpoints on overloaded functions that are not members of any special
 | 
						|
classes.
 | 
						|
See section <A HREF="gdb_6.html#SEC33">Setting Breakpoints</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX607"></A>
 | 
						|
<DT><CODE>catch throw</CODE>
 | 
						|
<DD><DT><CODE>catch catch</CODE>
 | 
						|
<DD>Debug C<TT>++</TT> exception handling using these commands.  See section <A HREF="gdb_6.html#SEC35">Setting Catchpoints</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX608"></A>
 | 
						|
<DT><CODE>ptype <VAR>typename</VAR></CODE>
 | 
						|
<DD>Print inheritance relationships as well as other information for type
 | 
						|
<VAR>typename</VAR>.
 | 
						|
See section <A HREF="gdb_14.html#SEC146">Examining the Symbol Table</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX609"></A>
 | 
						|
<DT><CODE>set print demangle</CODE>
 | 
						|
<DD><DT><CODE>show print demangle</CODE>
 | 
						|
<DD><DT><CODE>set print asm-demangle</CODE>
 | 
						|
<DD><DT><CODE>show print asm-demangle</CODE>
 | 
						|
<DD>Control whether C<TT>++</TT> symbols display in their source form, both when
 | 
						|
displaying code as C<TT>++</TT> source and when displaying disassemblies.
 | 
						|
See section <A HREF="gdb_9.html#SEC66">Print Settings</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print object</CODE>
 | 
						|
<DD><DT><CODE>show print object</CODE>
 | 
						|
<DD>Choose whether to print derived (actual) or declared types of objects.
 | 
						|
See section <A HREF="gdb_9.html#SEC66">Print Settings</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print vtbl</CODE>
 | 
						|
<DD><DT><CODE>show print vtbl</CODE>
 | 
						|
<DD>Control the format for printing virtual function tables.
 | 
						|
See section <A HREF="gdb_9.html#SEC66">Print Settings</A>.
 | 
						|
(The <CODE>vtbl</CODE> commands do not work on programs compiled with the HP
 | 
						|
ANSI C<TT>++</TT> compiler (<CODE>aCC</CODE>).)
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX610"></A>
 | 
						|
<A NAME="IDX611"></A>
 | 
						|
<DT><CODE>set overload-resolution on</CODE>
 | 
						|
<DD>Enable overload resolution for C<TT>++</TT> expression evaluation.  The default
 | 
						|
is on.  For overloaded functions, GDB evaluates the arguments
 | 
						|
and searches for a function whose signature matches the argument types,
 | 
						|
using the standard C<TT>++</TT> conversion rules (see <A HREF="gdb_13.html#SEC115">C<TT>++</TT> Expressions</A>, for details).
 | 
						|
If it cannot find a match, it emits a message.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set overload-resolution off</CODE>
 | 
						|
<DD>Disable overload resolution for C<TT>++</TT> expression evaluation.  For
 | 
						|
overloaded functions that are not class member functions, GDB
 | 
						|
chooses the first function of the specified name that it finds in the
 | 
						|
symbol table, whether or not its arguments are of the correct type.  For
 | 
						|
overloaded functions that are class member functions, GDB
 | 
						|
searches for a function whose signature <EM>exactly</EM> matches the
 | 
						|
argument types.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX612"></A>
 | 
						|
<DT><CODE>show overload-resolution</CODE>
 | 
						|
<DD>Show the current setting of overload resolution.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>Overloaded symbol names</CODE>
 | 
						|
<DD>You can specify a particular definition of an overloaded symbol, using
 | 
						|
the same notation that is used to declare such symbols in C<TT>++</TT>: type
 | 
						|
<CODE><VAR>symbol</VAR>(<VAR>types</VAR>)</CODE> rather than just <VAR>symbol</VAR>.  You can
 | 
						|
also use the GDB command-line word completion facilities to list the
 | 
						|
available choices, or to finish the type list for you.
 | 
						|
See section <A HREF="gdb_4.html#SEC16">Command Completion</A>, for details on how to do this.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Decimal Floating Point"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC120"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC119"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC112"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.1.8 Decimal Floating Point format </H4>
 | 
						|
<!--docid::SEC120::-->
 | 
						|
<P>
 | 
						|
 | 
						|
GDB can examine, set and perform computations with numbers in
 | 
						|
decimal floating point format, which in the C language correspond to the
 | 
						|
<CODE>_Decimal32</CODE>, <CODE>_Decimal64</CODE> and <CODE>_Decimal128</CODE> types as
 | 
						|
specified by the extension to support decimal floating-point arithmetic.
 | 
						|
</P><P>
 | 
						|
 | 
						|
There are two encodings in use, depending on the architecture: BID (Binary
 | 
						|
Integer Decimal) for x86 and x86-64, and DPD (Densely Packed Decimal) for
 | 
						|
PowerPC. GDB will use the appropriate encoding for the configured
 | 
						|
target.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Because of a limitation in <TT>`libdecnumber'</TT>, the library used by GDB
 | 
						|
to manipulate decimal floating point numbers, it is not possible to convert
 | 
						|
(using a cast, for example) integers wider than 32-bit to decimal float.
 | 
						|
</P><P>
 | 
						|
 | 
						|
In addition, in order to imitate GDB's behaviour with binary floating
 | 
						|
point computations, error checking in decimal float operations ignores
 | 
						|
underflow, overflow and divide by zero exceptions.
 | 
						|
</P><P>
 | 
						|
 | 
						|
In the PowerPC architecture, GDB provides a set of pseudo-registers
 | 
						|
to inspect <CODE>_Decimal128</CODE> values stored in floating point registers. See
 | 
						|
<A HREF="gdb_19.html#SEC219">PowerPC</A> for more details.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Objective-C"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC121"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC120"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC122"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.4.2 Objective-C </H3>
 | 
						|
<!--docid::SEC121::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX613"></A>
 | 
						|
This section provides information about some commands and command
 | 
						|
options that are useful for debugging Objective-C code.  See also
 | 
						|
<A HREF="gdb_14.html#SEC146">info classes</A>, and <A HREF="gdb_14.html#SEC146">info selectors</A>, for a
 | 
						|
few more commands specific to Objective-C support.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC122">12.4.2.1 Method Names in Commands</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC123">12.4.2.2 The Print Command With Objective-C</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Method Names in Commands"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC122"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC123"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.2.1 Method Names in Commands </H4>
 | 
						|
<!--docid::SEC122::-->
 | 
						|
<P>
 | 
						|
 | 
						|
The following commands have been extended to accept Objective-C method
 | 
						|
names as line specifications:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX614"></A>
 | 
						|
<A NAME="IDX615"></A>
 | 
						|
<A NAME="IDX616"></A>
 | 
						|
<A NAME="IDX617"></A>
 | 
						|
<A NAME="IDX618"></A>
 | 
						|
<UL>
 | 
						|
<LI><CODE>clear</CODE>
 | 
						|
<LI><CODE>break</CODE>
 | 
						|
<LI><CODE>info line</CODE>
 | 
						|
<LI><CODE>jump</CODE>
 | 
						|
<LI><CODE>list</CODE>
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
A fully qualified Objective-C method name is specified as
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-[<VAR>Class</VAR> <VAR>methodName</VAR>]
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
where the minus sign is used to indicate an instance method and a
 | 
						|
plus sign (not shown) is used to indicate a class method.  The class
 | 
						|
name <VAR>Class</VAR> and method name <VAR>methodName</VAR> are enclosed in
 | 
						|
brackets, similar to the way messages are specified in Objective-C
 | 
						|
source code.  For example, to set a breakpoint at the <CODE>create</CODE>
 | 
						|
instance method of class <CODE>Fruit</CODE> in the program currently being
 | 
						|
debugged, enter:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>break -[Fruit create]
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
To list ten program lines around the <CODE>initialize</CODE> class method,
 | 
						|
enter:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>list +[NSText initialize]
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
In the current version of GDB, the plus or minus sign is
 | 
						|
required.  In future versions of GDB, the plus or minus
 | 
						|
sign will be optional, but you can use it to narrow the search.  It
 | 
						|
is also possible to specify just a method name:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>break create
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
You must specify the complete method name, including any colons.  If
 | 
						|
your program's source files contain more than one <CODE>create</CODE> method,
 | 
						|
you'll be presented with a numbered list of classes that implement that
 | 
						|
method.  Indicate your choice by number, or type <SAMP>`0'</SAMP> to exit if
 | 
						|
none apply.
 | 
						|
</P><P>
 | 
						|
 | 
						|
As another example, to clear a breakpoint established at the
 | 
						|
<CODE>makeKeyAndOrderFront:</CODE> method of the <CODE>NSWindow</CODE> class, enter:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>clear -[NSWindow makeKeyAndOrderFront:]
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="The Print Command with Objective-C"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC123"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC122"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC121"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.2.2 The Print Command With Objective-C </H4>
 | 
						|
<!--docid::SEC123::-->
 | 
						|
<P>
 | 
						|
 | 
						|
The print command has also been extended to accept methods.  For example:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>print -[<VAR>object</VAR> hash]
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="IDX619"></A>
 | 
						|
<A NAME="IDX620"></A>
 | 
						|
will tell GDB to send the <CODE>hash</CODE> message to <VAR>object</VAR>
 | 
						|
and print the result.  Also, an additional command has been added,
 | 
						|
<CODE>print-object</CODE> or <CODE>po</CODE> for short, which is meant to print
 | 
						|
the description of an object.  However, this command may only work
 | 
						|
with certain Objective-C libraries that have a particular hook
 | 
						|
function, <CODE>_NSPrintForDebugger</CODE>, defined.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Fortran"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC124"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC123"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC125"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC128"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC128"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.4.3 Fortran </H3>
 | 
						|
<!--docid::SEC124::-->
 | 
						|
<P>
 | 
						|
 | 
						|
GDB can be used to debug programs written in Fortran, but it
 | 
						|
currently supports only the features of Fortran 77 language.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX621"></A>
 | 
						|
Some Fortran compilers (GNU Fortran 77 and Fortran 95 compilers
 | 
						|
among them) append an underscore to the names of variables and
 | 
						|
functions.  When you debug programs compiled by those compilers, you
 | 
						|
will need to refer to variables and functions with a trailing
 | 
						|
underscore.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC125">12.4.3.1 Fortran Operators and Expressions</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Fortran operators and expressions</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC126">12.4.3.2 Fortran Defaults</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Default settings for Fortran</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC127">12.4.3.3 Special Fortran Commands</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Special GDB commands for Fortran</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Fortran Operators"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC125"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC126"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC128"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC128"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.3.1 Fortran Operators and Expressions </H4>
 | 
						|
<!--docid::SEC125::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX622"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
Operators must be defined on values of specific types.  For instance,
 | 
						|
<CODE>+</CODE> is defined on numbers, but not on characters or other non-
 | 
						|
arithmetic types.  Operators are often defined on groups of types.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>**</CODE>
 | 
						|
<DD>The exponentiation operator. It raises the first operand to the power
 | 
						|
of the second one.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>:</CODE>
 | 
						|
<DD>The range operator.  Normally used in the form of array(low:high) to
 | 
						|
represent a section of array.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Fortran Defaults"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC126"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC125"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC127"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC127"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC128"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.3.2 Fortran Defaults </H4>
 | 
						|
<!--docid::SEC126::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX623"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
Fortran symbols are usually case-insensitive, so GDB by
 | 
						|
default uses case-insensitive matches for Fortran symbols.  You can
 | 
						|
change that with the <SAMP>`set case-insensitive'</SAMP> command, see
 | 
						|
<A HREF="gdb_14.html#SEC146">13. Examining the Symbol Table</A>, for the details.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Special Fortran Commands"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC127"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC126"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC128"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC128"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC124"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC128"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.3.3 Special Fortran Commands </H4>
 | 
						|
<!--docid::SEC127::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX624"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB has some commands to support Fortran-specific features,
 | 
						|
such as displaying common blocks.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX625"></A>
 | 
						|
<A NAME="IDX626"></A>
 | 
						|
<DT><CODE>info common [<VAR>common-name</VAR>]</CODE>
 | 
						|
<DD>This command prints the values contained in the Fortran <CODE>COMMON</CODE>
 | 
						|
block whose name is <VAR>common-name</VAR>.  With no argument, the names of
 | 
						|
all <CODE>COMMON</CODE> blocks visible at the current program location are
 | 
						|
printed.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Pascal"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC128"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC127"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.4.4 Pascal </H3>
 | 
						|
<!--docid::SEC128::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX627"></A>
 | 
						|
Debugging Pascal programs which use sets, subranges, file variables, or
 | 
						|
nested functions does not currently work.  GDB does not support
 | 
						|
entering expressions, printing values, or similar features using Pascal
 | 
						|
syntax.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The Pascal-specific command <CODE>set print pascal_static-members</CODE>
 | 
						|
controls whether static members of Pascal objects are displayed.
 | 
						|
See section <A HREF="gdb_9.html#SEC66">pascal_static-members</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Modula-2"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC129"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC128"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC130"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.4.5 Modula-2 </H3>
 | 
						|
<!--docid::SEC129::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX628"></A>
 | 
						|
</P><P>
 | 
						|
 | 
						|
The extensions made to GDB to support Modula-2 only support
 | 
						|
output from the GNU Modula-2 compiler (which is currently being
 | 
						|
developed).  Other Modula-2 compilers are not currently supported, and
 | 
						|
attempting to debug executables produced by them is most likely
 | 
						|
to give an error as GDB reads in the executable's symbol
 | 
						|
table.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX629"></A>
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC130">12.4.5.1 Operators</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Built-in operators</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC131">12.4.5.2 Built-in Functions and Procedures</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Built-in functions and procedures</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC132">12.4.5.3 Constants</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Modula-2 constants</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC133">12.4.5.4 Modula-2 Types</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Modula-2 types</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC134">12.4.5.5 Modula-2 Defaults</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Default settings for Modula-2</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC135">12.4.5.6 Deviations from Standard Modula-2</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Deviations from standard Modula-2</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC136">12.4.5.7 Modula-2 Type and Range Checks</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Modula-2 type and range checks</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC137">12.4.5.8 The Scope Operators <CODE>::</CODE> and <CODE>.</CODE></A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">The scope operators <CODE>::</CODE> and <CODE>.</CODE></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC138">12.4.5.9 GDB and Modula-2</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="M2 Operators"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC130"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC131"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.5.1 Operators </H4>
 | 
						|
<!--docid::SEC130::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Operators must be defined on values of specific types.  For instance,
 | 
						|
<CODE>+</CODE> is defined on numbers, but not on structures.  Operators are
 | 
						|
often defined on groups of types.  For the purposes of Modula-2, the
 | 
						|
following definitions hold:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Integral types</EM> consist of <CODE>INTEGER</CODE>, <CODE>CARDINAL</CODE>, and
 | 
						|
their subranges.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Character types</EM> consist of <CODE>CHAR</CODE> and its subranges.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Floating-point types</EM> consist of <CODE>REAL</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Pointer types</EM> consist of anything declared as <CODE>POINTER TO
 | 
						|
<VAR>type</VAR></CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Scalar types</EM> consist of all of the above.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Set types</EM> consist of <CODE>SET</CODE> and <CODE>BITSET</CODE> types.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<EM>Boolean types</EM> consist of <CODE>BOOLEAN</CODE>.
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
The following operators are supported, and appear in order of
 | 
						|
increasing precedence:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>,</CODE>
 | 
						|
<DD>Function argument or array index separator.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>:=</CODE>
 | 
						|
<DD>Assignment.  The value of <VAR>var</VAR> <CODE>:=</CODE> <VAR>value</VAR> is
 | 
						|
<VAR>value</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE><, ></CODE>
 | 
						|
<DD>Less than, greater than on integral, floating-point, or enumerated
 | 
						|
types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE><=, >=</CODE>
 | 
						|
<DD>Less than or equal to, greater than or equal to
 | 
						|
on integral, floating-point and enumerated types, or set inclusion on
 | 
						|
set types.  Same precedence as <CODE><</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>=, <>, #</CODE>
 | 
						|
<DD>Equality and two ways of expressing inequality, valid on scalar types.
 | 
						|
Same precedence as <CODE><</CODE>.  In GDB scripts, only <CODE><></CODE> is
 | 
						|
available for inequality, since <CODE>#</CODE> conflicts with the script
 | 
						|
comment character.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>IN</CODE>
 | 
						|
<DD>Set membership.  Defined on set types and the types of their members.
 | 
						|
Same precedence as <CODE><</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>OR</CODE>
 | 
						|
<DD>Boolean disjunction.  Defined on boolean types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>AND, &</CODE>
 | 
						|
<DD>Boolean conjunction.  Defined on boolean types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>@</CODE>
 | 
						|
<DD>The GDB "artificial array" operator (see section <A HREF="gdb_9.html#SEC60">Expressions</A>).
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>+, -</CODE>
 | 
						|
<DD>Addition and subtraction on integral and floating-point types, or union
 | 
						|
and difference on set types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>*</CODE>
 | 
						|
<DD>Multiplication on integral and floating-point types, or set intersection
 | 
						|
on set types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>/</CODE>
 | 
						|
<DD>Division on floating-point types, or symmetric set difference on set
 | 
						|
types.  Same precedence as <CODE>*</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>DIV, MOD</CODE>
 | 
						|
<DD>Integer division and remainder.  Defined on integral types.  Same
 | 
						|
precedence as <CODE>*</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>-</CODE>
 | 
						|
<DD>Negative. Defined on <CODE>INTEGER</CODE> and <CODE>REAL</CODE> data.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>^</CODE>
 | 
						|
<DD>Pointer dereferencing.  Defined on pointer types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>NOT</CODE>
 | 
						|
<DD>Boolean negation.  Defined on boolean types.  Same precedence as
 | 
						|
<CODE>^</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>.</CODE>
 | 
						|
<DD><CODE>RECORD</CODE> field selector.  Defined on <CODE>RECORD</CODE> data.  Same
 | 
						|
precedence as <CODE>^</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>[]</CODE>
 | 
						|
<DD>Array indexing.  Defined on <CODE>ARRAY</CODE> data.  Same precedence as <CODE>^</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>()</CODE>
 | 
						|
<DD>Procedure argument list.  Defined on <CODE>PROCEDURE</CODE> objects.  Same precedence
 | 
						|
as <CODE>^</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>::, .</CODE>
 | 
						|
<DD>GDB and Modula-2 scope operators.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM> Set expressions and their operations are not yet supported, so GDB
 | 
						|
treats the use of the operator <CODE>IN</CODE>, or the use of operators
 | 
						|
<CODE>+</CODE>, <CODE>-</CODE>, <CODE>*</CODE>, <CODE>/</CODE>, <CODE>=</CODE>, , <CODE><></CODE>, <CODE>#</CODE>,
 | 
						|
<CODE><=</CODE>, and <CODE>>=</CODE> on sets as an error.
 | 
						|
</BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Built-In Func/Proc"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC131"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC130"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC132"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC132"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.5.2 Built-in Functions and Procedures </H4>
 | 
						|
<!--docid::SEC131::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Modula-2 also makes available several built-in procedures and functions.
 | 
						|
In describing these, the following metavariables are used:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
 | 
						|
<DT><VAR>a</VAR>
 | 
						|
<DD>represents an <CODE>ARRAY</CODE> variable.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>c</VAR>
 | 
						|
<DD>represents a <CODE>CHAR</CODE> constant or variable.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>i</VAR>
 | 
						|
<DD>represents a variable or constant of integral type.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>m</VAR>
 | 
						|
<DD>represents an identifier that belongs to a set.  Generally used in the
 | 
						|
same function with the metavariable <VAR>s</VAR>.  The type of <VAR>s</VAR> should
 | 
						|
be <CODE>SET OF <VAR>mtype</VAR></CODE> (where <VAR>mtype</VAR> is the type of <VAR>m</VAR>).
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>n</VAR>
 | 
						|
<DD>represents a variable or constant of integral or floating-point type.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>r</VAR>
 | 
						|
<DD>represents a variable or constant of floating-point type.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>t</VAR>
 | 
						|
<DD>represents a type.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>v</VAR>
 | 
						|
<DD>represents a variable.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>x</VAR>
 | 
						|
<DD>represents a variable or constant of one of many types.  See the
 | 
						|
explanation of the function for details.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
All Modula-2 built-in procedures also return a result, described below.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>ABS(<VAR>n</VAR>)</CODE>
 | 
						|
<DD>Returns the absolute value of <VAR>n</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>CAP(<VAR>c</VAR>)</CODE>
 | 
						|
<DD>If <VAR>c</VAR> is a lower case letter, it returns its upper case
 | 
						|
equivalent, otherwise it returns its argument.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>CHR(<VAR>i</VAR>)</CODE>
 | 
						|
<DD>Returns the character whose ordinal value is <VAR>i</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>DEC(<VAR>v</VAR>)</CODE>
 | 
						|
<DD>Decrements the value in the variable <VAR>v</VAR> by one.  Returns the new value.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>DEC(<VAR>v</VAR>,<VAR>i</VAR>)</CODE>
 | 
						|
<DD>Decrements the value in the variable <VAR>v</VAR> by <VAR>i</VAR>.  Returns the
 | 
						|
new value.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>EXCL(<VAR>m</VAR>,<VAR>s</VAR>)</CODE>
 | 
						|
<DD>Removes the element <VAR>m</VAR> from the set <VAR>s</VAR>.  Returns the new
 | 
						|
set.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>FLOAT(<VAR>i</VAR>)</CODE>
 | 
						|
<DD>Returns the floating point equivalent of the integer <VAR>i</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>HIGH(<VAR>a</VAR>)</CODE>
 | 
						|
<DD>Returns the index of the last member of <VAR>a</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>INC(<VAR>v</VAR>)</CODE>
 | 
						|
<DD>Increments the value in the variable <VAR>v</VAR> by one.  Returns the new value.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>INC(<VAR>v</VAR>,<VAR>i</VAR>)</CODE>
 | 
						|
<DD>Increments the value in the variable <VAR>v</VAR> by <VAR>i</VAR>.  Returns the
 | 
						|
new value.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>INCL(<VAR>m</VAR>,<VAR>s</VAR>)</CODE>
 | 
						|
<DD>Adds the element <VAR>m</VAR> to the set <VAR>s</VAR> if it is not already
 | 
						|
there.  Returns the new set.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>MAX(<VAR>t</VAR>)</CODE>
 | 
						|
<DD>Returns the maximum value of the type <VAR>t</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>MIN(<VAR>t</VAR>)</CODE>
 | 
						|
<DD>Returns the minimum value of the type <VAR>t</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>ODD(<VAR>i</VAR>)</CODE>
 | 
						|
<DD>Returns boolean TRUE if <VAR>i</VAR> is an odd number.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>ORD(<VAR>x</VAR>)</CODE>
 | 
						|
<DD>Returns the ordinal value of its argument.  For example, the ordinal
 | 
						|
value of a character is its ASCII value (on machines supporting the
 | 
						|
ASCII character set).  <VAR>x</VAR> must be of an ordered type, which include
 | 
						|
integral, character and enumerated types.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>SIZE(<VAR>x</VAR>)</CODE>
 | 
						|
<DD>Returns the size of its argument.  <VAR>x</VAR> can be a variable or a type.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>TRUNC(<VAR>r</VAR>)</CODE>
 | 
						|
<DD>Returns the integral part of <VAR>r</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>TSIZE(<VAR>x</VAR>)</CODE>
 | 
						|
<DD>Returns the size of its argument.  <VAR>x</VAR> can be a variable or a type.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>VAL(<VAR>t</VAR>,<VAR>i</VAR>)</CODE>
 | 
						|
<DD>Returns the member of the type <VAR>t</VAR> whose ordinal value is <VAR>i</VAR>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM>  Sets and their operations are not yet supported, so
 | 
						|
GDB treats the use of procedures <CODE>INCL</CODE> and <CODE>EXCL</CODE> as
 | 
						|
an error.
 | 
						|
</BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX630"></A>
 | 
						|
<A NAME="M2 Constants"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC132"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC131"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC133"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC133"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.5.3 Constants </H4>
 | 
						|
<!--docid::SEC132::-->
 | 
						|
<P>
 | 
						|
 | 
						|
GDB allows you to express the constants of Modula-2 in the following
 | 
						|
ways:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
 | 
						|
<LI>
 | 
						|
Integer constants are simply a sequence of digits.  When used in an
 | 
						|
expression, a constant is interpreted to be type-compatible with the
 | 
						|
rest of the expression.  Hexadecimal integers are specified by a
 | 
						|
trailing <SAMP>`H'</SAMP>, and octal integers by a trailing <SAMP>`B'</SAMP>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Floating point constants appear as a sequence of digits, followed by a
 | 
						|
decimal point and another sequence of digits.  An optional exponent can
 | 
						|
then be specified, in the form <SAMP>`E[+|-]<VAR>nnn</VAR>'</SAMP>, where
 | 
						|
<SAMP>`[+|-]<VAR>nnn</VAR>'</SAMP> is the desired exponent.  All of the
 | 
						|
digits of the floating point constant must be valid decimal (base 10)
 | 
						|
digits.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Character constants consist of a single character enclosed by a pair of
 | 
						|
like quotes, either single (<CODE>'</CODE>) or double (<CODE>"</CODE>).  They may
 | 
						|
also be expressed by their ordinal value (their ASCII value, usually)
 | 
						|
followed by a <SAMP>`C'</SAMP>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
String constants consist of a sequence of characters enclosed by a
 | 
						|
pair of like quotes, either single (<CODE>'</CODE>) or double (<CODE>"</CODE>).
 | 
						|
Escape sequences in the style of C are also allowed.  See section <A HREF="gdb_13.html#SEC114">C and C<TT>++</TT> Constants</A>, for a brief explanation of escape
 | 
						|
sequences.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Enumerated constants consist of an enumerated identifier.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Boolean constants consist of the identifiers <CODE>TRUE</CODE> and
 | 
						|
<CODE>FALSE</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Pointer constants consist of integral values only.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Set constants are not yet supported.
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="M2 Types"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC133"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC132"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC134"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC134"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.5.4 Modula-2 Types </H4>
 | 
						|
<!--docid::SEC133::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Currently GDB can print the following data types in Modula-2
 | 
						|
syntax: array types, record types, set types, pointer types, procedure
 | 
						|
types, enumerated types, subrange types and base types.  You can also
 | 
						|
print the contents of variables declared using these type.
 | 
						|
This section gives a number of simple source code examples together with
 | 
						|
sample GDB sessions.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The first example contains the following section of code:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>VAR
 | 
						|
   s: SET OF CHAR ;
 | 
						|
   r: [20..40] ;
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
and you can request GDB to interrogate the type and value of
 | 
						|
<CODE>r</CODE> and <CODE>s</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) print s
 | 
						|
{'A'..'C', 'Z'}
 | 
						|
(gdb) ptype s
 | 
						|
SET OF CHAR
 | 
						|
(gdb) print r
 | 
						|
21
 | 
						|
(gdb) ptype r
 | 
						|
[20..40]
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Likewise if your source code declares <CODE>s</CODE> as:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>VAR
 | 
						|
   s: SET ['A'..'Z'] ;
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
then you may query the type of <CODE>s</CODE> by:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) ptype s
 | 
						|
type = SET ['A'..'Z']
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Note that at present you cannot interactively manipulate set
 | 
						|
expressions using the debugger.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The following example shows how you might declare an array in Modula-2
 | 
						|
and how you can interact with GDB to print its type and contents:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>VAR
 | 
						|
   s: ARRAY [-10..10] OF CHAR ;
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) ptype s
 | 
						|
ARRAY [-10..10] OF CHAR
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Note that the array handling is not yet complete and although the type
 | 
						|
is printed correctly, expression handling still assumes that all
 | 
						|
arrays have a lower bound of zero and not <CODE>-10</CODE> as in the example
 | 
						|
above.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Here are some more type related Modula-2 examples:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>TYPE
 | 
						|
   colour = (blue, red, yellow, green) ;
 | 
						|
   t = [blue..yellow] ;
 | 
						|
VAR
 | 
						|
   s: t ;
 | 
						|
BEGIN
 | 
						|
   s := blue ;
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The GDB interaction shows how you can query the data type
 | 
						|
and value of a variable.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) print s
 | 
						|
$1 = blue
 | 
						|
(gdb) ptype t
 | 
						|
type = [blue..yellow]
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
In this example a Modula-2 array is declared and its contents
 | 
						|
displayed.  Observe that the contents are written in the same way as
 | 
						|
their <CODE>C</CODE> counterparts.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>VAR
 | 
						|
   s: ARRAY [1..5] OF CARDINAL ;
 | 
						|
BEGIN
 | 
						|
   s[1] := 1 ;
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) print s
 | 
						|
$1 = {1, 0, 0, 0, 0}
 | 
						|
(gdb) ptype s
 | 
						|
type = ARRAY [1..5] OF CARDINAL
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The Modula-2 language interface to GDB also understands
 | 
						|
pointer types as shown in this example:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>VAR
 | 
						|
   s: POINTER TO ARRAY [1..5] OF CARDINAL ;
 | 
						|
BEGIN
 | 
						|
   NEW(s) ;
 | 
						|
   s^[1] := 1 ;
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
and you can request that GDB describes the type of <CODE>s</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) ptype s
 | 
						|
type = POINTER TO ARRAY [1..5] OF CARDINAL
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
GDB handles compound types as we can see in this example.
 | 
						|
Here we combine array types, record types, pointer types and subrange
 | 
						|
types:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>TYPE
 | 
						|
   foo = RECORD
 | 
						|
            f1: CARDINAL ;
 | 
						|
            f2: CHAR ;
 | 
						|
            f3: myarray ;
 | 
						|
         END ;
 | 
						|
 | 
						|
   myarray = ARRAY myrange OF CARDINAL ;
 | 
						|
   myrange = [-2..2] ;
 | 
						|
VAR
 | 
						|
   s: POINTER TO ARRAY myrange OF foo ;
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
and you can ask GDB to describe the type of <CODE>s</CODE> as shown
 | 
						|
below.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) ptype s
 | 
						|
type = POINTER TO ARRAY [-2..2] OF foo = RECORD
 | 
						|
    f1 : CARDINAL;
 | 
						|
    f2 : CHAR;
 | 
						|
    f3 : ARRAY [-2..2] OF CARDINAL;
 | 
						|
END 
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="M2 Defaults"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC134"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC133"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC135"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC135"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.5.5 Modula-2 Defaults </H4>
 | 
						|
<!--docid::SEC134::-->
 | 
						|
<P>
 | 
						|
 | 
						|
If type and range checking are set automatically by GDB, they
 | 
						|
both default to <CODE>on</CODE> whenever the working language changes to
 | 
						|
Modula-2.  This happens regardless of whether you or GDB
 | 
						|
selected the working language.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you allow GDB to set the language automatically, then entering
 | 
						|
code compiled from a file whose name ends with <TT>`.mod'</TT> sets the
 | 
						|
working language to Modula-2.  See section <A HREF="gdb_13.html#SEC106">Having GDB Infer the Source Language</A>, for further details.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Deviations"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC135"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC134"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC136"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC136"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.5.6 Deviations from Standard Modula-2 </H4>
 | 
						|
<!--docid::SEC135::-->
 | 
						|
<P>
 | 
						|
 | 
						|
A few changes have been made to make Modula-2 programs easier to debug.
 | 
						|
This is done primarily via loosening its type strictness:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
Unlike in standard Modula-2, pointer constants can be formed by
 | 
						|
integers.  This allows you to modify pointer variables during
 | 
						|
debugging.  (In standard Modula-2, the actual address contained in a
 | 
						|
pointer variable is hidden from you; it can only be modified
 | 
						|
through direct assignment to another pointer variable or expression that
 | 
						|
returned a pointer.)
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
C escape sequences can be used in strings and characters to represent
 | 
						|
non-printable characters.  GDB prints out strings with these
 | 
						|
escape sequences embedded.  Single non-printable characters are
 | 
						|
printed using the <SAMP>`CHR(<VAR>nnn</VAR>)'</SAMP> format.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The assignment operator (<CODE>:=</CODE>) returns the value of its right-hand
 | 
						|
argument.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
All built-in procedures both modify <EM>and</EM> return their argument.
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="M2 Checks"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC136"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC135"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC137"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC137"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.5.7 Modula-2 Type and Range Checks </H4>
 | 
						|
<!--docid::SEC136::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM> in this release, GDB does not yet perform type or
 | 
						|
range checking.
 | 
						|
</BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
GDB considers two Modula-2 variables type equivalent if:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
They are of types that have been declared equivalent via a <CODE>TYPE
 | 
						|
<VAR>t1</VAR> = <VAR>t2</VAR></CODE> statement
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
They have been declared on the same line.  (Note:  This is true of the
 | 
						|
GNU Modula-2 compiler, but it may not be true of other compilers.)
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
As long as type checking is enabled, any attempt to combine variables
 | 
						|
whose types are not equivalent is an error.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Range checking is done on all mathematical operations, assignment, array
 | 
						|
index bounds, and all built-in functions and procedures.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="M2 Scope"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC137"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC136"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC138"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC138"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.5.8 The Scope Operators <CODE>::</CODE> and <CODE>.</CODE> </H4>
 | 
						|
<!--docid::SEC137::-->
 | 
						|
<P>
 | 
						|
 | 
						|
There are a few subtle differences between the Modula-2 scope operator
 | 
						|
(<CODE>.</CODE>) and the GDB scope operator (<CODE>::</CODE>).  The two have
 | 
						|
similar syntax:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>
 | 
						|
<VAR>module</VAR> . <VAR>id</VAR>
 | 
						|
<VAR>scope</VAR> :: <VAR>id</VAR>
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
where <VAR>scope</VAR> is the name of a module or a procedure,
 | 
						|
<VAR>module</VAR> the name of a module, and <VAR>id</VAR> is any declared
 | 
						|
identifier within your program, except another module.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Using the <CODE>::</CODE> operator makes GDB search the scope
 | 
						|
specified by <VAR>scope</VAR> for the identifier <VAR>id</VAR>.  If it is not
 | 
						|
found in the specified scope, then GDB searches all scopes
 | 
						|
enclosing the one specified by <VAR>scope</VAR>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Using the <CODE>.</CODE> operator makes GDB search the current scope for
 | 
						|
the identifier specified by <VAR>id</VAR> that was imported from the
 | 
						|
definition module specified by <VAR>module</VAR>.  With this operator, it is
 | 
						|
an error if the identifier <VAR>id</VAR> was not imported from definition
 | 
						|
module <VAR>module</VAR>, or if <VAR>id</VAR> is not an identifier in
 | 
						|
<VAR>module</VAR>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="GDB/M2"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC138"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC137"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC129"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.5.9 GDB and Modula-2 </H4>
 | 
						|
<!--docid::SEC138::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Some GDB commands have little use when debugging Modula-2 programs.
 | 
						|
Five subcommands of <CODE>set print</CODE> and <CODE>show print</CODE> apply
 | 
						|
specifically to C and C<TT>++</TT>: <SAMP>`vtbl'</SAMP>, <SAMP>`demangle'</SAMP>,
 | 
						|
<SAMP>`asm-demangle'</SAMP>, <SAMP>`object'</SAMP>, and <SAMP>`union'</SAMP>.  The first four
 | 
						|
apply to C<TT>++</TT>, and the last to the C <CODE>union</CODE> type, which has no direct
 | 
						|
analogue in Modula-2.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The <CODE>@</CODE> operator (see section <A HREF="gdb_9.html#SEC60">Expressions</A>), while available
 | 
						|
with any language, is not useful with Modula-2.  Its
 | 
						|
intent is to aid the debugging of <EM>dynamic arrays</EM>, which cannot be
 | 
						|
created in Modula-2 as they can in C or C<TT>++</TT>.  However, because an
 | 
						|
address can be specified by an integral constant, the construct
 | 
						|
<SAMP>`{<VAR>type</VAR>}<VAR>adrexp</VAR>'</SAMP> is still useful.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX631"></A>
 | 
						|
In GDB scripts, the Modula-2 inequality operator <CODE>#</CODE> is
 | 
						|
interpreted as the beginning of a comment.  Use <CODE><></CODE> instead.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Ada"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC139"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC138"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC140"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC111"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 12.4.6 Ada </H3>
 | 
						|
<!--docid::SEC139::-->
 | 
						|
<P>
 | 
						|
 | 
						|
The extensions made to GDB for Ada only support
 | 
						|
output from the GNU Ada (GNAT) compiler.
 | 
						|
Other Ada compilers are not currently supported, and
 | 
						|
attempting to debug executables produced by them is most likely
 | 
						|
to be difficult.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX632"></A>
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC140">12.4.6.1 Introduction</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">General remarks on the Ada syntax 
 | 
						|
                                   and semantics supported by Ada mode 
 | 
						|
                                   in GDB.</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC141">12.4.6.2 Omissions from Ada</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Restrictions on the Ada expression syntax.</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC142">12.4.6.3 Additions to Ada</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Extensions of the Ada expression syntax.</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC143">12.4.6.4 Stopping at the Very Beginning</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Debugging the program during elaboration.</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_13.html#SEC144">12.4.6.5 Known Peculiarities of Ada Mode</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Known peculiarities of Ada mode.</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Ada Mode Intro"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC140"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC141"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.6.1 Introduction </H4>
 | 
						|
<!--docid::SEC140::-->
 | 
						|
<P>
 | 
						|
 | 
						|
The Ada mode of GDB supports a fairly large subset of Ada expression 
 | 
						|
syntax, with some extensions.
 | 
						|
The philosophy behind the design of this subset is 
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
That GDB should provide basic literals and access to operations for 
 | 
						|
arithmetic, dereferencing, field selection, indexing, and subprogram calls, 
 | 
						|
leaving more sophisticated computations to subprograms written into the
 | 
						|
program (which therefore may be called from GDB).
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
That type safety and strict adherence to Ada language restrictions
 | 
						|
are not particularly important to the GDB user.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
That brevity is important to the GDB user.
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
Thus, for brevity, the debugger acts as if there were 
 | 
						|
implicit <CODE>with</CODE> and <CODE>use</CODE> clauses in effect for all user-written 
 | 
						|
packages, making it unnecessary to fully qualify most names with 
 | 
						|
their packages, regardless of context.  Where this causes ambiguity, 
 | 
						|
GDB asks the user's intent.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The debugger will start in Ada mode if it detects an Ada main program. 
 | 
						|
As for other languages, it will enter Ada mode when stopped in a program that
 | 
						|
was translated from an Ada source file.
 | 
						|
</P><P>
 | 
						|
 | 
						|
While in Ada mode, you may use `<TT>--</TT>' for comments.  This is useful 
 | 
						|
mostly for documenting command files.  The standard GDB comment 
 | 
						|
(<SAMP>`#'</SAMP>) still works at the beginning of a line in Ada mode, but not in the 
 | 
						|
middle (to allow based literals).
 | 
						|
</P><P>
 | 
						|
 | 
						|
The debugger supports limited overloading.  Given a subprogram call in which
 | 
						|
the function symbol has multiple definitions, it will use the number of 
 | 
						|
actual parameters and some information about their types to attempt to narrow
 | 
						|
the set of definitions.  It also makes very limited use of context, preferring
 | 
						|
procedures to functions in the context of the <CODE>call</CODE> command, and
 | 
						|
functions to procedures elsewhere. 
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Omissions from Ada"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC141"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC140"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC142"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC142"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.6.2 Omissions from Ada </H4>
 | 
						|
<!--docid::SEC141::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Here are the notable omissions from the subset:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
Only a subset of the attributes are supported:
 | 
						|
<P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
<TT>'First</TT>, <TT>'Last</TT>, and <TT>'Length</TT>
 | 
						|
 on array objects (not on types and subtypes).
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<TT>'Min</TT> and <TT>'Max</TT>.  
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<TT>'Pos</TT> and <TT>'Val</TT>. 
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<TT>'Tag</TT>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<TT>'Range</TT> on array objects (not subtypes), but only as the right
 | 
						|
operand of the membership (<CODE>in</CODE>) operator.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<TT>'Access</TT>, <TT>'Unchecked_Access</TT>, and 
 | 
						|
<TT>'Unrestricted_Access</TT> (a GNAT extension).
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<TT>'Address</TT>.
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The names in
 | 
						|
<CODE>Characters.Latin_1</CODE> are not available and
 | 
						|
concatenation is not implemented.  Thus, escape characters in strings are 
 | 
						|
not currently available.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Equality tests (<SAMP>`='</SAMP> and <SAMP>`/='</SAMP>) on arrays test for bitwise
 | 
						|
equality of representations.  They will generally work correctly
 | 
						|
for strings and arrays whose elements have integer or enumeration types.
 | 
						|
They may not work correctly for arrays whose element
 | 
						|
types have user-defined equality, for arrays of real values 
 | 
						|
(in particular, IEEE-conformant floating point, because of negative
 | 
						|
zeroes and NaNs), and for arrays whose elements contain unused bits with
 | 
						|
indeterminate values.  
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The other component-by-component array operations (<CODE>and</CODE>, <CODE>or</CODE>, 
 | 
						|
<CODE>xor</CODE>, <CODE>not</CODE>, and relational tests other than equality)
 | 
						|
are not implemented. 
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<A NAME="IDX633"></A>
 | 
						|
<A NAME="IDX634"></A>
 | 
						|
<A NAME="IDX635"></A>
 | 
						|
There is limited support for array and record aggregates.  They are
 | 
						|
permitted only on the right sides of assignments, as in these examples:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>set An_Array := (1, 2, 3, 4, 5, 6)
 | 
						|
set An_Array := (1, others => 0)
 | 
						|
set An_Array := (0|4 => 1, 1..3 => 2, 5 => 6)
 | 
						|
set A_2D_Array := ((1, 2, 3), (4, 5, 6), (7, 8, 9))
 | 
						|
set A_Record := (1, "Peter", True);
 | 
						|
set A_Record := (Name => "Peter", Id => 1, Alive => True)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Changing a
 | 
						|
discriminant's value by assigning an aggregate has an
 | 
						|
undefined effect if that discriminant is used within the record.
 | 
						|
However, you can first modify discriminants by directly assigning to
 | 
						|
them (which normally would not be allowed in Ada), and then performing an
 | 
						|
aggregate assignment.  For example, given a variable <CODE>A_Rec</CODE> 
 | 
						|
declared to have a type such as:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>type Rec (Len : Small_Integer := 0) is record
 | 
						|
    Id : Integer;
 | 
						|
    Vals : IntArray (1 .. Len);
 | 
						|
end record;
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
you can assign a value with a different size of <CODE>Vals</CODE> with two
 | 
						|
assignments:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>set A_Rec.Len := 4
 | 
						|
set A_Rec := (Id => 42, Vals => (1, 2, 3, 4))
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
As this example also illustrates, GDB is very loose about the usual
 | 
						|
rules concerning aggregates.  You may leave out some of the
 | 
						|
components of an array or record aggregate (such as the <CODE>Len</CODE> 
 | 
						|
component in the assignment to <CODE>A_Rec</CODE> above); they will retain their
 | 
						|
original values upon assignment.  You may freely use dynamic values as
 | 
						|
indices in component associations.  You may even use overlapping or
 | 
						|
redundant component associations, although which component values are
 | 
						|
assigned in such cases is not defined.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Calls to dispatching subprograms are not implemented.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The overloading algorithm is much more limited (i.e., less selective)
 | 
						|
than that of real Ada.  It makes only limited use of the context in
 | 
						|
which a subexpression appears to resolve its meaning, and it is much
 | 
						|
looser in its rules for allowing type matches.  As a result, some
 | 
						|
function calls will be ambiguous, and the user will be asked to choose
 | 
						|
the proper resolution.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The <CODE>new</CODE> operator is not implemented.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Entry calls are not implemented.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Aside from printing, arithmetic operations on the native VAX floating-point 
 | 
						|
formats are not supported.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
It is not possible to slice a packed array.
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Additions to Ada"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC142"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC141"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC143"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC143"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.6.3 Additions to Ada </H4>
 | 
						|
<!--docid::SEC142::-->
 | 
						|
<P>
 | 
						|
 | 
						|
As it does for other languages, GDB makes certain generic
 | 
						|
extensions to Ada (see section <A HREF="gdb_9.html#SEC60">8.1 Expressions</A>):
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
If the expression <VAR>E</VAR> is a variable residing in memory (typically
 | 
						|
a local variable or array element) and <VAR>N</VAR> is a positive integer,
 | 
						|
then <CODE><VAR>E</VAR>@<VAR>N</VAR></CODE> displays the values of <VAR>E</VAR> and the
 | 
						|
<VAR>N</VAR>-1 adjacent variables following it in memory as an array.  In
 | 
						|
Ada, this operator is generally not necessary, since its prime use is
 | 
						|
in displaying parts of an array, and slicing will usually do this in
 | 
						|
Ada.  However, there are occasional uses when debugging programs in
 | 
						|
which certain debugging information has been optimized away.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<CODE><VAR>B</VAR>::<VAR>var</VAR></CODE> means "the variable named <VAR>var</VAR> that
 | 
						|
appears in function or file <VAR>B</VAR>."  When <VAR>B</VAR> is a file name,
 | 
						|
you must typically surround it in single quotes.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The expression <CODE>{<VAR>type</VAR>} <VAR>addr</VAR></CODE> means "the variable of type
 | 
						|
<VAR>type</VAR> that appears at address <VAR>addr</VAR>."
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
A name starting with <SAMP>`$'</SAMP> is a convenience variable 
 | 
						|
(see section <A HREF="gdb_9.html#SEC68">8.9 Convenience Variables</A>) or a machine register (see section <A HREF="gdb_9.html#SEC69">8.10 Registers</A>).
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
In addition, GDB provides a few other shortcuts and outright
 | 
						|
additions specific to Ada:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
The assignment statement is allowed as an expression, returning
 | 
						|
its right-hand operand as its value.  Thus, you may enter
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>set x := y + 3
 | 
						|
print A(tmp := y + 1)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The semicolon is allowed as an "operator,"  returning as its value 
 | 
						|
the value of its right-hand operand.
 | 
						|
This allows, for example,
 | 
						|
complex conditional breaks:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>break f
 | 
						|
condition 1 (report(i); k += 1; A(k) > 100)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Rather than use catenation and symbolic character names to introduce special 
 | 
						|
characters into strings, one may instead use a special bracket notation, 
 | 
						|
which is also used to print strings.  A sequence of characters of the form 
 | 
						|
<SAMP>`["<VAR>XX</VAR>"]'</SAMP> within a string or character literal denotes the 
 | 
						|
(single) character whose numeric encoding is <VAR>XX</VAR> in hexadecimal.  The
 | 
						|
sequence of characters <SAMP>`["""]'</SAMP> also denotes a single quotation mark 
 | 
						|
in strings.   For example,
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>   "One line.["0a"]Next line.["0a"]"
 | 
						|
</FONT></pre></td></tr></table>contains an ASCII newline character (<CODE>Ada.Characters.Latin_1.LF</CODE>)
 | 
						|
after each period.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The subtype used as a prefix for the attributes <TT>'Pos</TT>, <TT>'Min</TT>, and
 | 
						|
<TT>'Max</TT> is optional (and is ignored in any case).  For example, it is valid
 | 
						|
to write
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>print 'max(x, y)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
When printing arrays, GDB uses positional notation when the 
 | 
						|
array has a lower bound of 1, and uses a modified named notation otherwise.
 | 
						|
For example, a one-dimensional array of three integers with a lower bound
 | 
						|
of 3 might print as
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(3 => 10, 17, 1)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
That is, in contrast to valid Ada, only the first component has a <CODE>=></CODE> 
 | 
						|
clause.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
You may abbreviate attributes in expressions with any unique,
 | 
						|
multi-character subsequence of 
 | 
						|
their names (an exact match gets preference).
 | 
						|
For example, you may use <TT>a'len</TT>, <TT>a'gth</TT>, or <TT>a'lh</TT>
 | 
						|
in place of  <TT>a'length</TT>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
<A NAME="IDX636"></A>
 | 
						|
Since Ada is case-insensitive, the debugger normally maps identifiers you type 
 | 
						|
to lower case.  The GNAT compiler uses upper-case characters for 
 | 
						|
some of its internal identifiers, which are normally of no interest to users.
 | 
						|
For the rare occasions when you actually have to look at them,
 | 
						|
enclose them in angle brackets to avoid the lower-case mapping. 
 | 
						|
For example,
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>gdb print <JMPBUF_SAVE>[0]
 | 
						|
</FONT></pre></td></tr></table><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Printing an object of class-wide type or dereferencing an 
 | 
						|
access-to-class-wide value will display all the components of the object's
 | 
						|
specific type (as indicated by its run-time tag).  Likewise, component
 | 
						|
selection on such a value will operate on the specific type of the
 | 
						|
object.
 | 
						|
<P>
 | 
						|
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Stopping Before Main Program"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC143"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC142"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC144"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC144"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.6.4 Stopping at the Very Beginning </H4>
 | 
						|
<!--docid::SEC143::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX637"></A>
 | 
						|
It is sometimes necessary to debug the program during elaboration, and
 | 
						|
before reaching the main procedure.
 | 
						|
As defined in the Ada Reference
 | 
						|
Manual, the elaboration code is invoked from a procedure called
 | 
						|
<CODE>adainit</CODE>.  To run your program up to the beginning of
 | 
						|
elaboration, simply use the following two commands:
 | 
						|
<CODE>tbreak adainit</CODE> and <CODE>run</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Ada Glitches"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC144"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC143"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC139"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC145"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 12.4.6.5 Known Peculiarities of Ada Mode </H4>
 | 
						|
<!--docid::SEC144::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Besides the omissions listed previously (see section <A HREF="gdb_13.html#SEC141">12.4.6.2 Omissions from Ada</A>),
 | 
						|
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.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
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 <CODE>.all</CODE> after an expression
 | 
						|
to get it printed properly.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Static constants that the compiler chooses not to materialize as objects in 
 | 
						|
storage are invisible to the debugger.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Named parameter associations in function argument lists are ignored (the
 | 
						|
argument lists are treated as positional).
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Many useful library packages are currently invisible to the debugger.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
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.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The type of the <TT>'Address</TT> attribute may not be <CODE>System.Address</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
The GNAT compiler never generates the prefix <CODE>Standard</CODE> for 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 <CODE>Standard</CODE>, 
 | 
						|
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
 | 
						|
<CODE>Standard</CODE> explicitly.  
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Unsupported Languages"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC145"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC144"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_14.html#SEC146"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_14.html#SEC146"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 12.5 Unsupported Languages </H2>
 | 
						|
<!--docid::SEC145::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX638"></A>
 | 
						|
<A NAME="IDX639"></A>
 | 
						|
In addition to the other fully-supported programming languages,
 | 
						|
GDB also provides a pseudo-language, called <CODE>minimal</CODE>.
 | 
						|
It does not represent a real programming language, but provides a set
 | 
						|
of capabilities close to what the C or assembly languages provide.
 | 
						|
This should allow most simple operations to be performed while debugging
 | 
						|
an application that uses a language currently not supported by GDB.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If the language is set to <CODE>auto</CODE>, GDB will automatically
 | 
						|
select this language if the current frame corresponds to an unsupported
 | 
						|
language.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Symbols"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_13.html#SEC102"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_14.html#SEC146"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<BR>  
 | 
						|
<FONT SIZE="-1">
 | 
						|
 | 
						|
<address>
 | 
						|
 | 
						|
<p>Please send FSF & GNU inquiries & questions to <a
 | 
						|
href="mailto:gnu@gnu.org">gnu@gnu.org</a>.  There are also <a
 | 
						|
href="http://www.gnu.org/home.html#ContactInfo">other ways to
 | 
						|
contact</a> the FSF.</p>
 | 
						|
 | 
						|
<p>These pages are maintained by <a
 | 
						|
href="http://www.gnu.org/software/gdb/">the GDB developers</a>.</p>
 | 
						|
 | 
						|
<p>Copyright Free Software Foundation, Inc., 59 Temple Place - Suite
 | 
						|
330, Boston, MA 02111, USA.</p>
 | 
						|
 | 
						|
<p>Verbatim copying and distribution of this entire article is
 | 
						|
permitted in any medium, provided this notice is preserved.</p>
 | 
						|
 | 
						|
</address>
 | 
						|
 | 
						|
This document was generated
 | 
						|
by <I>GDB Administrator</I> on <I>March, 27  2008</I>
 | 
						|
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 | 
						|
"><I>texi2html</I></A>
 | 
						|
 | 
						|
</BODY>
 | 
						|
</HTML>
 |