283 lines
13 KiB
HTML
283 lines
13 KiB
HTML
<HTML>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<!-- Created on October, 26 2002 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>GDB Internals: Testsuite</TITLE>
|
|
|
|
<META NAME="description" CONTENT="GDB Internals: Testsuite">
|
|
<META NAME="keywords" CONTENT="GDB Internals: Testsuite">
|
|
<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="SEC175"></A>
|
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_15.html#SEC174"> < </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC176"> > </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_2.html#SEC2"> << </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint.html#SEC_Top"> Up </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_17.html#SEC179"> >> </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="gdbint.html#SEC_Top">Top</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_toc.html#SEC_Contents">Contents</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_19.html#SEC186">Index</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_abt.html#SEC_About"> ? </A>]</TD>
|
|
</TR></TABLE>
|
|
<H1> 16. Testsuite </H1>
|
|
<!--docid::SEC175::-->
|
|
<P>
|
|
|
|
The testsuite is an important component of the GDB package.
|
|
While it is always worthwhile to encourage user testing, in practice
|
|
this is rarely sufficient; users typically use only a small subset of
|
|
the available commands, and it has proven all too common for a change
|
|
to cause a significant regression that went unnoticed for some time.
|
|
</P><P>
|
|
|
|
The GDB testsuite uses the DejaGNU testing framework.
|
|
DejaGNU is built using <CODE>Tcl</CODE> and <CODE>expect</CODE>. The tests
|
|
themselves are calls to various <CODE>Tcl</CODE> procs; the framework runs all the
|
|
procs and summarizes the passes and fails.
|
|
</P><P>
|
|
|
|
<HR SIZE="6">
|
|
<A NAME="SEC176"></A>
|
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC175"> < </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC177"> > </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC175"> << </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC175"> Up </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_17.html#SEC179"> >> </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="gdbint.html#SEC_Top">Top</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_toc.html#SEC_Contents">Contents</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_19.html#SEC186">Index</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_abt.html#SEC_About"> ? </A>]</TD>
|
|
</TR></TABLE>
|
|
<H2> 16.1 Using the Testsuite </H2>
|
|
<!--docid::SEC176::-->
|
|
<P>
|
|
|
|
<A NAME="IDX522"></A>
|
|
To run the testsuite, simply go to the GDB object directory (or to the
|
|
testsuite's objdir) and type <CODE>make check</CODE>. This just sets up some
|
|
environment variables and invokes DejaGNU's <CODE>runtest</CODE> script. While
|
|
the testsuite is running, you'll get mentions of which test file is in use,
|
|
and a mention of any unexpected passes or fails. When the testsuite is
|
|
finished, you'll get a summary that looks like this:
|
|
</P><P>
|
|
|
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> === gdb Summary ===
|
|
|
|
# of expected passes 6016
|
|
# of unexpected failures 58
|
|
# of unexpected successes 5
|
|
# of expected failures 183
|
|
# of unresolved testcases 3
|
|
# of untested testcases 5
|
|
</FONT></pre></td></tr></table></P><P>
|
|
|
|
The ideal test run consists of expected passes only; however, reality
|
|
conspires to keep us from this ideal. Unexpected failures indicate
|
|
real problems, whether in GDB or in the testsuite. Expected
|
|
failures are still failures, but ones which have been decided are too
|
|
hard to deal with at the time; for instance, a test case might work
|
|
everywhere except on AIX, and there is no prospect of the AIX case
|
|
being fixed in the near future. Expected failures should not be added
|
|
lightly, since you may be masking serious bugs in GDB.
|
|
Unexpected successes are expected fails that are passing for some
|
|
reason, while unresolved and untested cases often indicate some minor
|
|
catastrophe, such as the compiler being unable to deal with a test
|
|
program.
|
|
</P><P>
|
|
|
|
When making any significant change to GDB, you should run the
|
|
testsuite before and after the change, to confirm that there are no
|
|
regressions. Note that truly complete testing would require that you
|
|
run the testsuite with all supported configurations and a variety of
|
|
compilers; however this is more than really necessary. In many cases
|
|
testing with a single configuration is sufficient. Other useful
|
|
options are to test one big-endian (Sparc) and one little-endian (x86)
|
|
host, a cross config with a builtin simulator (powerpc-eabi,
|
|
mips-elf), or a 64-bit host (Alpha).
|
|
</P><P>
|
|
|
|
If you add new functionality to GDB, please consider adding
|
|
tests for it as well; this way future GDB hackers can detect
|
|
and fix their changes that break the functionality you added.
|
|
Similarly, if you fix a bug that was not previously reported as a test
|
|
failure, please add a test case for it. Some cases are extremely
|
|
difficult to test, such as code that handles host OS failures or bugs
|
|
in particular versions of compilers, and it's OK not to try to write
|
|
tests for all of those.
|
|
</P><P>
|
|
|
|
<HR SIZE="6">
|
|
<A NAME="SEC177"></A>
|
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC176"> < </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC178"> > </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC178"> << </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC175"> Up </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_17.html#SEC179"> >> </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="gdbint.html#SEC_Top">Top</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_toc.html#SEC_Contents">Contents</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_19.html#SEC186">Index</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_abt.html#SEC_About"> ? </A>]</TD>
|
|
</TR></TABLE>
|
|
<H2> 16.2 Testsuite Organization </H2>
|
|
<!--docid::SEC177::-->
|
|
<P>
|
|
|
|
<A NAME="IDX523"></A>
|
|
The testsuite is entirely contained in <TT>`gdb/testsuite'</TT>. While the
|
|
testsuite includes some makefiles and configury, these are very minimal,
|
|
and used for little besides cleaning up, since the tests themselves
|
|
handle the compilation of the programs that GDB will run. The file
|
|
<TT>`testsuite/lib/gdb.exp'</TT> contains common utility procs useful for
|
|
all GDB tests, while the directory <TT>`testsuite/config'</TT> contains
|
|
configuration-specific files, typically used for special-purpose
|
|
definitions of procs like <CODE>gdb_load</CODE> and <CODE>gdb_start</CODE>.
|
|
</P><P>
|
|
|
|
The tests themselves are to be found in <TT>`testsuite/gdb.*'</TT> and
|
|
subdirectories of those. The names of the test files must always end
|
|
with <TT>`.exp'</TT>. DejaGNU collects the test files by wildcarding
|
|
in the test directories, so both subdirectories and individual files
|
|
get chosen and run in alphabetical order.
|
|
</P><P>
|
|
|
|
The following table lists the main types of subdirectories and what they
|
|
are for. Since DejaGNU finds test files no matter where they are
|
|
located, and since each test file sets up its own compilation and
|
|
execution environment, this organization is simply for convenience and
|
|
intelligibility.
|
|
</P><P>
|
|
|
|
<DL COMPACT>
|
|
<DT><TT>`gdb.base'</TT>
|
|
<DD>This is the base testsuite. The tests in it should apply to all
|
|
configurations of GDB (but generic native-only tests may live here).
|
|
The test programs should be in the subset of C that is valid K&R,
|
|
ANSI/ISO, and C++ (<CODE>#ifdef</CODE>s are allowed if necessary, for instance
|
|
for prototypes).
|
|
<P>
|
|
|
|
<DT><TT>`gdb.<VAR>lang</VAR>'</TT>
|
|
<DD>Language-specific tests for any language <VAR>lang</VAR> besides C. Examples are
|
|
<TT>`gdb.c++'</TT> and <TT>`gdb.java'</TT>.
|
|
<P>
|
|
|
|
<DT><TT>`gdb.<VAR>platform</VAR>'</TT>
|
|
<DD>Non-portable tests. The tests are specific to a specific configuration
|
|
(host or target), such as HP-UX or eCos. Example is <TT>`gdb.hp'</TT>, for
|
|
HP-UX.
|
|
<P>
|
|
|
|
<DT><TT>`gdb.<VAR>compiler</VAR>'</TT>
|
|
<DD>Tests specific to a particular compiler. As of this writing (June
|
|
1999), there aren't currently any groups of tests in this category that
|
|
couldn't just as sensibly be made platform-specific, but one could
|
|
imagine a <TT>`gdb.gcc'</TT>, for tests of GDB's handling of GCC
|
|
extensions.
|
|
<P>
|
|
|
|
<DT><TT>`gdb.<VAR>subsystem</VAR>'</TT>
|
|
<DD>Tests that exercise a specific GDB subsystem in more depth. For
|
|
instance, <TT>`gdb.disasm'</TT> exercises various disassemblers, while
|
|
<TT>`gdb.stabs'</TT> tests pathways through the stabs symbol reader.
|
|
</DL>
|
|
<P>
|
|
|
|
<HR SIZE="6">
|
|
<A NAME="SEC178"></A>
|
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC177"> < </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_17.html#SEC179"> > </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC175"> << </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC175"> Up </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_17.html#SEC179"> >> </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="gdbint.html#SEC_Top">Top</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_toc.html#SEC_Contents">Contents</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_19.html#SEC186">Index</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_abt.html#SEC_About"> ? </A>]</TD>
|
|
</TR></TABLE>
|
|
<H2> 16.3 Writing Tests </H2>
|
|
<!--docid::SEC178::-->
|
|
<P>
|
|
|
|
In many areas, the GDB tests are already quite comprehensive; you
|
|
should be able to copy existing tests to handle new cases.
|
|
</P><P>
|
|
|
|
You should try to use <CODE>gdb_test</CODE> whenever possible, since it
|
|
includes cases to handle all the unexpected errors that might happen.
|
|
However, it doesn't cost anything to add new test procedures; for
|
|
instance, <TT>`gdb.base/exprs.exp'</TT> defines a <CODE>test_expr</CODE> that
|
|
calls <CODE>gdb_test</CODE> multiple times.
|
|
</P><P>
|
|
|
|
Only use <CODE>send_gdb</CODE> and <CODE>gdb_expect</CODE> when absolutely
|
|
necessary, such as when GDB has several valid responses to a command.
|
|
</P><P>
|
|
|
|
The source language programs do <EM>not</EM> need to be in a consistent
|
|
style. Since GDB is used to debug programs written in many different
|
|
styles, it's worth having a mix of styles in the testsuite; for
|
|
instance, some GDB bugs involving the display of source lines would
|
|
never manifest themselves if the programs used GNU coding style
|
|
uniformly.
|
|
</P><P>
|
|
|
|
<A NAME="Hints"></A>
|
|
</P><P>
|
|
|
|
<HR SIZE="6">
|
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_16.html#SEC175"> << </A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_17.html#SEC179"> >> </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="gdbint.html#SEC_Top">Top</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_toc.html#SEC_Contents">Contents</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_19.html#SEC186">Index</A>]</TD>
|
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdbint_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>October, 26 2002</I>
|
|
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
|
|
"><I>texi2html</I></A>
|
|
|
|
</BODY>
|
|
</HTML>
|