\input texinfo @c -*-texinfo-*-
-@c Copyright 1988 1989 1990 1991 1992 1993 1994 Free Software Foundation, Inc.
+@c Copyright 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999
+@c Free Software Foundation, Inc.
@c
@c %**start of header
@c makeinfo ignores cmds prev to setfilename, so its arg cannot make use
@ifclear GENERIC
@settitle Debugging with @value{GDBN} (@value{TARGET})
@end ifclear
+@clear RENAMED
@setchapternewpage odd
@c %**end of header
@c readline appendices use @vindex
@syncodeindex vr cp
+@ifclear HPPA
@c !!set GDB manual's edition---not the same as GDB version!
-@set EDITION 4.12
+@set EDITION Sixth
@c !!set GDB manual's revision date
-@set DATE January 1994
-
-@c GDB CHANGELOG CONSULTED BETWEEN:
-@c Fri Oct 11 23:27:06 1991 John Gilmore (gnu at cygnus.com)
-@c Sat Dec 22 02:51:40 1990 John Gilmore (gnu at cygint)
+@set DATE January 1999
+@end ifclear
@c THIS MANUAL REQUIRES TEXINFO-2 macros and info-makers to format properly.
+@ifset HPPA
+@c !!set GDB manual's edition---not the same as GDB version!
+@set EDITION Sixth-HP
+
+@c !!set GDB manual's revision date
+@set DATE November 1997
+
+@c !!set HP version
+@set HPVER HP WDB Version 0.75
+@end ifset
+
@ifinfo
@c This is a dir.info fragment to support semi-automated addition of
@c manuals to an info tree. zoo@cygnus.com is developing this facility.
@format
START-INFO-DIR-ENTRY
-* Gdb:: The GNU debugger.
+* Gdb: (gdb). The @sc{gnu} debugger.
END-INFO-DIR-ENTRY
@end format
@end ifinfo
@c
@c
@ifinfo
-This file documents the GNU debugger @value{GDBN}.
+This file documents the @sc{gnu} debugger @value{GDBN}.
-This is Edition @value{EDITION}, @value{DATE},
-of @cite{Debugging with @value{GDBN}: the GNU Source-Level Debugger}
-for GDB Version @value{GDBVN}.
+This is the @value{EDITION} Edition, @value{DATE},
+of @cite{Debugging with @value{GDBN}: the @sc{gnu} Source-Level Debugger}
+for @value{GDBN} Version @value{GDBVN}.
-Copyright (C) 1988, '89, '90, '91, '92, '93 Free Software Foundation, Inc.
+Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
+Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@titlepage
@title Debugging with @value{GDBN}
-@subtitle The GNU Source-Level Debugger
+@subtitle The @sc{gnu} Source-Level Debugger
@ifclear GENERIC
@subtitle (@value{TARGET})
@end ifclear
@sp 1
-@subtitle Edition @value{EDITION}, for @value{GDBN} version @value{GDBVN}
+@ifclear HPPA
+@subtitle @value{EDITION} Edition, for @value{GDBN} version @value{GDBVN}
@subtitle @value{DATE}
@author Richard M. Stallman and Roland H. Pesch
+@end ifclear
+@ifset HPPA
+@subtitle Edition @value{EDITION}, for @value{HPVER} (based on @value{GDBN} @value{GDBVN})
+@subtitle @value{DATE}
+@author Richard M. Stallman and Roland H. Pesch (modified by HP)
+@end ifset
@page
+@ifclear HPPA
@tex
{\parskip=0pt
\hfill (Send bugs and comments on @value{GDBN} to bug-gdb\@prep.ai.mit.edu.)\par
\hfill {\it Debugging with @value{GDBN}}\par
\hfill \TeX{}info \texinfoversion\par
-\hfill pesch\@cygnus.com\par
+\hfill doc\@cygnus.com\par
}
@end tex
+@end ifclear
+@ifset HPPA
+@tex
+{\parskip=0pt
+\hfill {\it Debugging with @value{GDBN}}\par
+\hfill \TeX{}info \texinfoversion\par
+}
+@end tex
+@end ifset
@vskip 0pt plus 1filll
-Copyright @copyright{} 1988, '89, '90, '91, '92, '93 Free Software
-Foundation, Inc.
+Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
+Free Software Foundation, Inc.
@sp 2
+@ifclear HPPA
Published by the Free Software Foundation @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA @*
+59 Temple Place - Suite 330, @*
+Boston, MA 02111-1307 USA @*
Printed copies are available for $20 each. @*
ISBN 1-882114-11-6 @*
-
+@end ifclear
+
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.
@page
@ifinfo
-@node Top
+@node Top, Summary, (dir), (dir)
@top Debugging with @value{GDBN}
-This file describes @value{GDBN}, the GNU symbolic debugger.
+This file describes @value{GDBN}, the @sc{gnu} symbolic debugger.
-This is Edition @value{EDITION}, @value{DATE}, for GDB Version @value{GDBVN}.
+This is the @value{EDITION} Edition, @value{DATE}, for @value{GDBN} Version
+@value{GDBVN}.
+Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1997
+Free Software Foundation, Inc.
@menu
* Summary:: Summary of @value{GDBN}
-@ifset NOVEL
-* New Features:: New features since GDB version 3.5
-@end ifset
@ifclear BARETARGET
* Sample Session:: A sample @value{GDBN} session
@end ifclear
@ifclear CONLY
* Languages:: Using @value{GDBN} with different languages
@end ifclear
+
@ifset CONLY
* C:: C language support
@end ifset
-@c remnant makeinfo bug, blank line needed after two end-ifs?
* Symbols:: Examining the symbol table
* Altering:: Altering execution
* Controlling GDB:: Controlling @value{GDBN}
* Sequences:: Canned sequences of commands
@ifclear DOSHOST
-* Emacs:: Using @value{GDBN} under GNU Emacs
+* Emacs:: Using @value{GDBN} under @sc{gnu} Emacs
@end ifclear
+@ifset LUCID
+* Energize::
+@end ifset
+
* GDB Bugs:: Reporting bugs in @value{GDBN}
-* Command Line Editing:: Facilities of the readline library
-* Using History Interactively::
@ifset NOVEL
-* Renamed Commands::
+@ifset RENAMED
+* Renamed Commands:: @c @end ifset
@end ifset
+
+@end ifset
+
@ifclear PRECONFIGURED
-* Formatting Documentation:: How to format and print GDB documentation
-* Installing GDB:: Installing GDB
+@ifclear HPPA
+* Formatting Documentation:: How to format and print @value{GDBN} documentation
@end ifclear
+@end ifclear
+
+* Command Line Editing:: Command Line Editing
+* Using History Interactively:: Using History Interactively
+* Installing GDB:: Installing GDB
* Index:: Index
+
+ --- The Detailed Node Listing ---
+
+Summary of @value{GDBN}
+
+* Free Software:: Freely redistributable software
+* Contributors:: Contributors to GDB
+
+Getting In and Out of @value{GDBN}
+
+* Invoking GDB:: How to start @value{GDBN}
+* Quitting GDB:: How to quit @value{GDBN}
+* Shell Commands:: How to use shell commands inside @value{GDBN}
+
+Invoking @value{GDBN}
+
+* File Options:: Choosing files
+* Mode Options:: Choosing modes
+
+@value{GDBN} Commands
+
+* Command Syntax:: How to give commands to @value{GDBN}
+* Completion:: Command completion
+* Help:: How to ask @value{GDBN} for help
+
+Running Programs Under @value{GDBN}
+
+* Compilation:: Compiling for debugging
+* Starting:: Starting your program
+@ifclear BARETARGET
+* Arguments:: Your program's arguments
+* Environment:: Your program's environment
+@end ifclear
+
+* Working Directory:: Your program's working directory
+* Input/Output:: Your program's input and output
+* Attach:: Debugging an already-running process
+* Kill Process:: Killing the child process
+@ifclear HPPA
+* Process Information:: Additional process information
+@end ifclear
+
+* Threads:: Debugging programs with multiple threads
+* Processes:: Debugging programs with multiple processes
+
+Stopping and Continuing
+
+* Breakpoints:: Breakpoints, watchpoints, and catchpoints
+* Continuing and Stepping:: Resuming execution
+@ifset POSIX
+* Signals:: Signals
+@end ifset
+@ifclear BARETARGET
+* Thread Stops:: Stopping and starting multi-thread programs
+@end ifclear
+
+Breakpoints and watchpoints
+
+* Set Breaks:: Setting breakpoints
+* Set Watchpoints:: Setting watchpoints
+* Set Catchpoints:: Setting catchpoints
+* Delete Breaks:: Deleting breakpoints
+* Disabling:: Disabling breakpoints
+* Conditions:: Break conditions
+* Break Commands:: Breakpoint command lists
+@ifclear CONLY
+* Breakpoint Menus:: Breakpoint menus
+@end ifclear
+
+Examining the Stack
+
+* Frames:: Stack frames
+* Backtrace:: Backtraces
+* Selection:: Selecting a frame
+* Frame Info:: Information on a frame
+@ifset MIPS
+* MIPS Stack:: MIPS machines and the function stack
+@end ifset
+
+Examining Source Files
+
+* List:: Printing source lines
+@ifclear DOSHOST
+* Search:: Searching source files
+@end ifclear
+* Source Path:: Specifying source directories
+* Machine Code:: Source and machine code
+
+Examining Data
+
+* Expressions:: Expressions
+* Variables:: Program variables
+* Arrays:: Artificial arrays
+* Output Formats:: Output formats
+* Memory:: Examining memory
+* Auto Display:: Automatic display
+* Print Settings:: Print settings
+* Value History:: Value history
+* Convenience Vars:: Convenience variables
+* Registers:: Registers
+@ifclear HAVE-FLOAT
+* Floating Point Hardware:: Floating point hardware
+@end ifclear
+
+Using @value{GDBN} with Different Languages
+
+* Setting:: Switching between source languages
+* Show:: Displaying the language
+@ifset MOD2
+* Checks:: Type and range checks
+@end ifset
+
+* Support:: Supported languages
+
+Switching between source languages
+
+* Filenames:: Filename extensions and languages.
+* Manually:: Setting the working language manually
+* Automatically:: Having @value{GDBN} infer the source language
+
+@ifset MOD2
+Type and range checking
+
+* Type Checking:: An overview of type checking
+* Range Checking:: An overview of range checking
+@end ifset
+
+Supported languages
+
+@ifset MOD2
+* C:: C and C++
+
+C Language Support
+
+* C Operators:: C operators
+
+C Language Support
+@end ifset
+
+* C Operators:: C and C++ operators
+* C Constants:: C and C++ constants
+* Cplus expressions:: C++ expressions
+* C Defaults:: Default settings for C and C++
+@ifset MOD2
+* C Checks:: C and C++ type and range checks
+@end ifset
+* Debugging C:: @value{GDBN} and C
+* Debugging C plus plus:: @value{GDBN} features for C++
+
+@ifset MOD2
+Modula-2
+
+* M2 Operators:: Built-in operators
+* Built-In Func/Proc:: Built-in functions and procedures
+* M2 Constants:: Modula-2 constants
+* M2 Defaults:: Default settings for Modula-2
+* Deviations:: Deviations from standard Modula-2
+* M2 Checks:: Modula-2 type and range checks
+* M2 Scope:: The scope operators @code{::} and @code{.}
+* GDB/M2:: @value{GDBN} and Modula-2
+@end ifset
+
+Altering Execution
+
+* Assignment:: Assignment to variables
+* Jumping:: Continuing at a different address
+@ifclear BARETARGET
+* Signaling:: Giving your program a signal
+@end ifclear
+* Returning:: Returning from a function
+* Calling:: Calling your program's functions
+* Patching:: Patching your program
+
+@value{GDBN} Files
+
+* Files:: Commands to specify files
+* Symbol Errors:: Errors reading symbol files
+
+Specifying a Debugging Target
+
+* Active Targets:: Active targets
+* Target Commands:: Commands for managing targets
+@ifclear HPPA
+* Byte Order:: Choosing target byte order
+* Remote:: Remote debugging
+
+Remote debugging
+@end ifclear
+
+@ifset REMOTESTUB
+* Remote Serial:: @value{GDBN} remote serial protocol
+@end ifset
+
+@ifset I960
+* i960-Nindy Remote:: @value{GDBN} with a remote i960 (Nindy)
+@end ifset
+
+@ifset AMD29K
+* UDI29K Remote:: The UDI protocol for AMD29K
+* EB29K Remote:: The EBMON protocol for AMD29K
+@end ifset
+
+@ifset VXWORKS
+* VxWorks Remote:: @value{GDBN} and VxWorks
+@end ifset
+
+@ifset ST2000
+* ST2000 Remote:: @value{GDBN} with a Tandem ST2000
+@end ifset
+
+@ifset H8
+* Hitachi Remote:: @value{GDBN} and Hitachi Microprocessors
+@end ifset
+
+@ifset MIPS
+* MIPS Remote:: @value{GDBN} and MIPS boards
+@end ifset
+
+@ifset SIMS
+* Simulator:: Simulated CPU target
+@end ifset
+
+Controlling @value{GDBN}
+
+* Prompt:: Prompt
+* Editing:: Command editing
+* History:: Command history
+* Screen Size:: Screen size
+* Numbers:: Numbers
+* Messages/Warnings:: Optional warnings and messages
+
+Canned Sequences of Commands
+
+* Define:: User-defined commands
+* Hooks:: User-defined command hooks
+* Command Files:: Command files
+* Output:: Commands for controlled output
+
+Reporting Bugs in @value{GDBN}
+
+* Bug Criteria:: Have you found a bug?
+* Bug Reporting:: How to report bugs
+
+Installing @value{GDBN}
+
+* Separate Objdir:: Compiling @value{GDBN} in another directory
+* Config Names:: Specifying names for hosts and targets
+* Configure Options:: Summary of options for configure
@end menu
+
@end ifinfo
-@node Summary
+@node Summary, Sample Session, Top, Top
@unnumbered Summary of @value{GDBN}
The purpose of a debugger such as @value{GDBN} is to allow you to see what is
functions does not currently work. @value{GDBN} does not support
entering expressions, printing values, or similar features using Pascal syntax.
@end ifset
+
@ifset FORTRAN
@cindex Fortran
@value{GDBN} can be used to debug programs written in Fortran, although
@end ifset
@end ifclear
+@ifset HPPA
+This version of the manual documents HP Wildebeest (WDB) Version 0.75,
+implemented on HP 9000 systems running Release 10.20, 10.30, or 11.0 of
+the HP-UX operating system. HP WDB 0.75 can be used to debug code
+generated by the HP ANSI C and HP ANSI C++ compilers as well as the
+@sc{gnu} C and C++ compilers. It does not support the debugging of
+Fortran, Modula-2, or Chill programs.
+@end ifset
+
@menu
* Free Software:: Freely redistributable software
* Contributors:: Contributors to GDB
@end menu
-@node Free Software
+@node Free Software, Contributors, Summary, Summary
@unnumberedsec Free software
-@value{GDBN} is @dfn{free software}, protected by the GNU General Public License
+@value{GDBN} is @dfn{free software}, protected by the @sc{gnu}
+General Public License
(GPL). The GPL gives you the freedom to copy or adapt a licensed
program---but every person getting a copy also gets with it the
freedom to modify that copy (which means that they must get access to
you have these freedoms and that you cannot take these freedoms away
from anyone else.
-@node Contributors
+@node Contributors, , Free Software, Summary
@unnumberedsec Contributors to GDB
-Richard Stallman was the original author of GDB, and of many other GNU
+Richard Stallman was the original author of GDB, and of many other @sc{gnu}
programs. Many others have contributed to its development. This
section attempts to credit major contributors. One of the virtues of
free software is that everyone is free to contribute to it; with
regret, we cannot actually acknowledge everyone here. The file
-@file{ChangeLog} in the GDB distribution approximates a blow-by-blow
+@file{ChangeLog} in the @value{GDBN} distribution approximates a blow-by-blow
account.
Changes much prior to version 2.0 are lost in the mists of time.
@end quotation
So that they may not regard their long labor as thankless, we
-particularly thank those who shepherded GDB through major releases: Fred
-Fish (releases 4.12, 4.11, 4.10, 4.9), Stu Grossman and John Gilmore (releases
-4.8, 4.7, 4.6, 4.5, 4.4), John Gilmore (releases 4.3, 4.2, 4.1, 4.0, and
-3.9); Jim Kingdon (releases 3.5, 3.4, 3.3); and Randy Smith (releases
-3.2, 3.1, 3.0). As major maintainer of GDB for some period, each
+particularly thank those who shepherded GDB through major releases:
+Stan Shebs (release 4.14),
+Fred Fish (releases 4.13, 4.12, 4.11, 4.10, and 4.9),
+Stu Grossman and John Gilmore (releases 4.8, 4.7, 4.6, 4.5, and 4.4),
+John Gilmore (releases 4.3, 4.2, 4.1, 4.0, and 3.9);
+Jim Kingdon (releases 3.5, 3.4, and 3.3);
+and Randy Smith (releases 3.2, 3.1, and 3.0).
+As major maintainer of @value{GDBN} for some period, each
contributed significantly to the structure, stability, and capabilities
of the entire debugger.
Hanson, and Richard Mlynarik, handled releases through 2.8.
@ifclear CONLY
-Michael Tiemann is the author of most of the GNU C++ support in GDB,
+Michael Tiemann is the author of most of the @sc{gnu} C++ support in GDB,
with significant additional contributions from Per Bothner. James
-Clark wrote the GNU C++ demangler. Early work on C++ was by Peter
+Clark wrote the @sc{gnu} C++ demangler. Early work on C++ was by Peter
TerMaat (who also did much general update work leading to release 3.0).
@end ifclear
-GDB 4 uses the BFD subroutine library to examine multiple
+@value{GDBN} 4 uses the BFD subroutine library to examine multiple
object-file formats; BFD was a joint project of David V.
Henkel-Wallace, Rich Pixley, Steve Chamberlain, and John Gilmore.
David Johnson wrote the original COFF support; Pace Willison did
the original support for encapsulated COFF.
+Brent Benson of Harris Computer Systems contributed DWARF 2 support.
+
Adam de Boor and Bradley Davis contributed the ISI Optimum V support.
Per Bothner, Noboyuki Hikichi, and Alessandro Forin contributed MIPS
-support. Jean-Daniel Fekete contributed Sun 386i support. Chris
-Hanson improved the HP9000 support. Noboyuki Hikichi and Tomoyuki
-Hasei contributed Sony/News OS 3 support. David Johnson contributed
-Encore Umax support. Jyrki Kuoppala contributed Altos 3068 support.
-Keith Packard contributed NS32K support. Doug Rabson contributed
-Acorn Risc Machine support. Chris Smith contributed Convex support
-(and Fortran debugging). Jonathan Stone contributed Pyramid support.
-Michael Tiemann contributed SPARC support. Tim Tucker contributed
-support for the Gould NP1 and Gould Powernode. Pace Willison
-contributed Intel 386 support. Jay Vosburgh contributed Symmetry
support.
+Jean-Daniel Fekete contributed Sun 386i support.
+Chris Hanson improved the HP9000 support.
+Noboyuki Hikichi and Tomoyuki Hasei contributed Sony/News OS 3 support.
+David Johnson contributed Encore Umax support.
+Jyrki Kuoppala contributed Altos 3068 support.
+Jeff Law contributed HP PA and SOM support.
+Keith Packard contributed NS32K support.
+Doug Rabson contributed Acorn Risc Machine support.
+Bob Rusk contributed Harris Nighthawk CX-UX support.
+Chris Smith contributed Convex support (and Fortran debugging).
+Jonathan Stone contributed Pyramid support.
+Michael Tiemann contributed SPARC support.
+Tim Tucker contributed support for the Gould NP1 and Gould Powernode.
+Pace Willison contributed Intel 386 support.
+Jay Vosburgh contributed Symmetry support.
Rich Schaefer and Peter Schauer helped with support of SunOS shared
libraries.
-Jay Fenlason and Roland McGrath ensured that GDB and GAS agree about
+Jay Fenlason and Roland McGrath ensured that @value{GDBN} and GAS agree about
several machine instruction sets.
-Patrick Duval, Ted Goldstein, Vikram Koka and Glenn Engel helped
-develop remote debugging. Intel Corporation and Wind River Systems
-contributed remote debugging modules for their products.
+Patrick Duval, Ted Goldstein, Vikram Koka and Glenn Engel helped develop
+remote debugging. Intel Corporation, Wind River Systems, AMD, and ARM
+contributed remote debugging modules for the i960, VxWorks, A29K UDI,
+and RDI targets, respectively.
Brian Fox is the author of the readline libraries providing
command-line editing and command history.
Hitachi America, Ltd. sponsored the support for Hitachi microprocessors.
-@ifset NOVEL
-@node New Features
-@unnumbered New Features since GDB Version 3.5
+Kung Hsu, Jeff Law, and Rick Sladkey added support for hardware
+watchpoints.
-@table @emph
-@item Targets
-Using the new command @code{target}, you can select at runtime whether
-you are debugging local files, local processes, standalone systems over
-a serial port, or realtime systems over a TCP/IP connection. The
-command @code{load} can download programs into a remote system. Serial
-stubs are available for Motorola 680x0, Intel 80386, and Sparc remote
-systems; GDB also supports debugging realtime processes running under
-VxWorks, using SunRPC Remote Procedure Calls over TCP/IP to talk to a
-debugger stub on the target system. Internally, GDB now uses a function
-vector to mediate access to different targets; if you need to add your
-own support for a remote protocol, this makes it much easier.
-
-@item Watchpoints
-GDB now sports watchpoints as well as breakpoints. You can use a
-watchpoint to stop execution whenever the value of an expression
-changes, without having to predict a particular place in your program
-where this may happen.
-
-@item Wide Output
-Commands that issue wide output now insert newlines at places designed
-to make the output more readable.
-
-@item Object Code Formats
-GDB uses a new library called the Binary File Descriptor (BFD) Library
-to permit it to switch dynamically, without reconfiguration or
-recompilation, between different object-file formats. Formats currently
-supported are COFF, ELF, a.out, Intel 960 b.out, MIPS ECOFF, HPPA SOM
-(with stabs debugging), and S-records; files may be read as .o files,
-archive libraries, or core dumps. BFD is available as a subroutine
-library so that other programs may take advantage of it, and the other
-GNU binary utilities are being converted to use it.
-
-@item Configuration and Ports
-Compile-time configuration (to select a particular architecture and
-operating system) is much easier. The script @code{configure} now
-allows you to configure GDB as either a native debugger or a
-cross-debugger. @xref{Installing GDB}, for details on how to
-configure.
-
-@item Interaction
-The user interface to the GDB control variables is simpler,
-and is consolidated in two commands, @code{set} and @code{show}. Output
-lines are now broken at readable places, rather than overflowing onto
-the next line. You can suppress output of machine-level addresses,
-displaying only source language information.
-
-@item C++
-GDB now supports C++ multiple inheritance (if used with a GCC
-version 2 compiler), and also has limited support for C++ exception
-handling, with the commands @code{catch} and @code{info catch}: GDB
-can break when an exception is raised, before the stack is peeled back
-to the exception handler's context.
+Michael Snyder added support for tracepoints.
-@ifset MOD2
-@item Modula-2
-GDB now has preliminary support for the GNU Modula-2 compiler, currently
-under development at the State University of New York at Buffalo.
-Coordinated development of both GDB and the GNU Modula-2 compiler will
-continue. Other Modula-2 compilers are currently not supported, and
-attempting to debug programs compiled with them will likely result in an
-error as the symbol table of the executable is read in.
-@end ifset
-
-@item Command Rationalization
-Many GDB commands have been renamed to make them easier to remember
-and use. In particular, the subcommands of @code{info} and
-@code{show}/@code{set} are grouped to make the former refer to the state
-of your program, and the latter refer to the state of GDB itself.
-@xref{Renamed Commands}, for details on what commands were renamed.
-
-@item Shared Libraries
-GDB 4 can debug programs and core files that use SunOS, SVR4, or IBM RS/6000
-shared libraries.
-
-@item Threads
-On some systems, GDB 4 has facilities to debug multi-thread programs.
-
-@item Reference Card
-GDB 4 has a reference card. @xref{Formatting Documentation,,Formatting
-the Documentation}, for instructions about how to print it.
-@end table
-@end ifset
+Stu Grossman wrote gdbserver.
+
+Jim Kingdon, Peter Schauer, Ian Taylor, and Stu Grossman made
+nearly innumerable bug fixes and cleanups throughout GDB.
+
+The following people at the Hewlett-Packard Company contributed
+support for the PA-RISC 2.0 architecture, HP-UX 10.20, 10.30, and 11.0
+(narrow mode), HP's implementation of kernel threads, HP's aC++
+compiler, and the terminal user interface: Ben Krepp, Richard Title,
+John Bishop, Susan Macchia, Kathy Mann, Satish Pai, India Paul, Steve
+Rehrauer, and Elena Zannoni. Kim Haase provided HP-specific
+information in this manual.
+
+Cygnus Solutions has sponsored GDB maintenance and much of its
+development since 1991.
@ifclear BARETARGET
-@node Sample Session
+@node Sample Session, Invocation, Summary, Top
@chapter A Sample @value{GDBN} Session
You can use this manual at your leisure to read all about @value{GDBN}.
@c FIXME: this example may not be appropriate for some configs, where
@c FIXME...primary interest is in remote use.
-One of the preliminary versions of GNU @code{m4} (a generic macro
+One of the preliminary versions of @sc{gnu} @code{m4} (a generic macro
processor) exhibits the following bug: sometimes, when we change its
quote strings from the default, the commands used to capture one macro
definition within another stop working. In the following short @code{m4}
@noindent
Let us use @value{GDBN} to try to see what is going on.
+@ifclear HPPA
@smallexample
$ @b{@value{GDBP} m4}
@c FIXME: this falsifies the exact text played out, to permit smallbook
@c FIXME... format to come out better.
-GDB is free software and you are welcome to distribute copies
+@value{GDBN} is free software and you are welcome to distribute copies
of it under certain conditions; type "show copying" to see
the conditions.
-There is absolutely no warranty for GDB; type "show warranty"
+There is absolutely no warranty for @value{GDBN}; type "show warranty"
for details.
-GDB @value{GDBVN}, Copyright 1993 Free Software Foundation, Inc...
+
+@value{GDBN} @value{GDBVN}, Copyright 1995 Free Software Foundation, Inc...
(@value{GDBP})
@end smallexample
+@end ifclear
+@ifset HPPA
+@smallexample
+$ @b{@value{GDBP} m4}
+Wildebeest is free software and you are welcome to distribute copies of
+it under certain conditions; type "show copying" to see the conditions.
+There is absolutely no warranty for Wildebeest; type "show warranty"
+for details.
+
+Hewlett-Packard Wildebeest 0.75 (based on GDB 4.16)
+(built for PA-RISC 1.1 or 2.0, HP-UX 10.20)
+Copyright 1996, 1997 Free Software Foundation, Inc.
+(@value{GDBP})
+@end smallexample
+@end ifset
@noindent
@value{GDBN} reads only enough symbol data to know where to find the
@end smallexample
@end ifclear
-@node Invocation
+@node Invocation, Commands, Sample Session, Top
@chapter Getting In and Out of @value{GDBN}
This chapter discusses how to start @value{GDBN}, and how to get out of it.
-(The essentials: type @samp{@value{GDBP}} to start GDB, and type @kbd{quit}
-or @kbd{C-d} to exit.)
+The essentials are:
+@itemize @bullet
+@item
+type @samp{@value{GDBP}} to start GDB.
+@item
+type @kbd{quit} or @kbd{C-d} to exit.
+@end itemize
@menu
* Invoking GDB:: How to start @value{GDBN}
-* Quitting GDB:: How to quit @value{GDBN}
+* Quitting GDB:: How to quit @value{GDBN}
* Shell Commands:: How to use shell commands inside @value{GDBN}
@end menu
-@node Invoking GDB
+@node Invoking GDB, Quitting GDB, Invocation, Invocation
@section Invoking @value{GDBN}
@ifset H8EXCLUSIVE
would attach @value{GDBN} to process @code{1234} (unless you also have a file
named @file{1234}; @value{GDBN} does check for a core file first).
+@ifclear HPPA
Taking advantage of the second command-line argument requires a fairly
complete operating system; when you use @value{GDBN} as a remote debugger
attached to a bare board, there may not be any notion of ``process'',
and there is often no way to get a core dump.
@end ifclear
+@end ifclear
+
+You can run @code{gdb} without printing the front material, which describes
+@value{GDBN}'s non-warranty, by specifying @code{-silent}:
+
+@smallexample
+@value{GDBP} -silent
+@end smallexample
@noindent
You can further control how @value{GDBN} starts up by using command-line
@ifset MIPS
* MIPS Remote:: @value{GDBN} and MIPS boards
@end ifset
+@ifset SPARCLET
+* Sparclet Remote:: @value{GDBN} and Sparclet boards
+@end ifset
@ifset SIMS
* Simulator:: Simulated CPU target
@end ifset
@end menu
@ifclear GENERIC
+@ifclear HPPA
@include remote.texi
@end ifclear
+@end ifclear
@node File Options
@subsection Choosing files
Add @var{directory} to the path to search for source files.
@ifclear BARETARGET
+@ifclear HPPA
@item -m
@itemx -mapped
@emph{Warning: this option depends on operating system facilities that are not
and can quickly map in symbol information from it, rather than reading
the symbol table from the executable program.
-@c FIXME! Really host, not target?
The @file{.syms} file is specific to the host machine where @value{GDBN}
is run. It holds an exact image of the internal @value{GDBN} symbol
table. It cannot be shared across multiple host platforms.
@end ifclear
+@end ifclear
+@ifclear HPPA
@item -r
@itemx -readnow
Read each symbol file's entire symbol table immediately, rather than
the default, which is to read it incrementally as it is needed.
This makes startup slower, but makes future operations faster.
+@end ifclear
@end table
@ifclear BARETARGET
+@ifclear HPPA
The @code{-mapped} and @code{-readnow} options are typically combined in
order to build a @file{.syms} file that contains complete symbol
-information. (@xref{Files,,Commands to specify files}, for information
-on @file{.syms} files.) A simple GDB invocation to do nothing but build
-a @file{.syms} file for future use is:
+information. (@xref{Files,,Commands to specify files}, for
+information on @file{.syms} files.) A simple GDB invocation to do
+nothing but build a @file{.syms} file for future use is:
@example
gdb -batch -nx -mapped -readnow programname
@end example
@end ifclear
+@end ifclear
-@node Mode Options
+@node Mode Options, , File Options, Invoking GDB
@subsection Choosing modes
You can run @value{GDBN} in various alternative modes---for example, in
@ifclear DOSHOST
@item -fullname
@itemx -f
-Emacs sets this option when it runs @value{GDBN} as a subprocess. It tells @value{GDBN}
+@sc{gnu} Emacs sets this option when it runs @value{GDBN} as a subprocess. It tells @value{GDBN}
to output the full file name and line number in a standard,
recognizable fashion each time a stack frame is displayed (which
includes each time your program stops). This recognizable format looks
@end ifclear
@ifset SERIAL
+@ifclear HPPA
@item -b @var{bps}
Set the line speed (baud rate or bits per second) of any serial
interface used by @value{GDBN} for remote debugging.
+@end ifclear
@item -tty @var{device}
Run using @var{device} for your program's standard input and output.
@c FIXME: kingdon thinks there is more to -tty. Investigate.
@end ifset
+
+@ifset HPPA
+@item -tui
+Use a Terminal User Interface. For information, use your Web browser to
+read the file @file{TUI.html}, which is usually installed in the
+directory @code{/opt/langtools/wdb/doc} on HP-UX systems. Do not use
+this option if you run @value{GDBN} from Emacs (see @pxref{Emacs, ,Using
+@value{GDBN} under @sc{gnu} Emacs}).
+
+@item -xdb
+Run in XDB compatibility mode, allowing the use of certain XDB commands.
+For information, see the file @file{xdb_trans.html}, which is usually
+installed in the directory @code{/opt/langtools/wdb/doc} on HP-UX
+systems.
+@end ifset
@end table
-@node Quitting GDB
+@node Quitting GDB, Shell Commands, Invoking GDB, Invocation
@section Quitting @value{GDBN}
@cindex exiting @value{GDBN}
@cindex leaving @value{GDBN}
@table @code
-@item quit
-@kindex quit
+@kindex quit @r{[}@var{expression}@r{]}
@kindex q
-To exit @value{GDBN}, use the @code{quit} command (abbreviated @code{q}), or type
-an end-of-file character (usually @kbd{C-d}).
+@item quit
+To exit @value{GDBN}, use the @code{quit} command (abbreviated @code{q}), or
+type an end-of-file character (usually @kbd{C-d}). If you do not supply
+@var{expression}, @value{GDBN} will terminate normally; otherwise it will
+terminate using the result of @var{expression} as the error code.
@end table
@cindex interrupt
(@pxref{Attach, ,Debugging an already-running process}).
@end ifclear
-@node Shell Commands
+@node Shell Commands, , Quitting GDB, Invocation
@section Shell commands
If you need to execute occasional shell commands during your
just use the @code{shell} command.
@table @code
-@item shell @var{command string}
@kindex shell
@cindex shell escape
-Invoke a the standard shell to execute @var{command string}.
+@item shell @var{command string}
+Invoke a standard shell to execute @var{command string}.
@ifclear DOSHOST
If it exists, the environment variable @code{SHELL} determines which
shell to run. Otherwise @value{GDBN} uses @code{/bin/sh}.
@value{GDBN}:
@table @code
-@item make @var{make-args}
@kindex make
@cindex calling make
+@item make @var{make-args}
Execute the @code{make} program with the specified
arguments. This is equivalent to @samp{shell make @var{make-args}}.
@end table
-@node Commands
+@node Commands, Running, Invocation, Top
@chapter @value{GDBN} Commands
You can abbreviate a @value{GDBN} command to the first few letters of the command
* Help:: How to ask @value{GDBN} for help
@end menu
-@node Command Syntax
+@node Command Syntax, Completion, Commands, Commands
@section Command syntax
A @value{GDBN} command is a single line of input. There is no limit on
nothing. This is useful mainly in command files (@pxref{Command
Files,,Command files}).
-@node Completion
+@node Completion, Help, Command Syntax, Commands
@section Command completion
@cindex completion
In general, @value{GDBN} can tell that a quote is needed (and inserts it) if
you have not yet started typing the argument list when you ask for
completion on an overloaded symbol.
+
+For more information about overloaded functions, @pxref{Cplus
+expressions, ,C++ expressions}. You can use the command @code{set
+overload-resolution off} to disable overload resolution;
+@pxref{Debugging C plus plus, ,@value{GDBN} features for C++}.
@end ifclear
-@node Help
+@node Help, , Completion, Commands
@section Getting help
@cindex online documentation
@kindex help
-You can always ask @value{GDBN} itself for information on its commands, using the
-command @code{help}.
+You can always ask @value{GDBN} itself for information on its commands,
+using the command @code{help}.
@table @code
+@kindex h
@item help
@itemx h
-@kindex h
You can use @code{help} (abbreviated @code{h}) with no arguments to
display a short list of named classes of commands:
@item help @var{command}
With a command name as @code{help} argument, @value{GDBN} displays a
short paragraph on how to use that command.
+
+@kindex complete
+@item complete @var{args}
+The @code{complete @var{args}} command lists all the possible completions
+for the beginning of a command. Use @var{args} to specify the beginning of the
+command you want completed. For example:
+
+@smallexample
+complete i
+@end smallexample
+
+@noindent results in:
+
+@smallexample
+@group
+info
+inspect
+ignore
+@end group
+@end smallexample
+
+@noindent This is intended for use by @sc{gnu} Emacs.
@end table
In addition to @code{help}, you can use the @value{GDBN} commands @code{info}
@c @group
@table @code
-@item info
@kindex info
@kindex i
+@item info
This command (abbreviated @code{i}) is for describing the state of your
program. For example, you can list the arguments given to your program
with @code{info args}, list the registers currently in use with @code{info
You can get a complete list of the @code{info} sub-commands with
@w{@code{help info}}.
+@kindex set
+@item set
+You can assign the result of an expresson to an environment variable with
+@code{set}. For example, you can set the @value{GDBN} prompt to a $-sign with
+@code{set prompt $}.
+
@kindex show
@item show
-In contrast, @code{show} is for describing the state of @value{GDBN} itself.
+In contrast to @code{info}, @code{show} is for describing the state of
+@value{GDBN} itself.
You can change most of the things you can @code{show}, by using the
related command @code{set}; for example, you can control what number
system is used for displays with @code{set radix}, or simply inquire
@kindex show warranty
@item show warranty
-Display the GNU ``NO WARRANTY'' statement.
+Display the @sc{gnu} ``NO WARRANTY'' statement.
@end table
-@node Running
+@node Running, Stopping, Commands, Top
@chapter Running Programs Under @value{GDBN}
When you run a program under @value{GDBN}, you must first generate
debugging information when you compile it.
@ifclear BARETARGET
-You may start it with its arguments, if any, in an environment of your
-choice. You may redirect your program's input and output, debug an
+You may start @value{GDBN} with its arguments, if any, in an environment
+of your choice. You may redirect your program's input and output, debug an
already running process, or kill a child process.
@end ifclear
@ifclear BARETARGET
* Arguments:: Your program's arguments
* Environment:: Your program's environment
+@end ifclear
+
* Working Directory:: Your program's working directory
* Input/Output:: Your program's input and output
* Attach:: Debugging an already-running process
* Kill Process:: Killing the child process
+@ifclear HPPA
* Process Information:: Additional process information
-* Threads:: Debugging programs with multiple threads
@end ifclear
+
+* Threads:: Debugging programs with multiple threads
+* Processes:: Debugging programs with multiple processes
@end menu
-@node Compilation
+@node Compilation, Starting, Running, Running
@section Compiling for debugging
In order to debug a program effectively, you need to generate
options together. Using those compilers, you cannot generate optimized
executables containing debugging information.
-@value{NGCC}, the GNU C compiler, supports @samp{-g} with or without
+@ifclear HPPA
+@value{NGCC}, the @sc{gnu} C compiler, supports @samp{-g} with or without
+@end ifclear
+@ifset HPPA
+The HP ANSI C and C++ compilers, as well as @value{NGCC}, the @sc{gnu} C
+compiler, support @samp{-g} with or without
+@end ifset
@samp{-O}, making it possible to debug optimized code. We recommend
that you @emph{always} use @samp{-g} whenever you compile a program.
You may think your program is correct, but there is no sense in pushing
Some things do not work as well with @samp{-g -O} as with just
@samp{-g}, particularly on machines with instruction scheduling. If in
doubt, recompile with @samp{-g} alone, and if this fixes the problem,
-please report it as a bug (including a test case!).
+please report it to us as a bug (including a test case!).
-Older versions of the GNU C compiler permitted a variant option
+Older versions of the @sc{gnu} C compiler permitted a variant option
@w{@samp{-gg}} for debugging information. @value{GDBN} no longer supports this
-format; if your GNU C compiler has this option, do not use it.
+format; if your @sc{gnu} C compiler has this option, do not use it.
@need 2000
-@node Starting
+@node Starting, Arguments, Compilation, Running
@section Starting your program
@cindex starting
@cindex running
@table @code
+@kindex run
@item run
@itemx r
-@kindex run
Use the @code{run} command to start your program under @value{GDBN}. You must
first specify the program name
@ifset VXWORKS
@code{run} command. If a shell is available on your target, the shell
is used to pass the arguments, so that you may use normal conventions
(such as wildcard expansion or variable substitution) in describing
-the arguments. In Unix systems, you can control which shell is used
-with the @code{SHELL} environment variable. @xref{Arguments, ,Your
-program's arguments}.
+the arguments.
+In Unix systems, you can control which shell is used with the
+@code{SHELL} environment variable.
+@xref{Arguments, ,Your program's arguments}.
@item The @emph{environment.}
Your program normally inherits its environment from @value{GDBN}, but you can
your current breakpoints.
@ifclear BARETARGET
-@node Arguments
+@node Arguments, Environment, Starting, Running
@section Your program's arguments
@cindex arguments (to your program)
The arguments to your program can be specified by the arguments of the
-@code{run} command. They are passed to a shell, which expands wildcard
-characters and performs redirection of I/O, and thence to your program.
-Your @code{SHELL} environment variable (if it exists) specifies what
-shell @value{GDBN} if you do not define @code{SHELL}, @value{GDBN} uses
+@code{run} command.
+They are passed to a shell, which expands wildcard characters and
+performs redirection of I/O, and thence to your program. Your
+@code{SHELL} environment variable (if it exists) specifies what shell
+@value{GDBN} uses. If you do not define @code{SHELL}, @value{GDBN} uses
@code{/bin/sh}.
@code{run} with no arguments uses the same arguments used by the previous
using @code{set args} before the next @code{run} is the only way to run
it again without arguments.
-@item show args
@kindex show args
+@item show args
Show the arguments to give your program when it is started.
@end table
-@node Environment
+@node Environment, Working Directory, Arguments, Running
@section Your program's environment
@cindex environment (of your program)
environment without having to start @value{GDBN} over again.
@table @code
-@item path @var{directory}
@kindex path
+@item path @var{directory}
Add @var{directory} to the front of the @code{PATH} environment variable
(the search path for executables), for both @value{GDBN} and your program.
You may specify several directory names, separated by @samp{:} or
@c 'path' is explicitly nonrepeatable, but RMS points out it is silly to
@c document that, since repeating it would be a no-op.
-@item show paths
@kindex show paths
+@item show paths
Display the list of search paths for executables (the @code{PATH}
environment variable).
-@item show environment @r{[}@var{varname}@r{]}
@kindex show environment
+@item show environment @r{[}@var{varname}@r{]}
Print the value of environment variable @var{varname} to be given to
your program when it starts. If you do not supply @var{varname},
print the names and values of all environment variables to be given to
your program. You can abbreviate @code{environment} as @code{env}.
-@item set environment @var{varname} @r{[}=@r{]} @var{value}
@kindex set environment
+@item set environment @var{varname} @r{[}=@r{]} @var{value}
Set environment variable @var{varname} to @var{value}. The value
changes for your program only, not for @value{GDBN} itself. @var{value} may
be any string; the values of environment variables are just strings, and
@samp{foo}. (The spaces around @samp{=} are used for clarity here; they
are not actually required.)
-@item unset environment @var{varname}
@kindex unset environment
+@item unset environment @var{varname}
Remove variable @var{varname} from the environment to be passed to your
program. This is different from @samp{set env @var{varname} =};
@code{unset environment} removes the variable from the environment,
files that are only run when you sign on, such as @file{.login} or
@file{.profile}.
-@node Working Directory
+@node Working Directory, Input/Output, Environment, Running
@section Your program's working directory
@cindex working directory (of your program)
specify files}.
@table @code
-@item cd @var{directory}
@kindex cd
+@item cd @var{directory}
Set the @value{GDBN} working directory to @var{directory}.
-@item pwd
@kindex pwd
+@item pwd
Print the @value{GDBN} working directory.
@end table
-@node Input/Output
+@node Input/Output, Attach, Working Directory, Running
@section Your program's input and output
@cindex redirection
@cindex i/o
@cindex terminal
By default, the program you run under @value{GDBN} does input and output to
-the same terminal that @value{GDBN} uses. @value{GDBN} switches the terminal to
-its own terminal modes to interact with you, but it records the terminal
+the same terminal that @value{GDBN} uses. @value{GDBN} switches the terminal
+to its own terminal modes to interact with you, but it records the terminal
modes your program was using and switches back to them when you continue
running your program.
@table @code
-@item info terminal
@kindex info terminal
+@item info terminal
Displays information recorded by @value{GDBN} about the terminal modes your
program is using.
@end table
command, only the input @emph{for your program} is affected. The input
for @value{GDBN} still comes from your terminal.
-@node Attach
+@node Attach, Kill Process, Input/Output, Running
@section Debugging an already-running process
@kindex attach
@cindex attach
programs on bare-board targets that lack an operating system. You must
also have permission to send the process a signal.
-When using @code{attach}, you should first use the @code{file} command
-to specify the program running in the process and load its symbol table.
-@xref{Files, ,Commands to Specify Files}.
+When you use @code{attach}, the debugger finds the program running in
+the process first by looking in the current working directory, then (if
+the program is not found) by using the source file search path
+(@pxref{Source Path, ,Specifying source directories}). You can also use
+the @code{file} command to load the program. @xref{Files, ,Commands to
+Specify Files}.
The first thing @value{GDBN} does after arranging to debug the specified
process is to stop it. You can examine and modify an attached process
with all the @value{GDBN} commands that are ordinarily available when you start
+@ifclear HPPA
processes with @code{run}. You can insert breakpoints; you can step and
+@end ifclear
+@ifset HPPA
+processes with @code{run}. You can insert breakpoints (except in shared
+libraries); you can step and
+@end ifset
continue; you can modify storage. If you would rather the process
continue running, you may use the @code{continue} command after
attaching @value{GDBN} to the process.
@table @code
-@item detach
@kindex detach
+@item detach
When you have finished debugging the attached process, you can use the
@code{detach} command to release it from @value{GDBN} control. Detaching
the process continues its execution. After the @code{detach} command,
confirm} command (@pxref{Messages/Warnings, ,Optional warnings and
messages}).
-@node Kill Process
-@c @group
+@ifset HPPA
+@node Kill Process, Threads, Attach, Running
@section Killing the child process
+@end ifset
+@ifclear HPPA
+@node Kill Process, Process Information, Attach, Running
+@section Killing the child process
+@end ifclear
@table @code
-@item kill
@kindex kill
+@item kill
Kill the child process in which your program is running under @value{GDBN}.
@end table
This command is useful if you wish to debug a core dump instead of a
running process. @value{GDBN} ignores any core dump file while your program
is running.
-@c @end group
On some operating systems, a program cannot be executed outside @value{GDBN}
while you have breakpoints set on it inside @value{GDBN}. You can use the
reads the symbol table again (while trying to preserve your current
breakpoint settings).
-@node Process Information
+@ifclear HPPA
+@node Process Information, Threads, Kill Process, Running
@section Additional process information
@kindex /proc
be used to examine the image of a running process using file-system
subroutines. If @value{GDBN} is configured for an operating system with this
facility, the command @code{info proc} is available to report on several
-kinds of information about the process running your program.
+kinds of information about the process running your program.
+@code{info proc} works only on SVR4 systems that support @code{procfs}.
@table @code
-@item info proc
@kindex info proc
+@item info proc
Summarize available information about the process.
-@item info proc mappings
@kindex info proc mappings
+@item info proc mappings
Report on the address ranges accessible in the program, with information
on whether your program may read, write, or execute each range.
-@item info proc times
@kindex info proc times
+@item info proc times
Starting time, user CPU time, and system CPU time for your program and
its children.
-@item info proc id
@kindex info proc id
+@item info proc id
Report on the process IDs related to your program: its own process ID,
the ID of its parent, the process group ID, and the session ID.
-@item info proc status
@kindex info proc status
+@item info proc status
General information on the state of the process. If the process is
stopped, this report includes the reason for stopping, and any signal
received.
@item info proc all
Show all the above information about the process.
@end table
+@end ifclear
-@node Threads
+@ifset HPPA
+@node Threads, Processes, Kill Process, Running
+@section Debugging programs with multiple threads
+@end ifset
+@ifclear HPPA
+@node Threads, Processes, Process Information, Running
@section Debugging programs with multiple threads
+@end ifclear
@cindex threads of execution
@cindex multiple threads
@cindex switching threads
-In some operating systems, a single program may have more than one
+In some operating systems,
+@ifset HPPA
+including HP-UX,
+@end ifset
+a single program may have more than one
@dfn{thread} of execution. The precise semantics of threads differ from
one operating system to another, but in general the threads of a single
program are akin to multiple processes---except that they share one
@item automatic notification of new threads
@item @samp{thread @var{threadno}}, a command to switch among threads
@item @samp{info threads}, a command to inquire about existing threads
+@item @samp{thread apply [@var{threadno}] [@var{all}] @var{args}},
+a command to apply a command to a list of threads
@item thread-specific breakpoints
@end itemize
+@ifclear HPPA
@quotation
@emph{Warning:} These facilities are not yet available on every
@value{GDBN} configuration where the operating system supports threads.
@c FIXME to implementors: how hard would it be to say "sorry, this GDB
@c doesn't support threads"?
@end quotation
+@end ifclear
@cindex focus of debugging
@cindex current thread
This thread is called the @dfn{current thread}. Debugging commands show
program information from the perspective of the current thread.
+@ifclear HPPA
@kindex New @var{systag}
@cindex thread identifier (system)
@c FIXME-implementors!! It would be more helpful if the [New...] message
number---always a single integer---with each thread in your program.
@table @code
-@item info threads
@kindex info threads
+@item info threads
Display a summary of all threads currently in your
program. @value{GDBN} displays for each thread (in this order):
* 1 process 35 thread 13 main (argc=1, argv=0x7ffffff8)
at threadtest.c:68
@end smallexample
+@end ifclear
+@ifset HPPA
+
+@cindex thread number
+@cindex thread identifier (GDB)
+For debugging purposes, @value{GDBN} associates its own thread
+number---a small integer assigned in thread-creation order---with each
+thread in your program.
+
+@kindex New @var{systag}
+@cindex thread identifier (system)
+@c FIXME-implementors!! It would be more helpful if the [New...] message
+@c included GDB's numeric thread handle, so you could just go to that
+@c thread without first checking `info threads'.
+Whenever @value{GDBN} detects a new thread in your program, it displays
+both @value{GDBN}'s thread number and the target system's identification for the thread with a message in the
+form @samp{[New @var{systag}]}. @var{systag} is a thread identifier
+whose form varies depending on the particular system. For example, on
+HP-UX, you see
+
+@example
+[New thread 2 (system thread 26594)]
+@end example
+
+@noindent
+when @value{GDBN} notices a new thread.
+
+@table @code
+@kindex info threads
+@item info threads
+Display a summary of all threads currently in your
+program. @value{GDBN} displays for each thread (in this order):
+
+@enumerate
+@item the thread number assigned by @value{GDBN}
+
+@item the target system's thread identifier (@var{systag})
+
+@item the current stack frame summary for that thread
+@end enumerate
+
+@noindent
+An asterisk @samp{*} to the left of the @value{GDBN} thread number
+indicates the current thread.
+
+For example,
+@end table
+@c end table here to get a little more width for example
+
+@example
+(@value{GDBP}) info threads
+ * 3 system thread 26607 worker (wptr=0x7b09c318 "@@") at quicksort.c:137
+ 2 system thread 26606 0x7b0030d8 in __ksleep () from /usr/lib/libc.2
+ 1 system thread 27905 0x7b003498 in _brk () from /usr/lib/libc.2
+@end example
+@end ifset
@table @code
-@item thread @var{threadno}
@kindex thread @var{threadno}
+@item thread @var{threadno}
Make thread number @var{threadno} the current thread. The command
argument @var{threadno} is the internal @value{GDBN} thread number, as
shown in the first field of the @samp{info threads} display.
you selected, and its current stack frame summary:
@smallexample
-@c FIXME!! This example made up; find a GDB w/threads and get real one
+@c FIXME!! This example made up; find a @value{GDBN} w/threads and get real one
(@value{GDBP}) thread 2
+@ifclear HPPA
[Switching to process 35 thread 23]
+@end ifclear
+@ifset HPPA
+[Switching to thread 2 (system thread 26594)]
+@end ifset
0x34e5 in sigpause ()
@end smallexample
As with the @samp{[New @dots{}]} message, the form of the text after
@samp{Switching to} depends on your system's conventions for identifying
threads.
+
+@kindex thread apply
+@item thread apply [@var{threadno}] [@var{all}] @var{args}
+The @code{thread apply} command allows you to apply a command to one or
+more threads. Specify the numbers of the threads that you want affected
+with the command argument @var{threadno}. @var{threadno} is the internal
+@value{GDBN} thread number, as shown in the first field of the @samp{info
+threads} display. To apply a command to all threads, use
+@code{thread apply all} @var{args}.
@end table
@cindex automatic thread selection
more information about how @value{GDBN} behaves when you stop and start
programs with multiple threads.
-@xref{Set Watchpoints,,Setting watchpoints}, for information about
-watchpoints in programs with multiple threads.
-@end ifclear
+@xref{Set Watchpoints,,Setting watchpoints}, for information about
+watchpoints in programs with multiple threads.
+@end ifclear
+
+@ifclear HPPA
+@node Processes, , Threads, Running
+@section Debugging programs with multiple processes
+
+@cindex fork, debugging programs which call
+@cindex multiple processes
+@cindex processes, multiple
+@value{GDBN} has no special support for debugging programs which create
+additional processes using the @code{fork} function. When a program
+forks, @value{GDBN} will continue to debug the parent process and the
+child process will run unimpeded. If you have set a breakpoint in any
+code which the child then executes, the child will get a @code{SIGTRAP}
+signal which (unless it catches the signal) will cause it to terminate.
+
+However, if you want to debug the child process there is a workaround
+which isn't too painful. Put a call to @code{sleep} in the code which
+the child process executes after the fork. It may be useful to sleep
+only if a certain environment variable is set, or a certain file exists,
+so that the delay need not occur when you don't want to run @value{GDBN}
+on the child. While the child is sleeping, use the @code{ps} program to
+get its process ID. Then tell @value{GDBN} (a new invocation of
+@value{GDBN} if you are also debugging the parent process) to attach to
+the child process (see @ref{Attach}). From that point on you can debug
+the child process just like any other process which you attached to.
+@end ifclear
+@ifset HPPA
+@node Processes, , Threads, Running
+@section Debugging programs with multiple processes
+
+@cindex fork, debugging programs which call
+@cindex multiple processes
+@cindex processes, multiple
+
+@value{GDBN} provides support for debugging programs that create
+additional processes using the @code{fork} or @code{vfork} function.
+
+By default, when a program forks, @value{GDBN} will continue to debug
+the parent process and the child process will run unimpeded.
+
+If you want to follow the child process instead of the parent process,
+use the command @w{@code{set follow-fork-mode}}.
+
+@table @code
+@kindex set follow-fork-mode
+@item set follow-fork-mode @var{mode}
+Set the debugger response to a program call of @code{fork} or
+@code{vfork}. A call to @code{fork} or @code{vfork} creates a new
+process. The @var{mode} can be:
+
+@table @code
+@item parent
+The original process is debugged after a fork. The child process runs
+unimpeded.
+
+@item child
+The new process is debugged after a fork. The parent process runs
+unimpeded.
+
+@item ask
+The debugger will ask for one of the above choices.
+@end table
+
+@item show follow-fork-mode
+Display the current debugger response to a fork or vfork call.
+@end table
+
+If you ask to debug a child process and a @code{vfork} is followed by an
+@code{exec}, @value{GDBN} executes the new target up to the first
+breakpoint in the new target. If you have a breakpoint set on
+@code{main} in your original program, the breakpoint will also be set on
+the child process's @code{main}.
+
+When a child process is spawned by @code{vfork}, you cannot debug the
+child or parent until an @code{exec} call completes.
+
+If you issue a @code{run} command to @value{GDBN} after an @code{exec}
+call executes, the new target restarts. To restart the parent process,
+use the @code{file} command with the parent executable name as its
+argument.
+
+You can use the @code{catch} command to make @value{GDBN} stop whenever
+a @code{fork}, @code{vfork}, or @code{exec} call is made. @xref{Set
+Catchpoints, ,Setting catchpoints}.
+@end ifset
-@node Stopping
+@node Stopping, Stack, Running, Top
@chapter Stopping and Continuing
The principal purposes of using a debugger are so that you can stop your
request this information at any time.
@table @code
-@item info program
@kindex info program
+@item info program
Display information about the status of your program: whether it is
running or not,
@ifclear BARETARGET
@end table
@menu
-@ifclear CONLY
-* Breakpoints:: Breakpoints, watchpoints, and exceptions
-@end ifclear
-@ifset CONLY
-* Breakpoints:: Breakpoints and watchpoints
-@end ifset
-@c Remnant makeinfo bug requires blank line after *successful* end-if in menu:
-
+* Breakpoints:: Breakpoints, watchpoints, and catchpoints
* Continuing and Stepping:: Resuming execution
@ifset POSIX
* Signals:: Signals
@end ifset
+
@ifclear BARETARGET
-* Thread Stops:: Stopping and starting multi-thread programs
+* Thread Stops:: Stopping and starting multi-thread programs
@end ifclear
+
@end menu
-@c makeinfo node-defaulting requires adjacency of @node and sectioning cmds
-@c ...hence distribute @node Breakpoints over two possible @if expansions.
-@c
-@ifclear CONLY
-@node Breakpoints
-@section Breakpoints, watchpoints, and exceptions
-@end ifclear
-@ifset CONLY
-@node Breakpoints
-@section Breakpoints and watchpoints
-@end ifset
+@node Breakpoints, Continuing and Stepping, Stopping, Stopping
+@section Breakpoints, watchpoints, and catchpoints
@cindex breakpoints
A @dfn{breakpoint} makes your program stop whenever a certain point in
your program should stop by line number, function name or exact address
in the program.
@ifclear CONLY
-In languages with exception handling (such as GNU C++), you can also set
-breakpoints where an exception is raised (@pxref{Exception Handling,,
-Breakpoints and exceptions}).
+@ifclear HPPA
+In languages with exception handling (such as @sc{gnu} C++), you can
+also set catchpoints where an exception is raised (@pxref{Set
+Catchpoints, , Setting catchpoints}).
+@end ifclear
@end ifclear
+In HP-UX, SunOS 4.x, SVR4, and Alpha OSF/1 configurations, you can set
+breakpoints in shared libraries before the executable is run.
+There is a minor limitation on HP-UX systems: you must wait until the
+executable is run in order to set breakpoints in shared library routines
+that are not called directly by the program (for example, routines that
+are arguments in a @code{pthread_create} call).
+
@cindex watchpoints
@cindex memory tracing
@cindex breakpoint on memory address
whenever @value{GDBN} stops at a breakpoint. @xref{Auto Display,,
Automatic display}.
+@cindex catchpoints
+@cindex breakpoint on events
+A @dfn{catchpoint} is another special breakpoint that stops your program
+when a certain kind of event occurs, such as the throwing of a C++
+exception or the loading of a library. As with watchpoints, you use a
+different command to set a catchpoint (@pxref{Set Catchpoints, ,Setting
+catchpoints}), but aside from that, you can manage a catchpoint like any
+other breakpoint. (To stop when your program receives a signal, use the
+@code{handle} command; @pxref{Signals, ,Signals}.)
+
@cindex breakpoint numbers
@cindex numbers for breakpoints
-@value{GDBN} assigns a number to each breakpoint or watchpoint when you
-create it; these numbers are successive integers starting with one. In
-many of the commands for controlling various features of breakpoints you
-use the breakpoint number to say which breakpoint you want to change.
-Each breakpoint may be @dfn{enabled} or @dfn{disabled}; if disabled, it has
-no effect on your program until you enable it again.
+@value{GDBN} assigns a number to each breakpoint, watchpoint, or
+catchpoint when you create it; these numbers are successive integers
+starting with one. In many of the commands for controlling various
+features of breakpoints you use the breakpoint number to say which
+breakpoint you want to change. Each breakpoint may be @dfn{enabled} or
+@dfn{disabled}; if disabled, it has no effect on your program until you
+enable it again.
@menu
* Set Breaks:: Setting breakpoints
* Set Watchpoints:: Setting watchpoints
-@ifclear CONLY
-* Exception Handling:: Breakpoints and exceptions
-@end ifclear
-
+* Set Catchpoints:: Setting catchpoints
* Delete Breaks:: Deleting breakpoints
* Disabling:: Disabling breakpoints
* Conditions:: Break conditions
@ifclear CONLY
* Breakpoint Menus:: Breakpoint menus
@end ifclear
-@ifclear BARETARGET
-* Error in Breakpoints:: ``Cannot insert breakpoints''
-@end ifclear
+
+@c @ifclear BARETARGET
+@c * Error in Breakpoints:: ``Cannot insert breakpoints''
+@c @end ifclear
@end menu
-@node Set Breaks
+@node Set Breaks, Set Watchpoints, Breakpoints, Breakpoints
@subsection Setting breakpoints
@c FIXME LMB what does GDB do if no code on line of breakpt?
@cindex latest breakpoint
Breakpoints are set with the @code{break} command (abbreviated
@code{b}). The debugger convenience variable @samp{$bpnum} records the
-number of the beakpoint you've set most recently; see @ref{Convenience
+number of the breakpoints you've set most recently; see @ref{Convenience
Vars,, Convenience variables}, for a discussion of what you can do with
convenience variables.
above (or no argument) specifying where to break. @xref{Conditions,
,Break conditions}, for more information on breakpoint conditions.
-@item tbreak @var{args}
@kindex tbreak
+@item tbreak @var{args}
Set a breakpoint enabled only for one stop. @var{args} are the
same as for the @code{break} command, and the breakpoint is set in the same
-way, but the breakpoint is automatically disabled after the first time your
+way, but the breakpoint is automatically deleted after the first time your
program stops there. @xref{Disabling, ,Disabling breakpoints}.
-@item rbreak @var{regex}
+@ifclear HPPA
+@kindex hbreak
+@item hbreak @var{args}
+Set a hardware-assisted breakpoint. @var{args} are the same as for the
+@code{break} command and the breakpoint is set in the same way, but the
+breakpoint requires hardware support and some target hardware may not
+have this support. The main purpose of this is EPROM/ROM code
+debugging, so you can set a breakpoint at an instruction without
+changing the instruction. This can be used with the new trap-generation
+provided by SPARClite DSU. DSU will generate traps when a program accesses
+some data or instruction address that is assigned to the debug registers.
+However the hardware breakpoint registers can only take two data breakpoints,
+and @value{GDBN} will reject this command if more than two are used.
+Delete or disable usused hardware breakpoints before setting
+new ones. @xref{Conditions, ,Break conditions}.
+
+@kindex thbreak
+@item thbreak @var{args}
+Set a hardware-assisted breakpoint enabled only for one stop. @var{args}
+are the same as for the @code{hbreak} command and the breakpoint is set in
+the same way. However, like the @code{tbreak} command,
+the breakpoint is automatically deleted after the
+first time your program stops there. Also, like the @code{hbreak}
+command, the breakpoint requires hardware support and some target hardware
+may not have this support. @xref{Disabling, ,Disabling breakpoints}.
+Also @xref{Conditions, ,Break conditions}.
+@end ifclear
+
@kindex rbreak
@cindex regular expression
+@item rbreak @var{regex}
@c FIXME what kind of regexp?
Set breakpoints on all functions matching the regular expression
@var{regex}. This command
@item info breakpoints @r{[}@var{n}@r{]}
@itemx info break @r{[}@var{n}@r{]}
@itemx info watchpoints @r{[}@var{n}@r{]}
-Print a table of all breakpoints and watchpoints set and not
-deleted, with the following columns for each breakpoint:
+Print a table of all breakpoints, watchpoints, and catchpoints set and
+not deleted, with the following columns for each breakpoint:
@table @emph
@item Breakpoint Numbers
@item Type
-Breakpoint or watchpoint.
+Breakpoint, watchpoint, or catchpoint.
@item Disposition
Whether the breakpoint is marked to be disabled or deleted when hit.
@item Enabled or Disabled
convenience variable @code{$_} and the default examining-address for
the @code{x} command are set to the address of the last breakpoint
listed (@pxref{Memory, ,Examining memory}).
+
+@noindent
+@code{info break} displays a count of the number of times the breakpoint
+has been hit. This is especially useful in conjunction with the
+@code{ignore} command. You can ignore a large number of breakpoint
+hits, look at the breakpoint info to see how many times the breakpoint
+was hit, and then run again, ignoring one less than that number. This
+will get you quickly to the last hit of that breakpoint.
@end table
@value{GDBN} allows you to set any number of breakpoints at the same place in
@item finish
Temporary internal breakpoint used by the @value{GDBN} @code{finish} command.
-@end table
+@ifset HPPA
+@item shlib events
+Shared library events.
+@end ifset
+@end table
@end table
-@node Set Watchpoints
+@node Set Watchpoints, Set Catchpoints, Set Breaks, Breakpoints
@subsection Setting watchpoints
-@cindex setting watchpoints
+@cindex setting watchpoints
You can use a watchpoint to stop execution whenever the value of an
-expression changes, without having to predict a particular place
-where this may happen.
+expression changes, without having to predict a particular place where
+this may happen.
+@ifclear HPPA
Watchpoints currently execute two orders of magnitude more slowly than
other breakpoints, but this can be well worth it to catch errors where
you have no clue what part of your program is the culprit.
+@end ifclear
+@c FIXME - did Stan mean to @ignore this out?
@ignore
-@c this "future releases" promise has been in too long, is getting
-@c embarrassing. But...
-@c FIXME: in future updates, check whether hardware watchpoints in on any
-@c platforms yet. As of 26jan94, they're very close on HPPA running
-@c Berkeley and on Irix 4.
Some processors provide special hardware to support watchpoint
-evaluation; future releases of @value{GDBN} will use such hardware if it
-is available.
+evaluation; @value{GDBN} will use such hardware if it is available,
+and if the support code has been added for that configuration.
@end ignore
@table @code
@kindex watch
@item watch @var{expr}
-Set a watchpoint for an expression.
+Set a watchpoint for an expression. @value{GDBN} will break when @var{expr}
+is written into by the program and its value changes.
+@ifclear HPPA
+This can be used with the new trap-generation provided by
+SPARClite DSU. DSU will generate traps when a program accesses
+some data or instruction address that is assigned to the debug registers.
+For the data addresses, DSU facilitates the @code{watch} command.
+However the hardware breakpoint registers can only take two data watchpoints,
+and both watchpoints must be the same kind. For example, you can set two
+watchpoints with @code{watch} commands, two with @code{rwatch}
+commands, @strong{or} two with @code{awatch} commands, but you cannot set one
+watchpoint with one command and the other with a different command.
+@value{GDBN} will reject the command if you try to mix watchpoints.
+Delete or disable unused watchpoint commands before setting new ones.
+
+@kindex rwatch
+@item rwatch @var{expr}
+Set a watchpoint that will break when watch @var{expr} is read by the program.
+If you use both watchpoints, both must be set with the @code{rwatch}
+command.
+
+@kindex awatch
+@item awatch @var{expr}
+Set a watchpoint that will break when @var{args} is read and written into
+by the program. If you use both watchpoints, both must be set with the
+@code{awatch} command.
+@end ifclear
@kindex info watchpoints
@item info watchpoints
-This command prints a list of watchpoints and breakpoints; it is the
-same as @code{info break}.
+This command prints a list of watchpoints, breakpoints, and catchpoints;
+it is the same as @code{info break}.
@end table
+@ifset HPPA
+@value{GDBN} sets a @dfn{hardware watchpoint} if possible. Hardware
+watchpoints execute very quickly, and the debugger reports a change in
+value at the exact instruction where the change occurs. If @value{GDBN}
+cannot set a hardware watchpoint, it sets a software watchpoint, which
+executes more slowly and reports the change in value at the next
+statement, not the instruction, after the change occurs.
+
+When you issue the @code{watch} command, @value{GDBN} reports
+
+@example
+Hardware watchpoint @var{num}: @var{expr}
+@end example
+
+@noindent
+if it was able to set a hardware watchpoint.
+@end ifset
+
+If you call a function interactively using @code{print} or @code{call},
+any watchpoints you have set will be inactive until GDB reaches another
+kind of breakpoint or the call completes.
+
@ifclear BARETARGET
@quotation
@cindex watchpoints and threads
@cindex threads and watchpoints
-@emph{Warning:} in multi-thread programs, watchpoints have only limited
+@ifclear HPPA
+@emph{Warning:} In multi-thread programs, watchpoints have only limited
usefulness. With the current watchpoint implementation, @value{GDBN}
can only watch the value of an expression @emph{in a single thread}. If
you are confident that the expression can only change due to the current
can become current), then you can use watchpoints as usual. However,
@value{GDBN} may not notice when a non-current thread's activity changes
the expression.
+@end ifclear
+@ifset HPPA
+@emph{Warning:} In multi-thread programs, software watchpoints have only
+limited usefulness. If @value{GDBN} creates a software watchpoint, it
+can only watch the value of an expression @emph{in a single thread}. If
+you are confident that the expression can only change due to the current
+thread's activity (and if you are also confident that no other thread
+can become current), then you can use software watchpoints as usual.
+However, @value{GDBN} may not notice when a non-current thread's
+activity changes the expression. (Hardware watchpoints, in contrast,
+watch an expression in all threads.)
+@end ifset
@end quotation
@end ifclear
-@ifclear CONLY
-@node Exception Handling
-@subsection Breakpoints and exceptions
+@node Set Catchpoints, Delete Breaks, Set Watchpoints, Breakpoints
+@subsection Setting catchpoints
+@cindex catchpoints
@cindex exception handlers
+@cindex event handling
-Some languages, such as GNU C++, implement exception handling. You can
-use @value{GDBN} to examine what caused your program to raise an exception,
-and to list the exceptions your program is prepared to handle at a
-given point in time.
+You can use @dfn{catchpoints} to cause the debugger to stop for certain
+kinds of program events, such as C++ exceptions or the loading of a
+shared library. Use the @code{catch} command to set a catchpoint.
@table @code
-@item catch @var{exceptions}
@kindex catch
-You can set breakpoints at active exception handlers by using the
-@code{catch} command. @var{exceptions} is a list of names of exceptions
-to catch.
+@item catch @var{event}
+Stop when @var{event} occurs. @var{event} can be any of the following:
+@table @code
+@item throw
+@kindex catch throw
+The throwing of a C++ exception.
+
+@item catch
+@kindex catch catch
+The catching of a C++ exception.
+
+@item exec
+@kindex catch exec
+A call to @code{exec}.
+
+@item fork
+@kindex catch fork
+A call to @code{fork}.
+
+@item vfork
+@kindex catch vfork
+A call to @code{vfork}.
+
+@item load
+@itemx load @var{libname}
+@kindex catch load
+The dynamic loading of any shared library, or the loading of the library
+@var{libname}.
+
+@item unload
+@itemx unload @var{libname}
+@kindex catch unload
+The unloading of any dynamically loaded shared library, or the unloading
+of the library @var{libname}.
+@end table
+
+@item tcatch @var{event}
+Set a catchpoint that is enabled only for one stop. The catchpoint is
+automatically deleted after the first time the event is caught.
+
@end table
-You can use @code{info catch} to list active exception handlers.
-@xref{Frame Info, ,Information about a frame}.
+Use the @code{info break} command to list the current catchpoints.
-There are currently some limitations to exception handling in @value{GDBN}:
+There are currently some limitations to C++ exception handling
+(@code{catch throw} and @code{catch catch}) in @value{GDBN}:
@itemize @bullet
@item
If you call a function interactively, @value{GDBN} normally returns
control to you when the function has finished executing. If the call
raises an exception, however, the call may bypass the mechanism that
-returns control to you and cause your program to simply continue
-running until it hits a breakpoint, catches a signal that @value{GDBN} is
-listening for, or exits.
+returns control to you and cause your program either to abort or to
+simply continue running until it hits a breakpoint, catches a signal
+that @value{GDBN} is listening for, or exits. This is the case even if
+you set a catchpoint for the exception; catchpoints on exceptions are
+disabled within interactive calls.
@item
You cannot raise an exception interactively.
out where the exception was raised.
To stop just before an exception handler is called, you need some
-knowledge of the implementation. In the case of GNU C++, exceptions are
+knowledge of the implementation. In the case of @sc{gnu} C++, exceptions are
raised by calling a library function named @code{__raise_exception}
which has the following ANSI C interface:
a specific exception is raised. You can use multiple conditional
breakpoints to stop your program when any of a number of exceptions are
raised.
-@end ifclear
-@node Delete Breaks
+
+@node Delete Breaks, Disabling, Set Catchpoints, Breakpoints
@subsection Deleting breakpoints
-@cindex clearing breakpoints, watchpoints
-@cindex deleting breakpoints, watchpoints
-It is often necessary to eliminate a breakpoint or watchpoint once it
-has done its job and you no longer want your program to stop there. This
-is called @dfn{deleting} the breakpoint. A breakpoint that has been
-deleted no longer exists; it is forgotten.
+@cindex clearing breakpoints, watchpoints, catchpoints
+@cindex deleting breakpoints, watchpoints, catchpoints
+It is often necessary to eliminate a breakpoint, watchpoint, or
+catchpoint once it has done its job and you no longer want your program
+to stop there. This is called @dfn{deleting} the breakpoint. A
+breakpoint that has been deleted no longer exists; it is forgotten.
With the @code{clear} command you can delete breakpoints according to
where they are in your program. With the @code{delete} command you can
-delete individual breakpoints or watchpoints by specifying their
-breakpoint numbers.
+delete individual breakpoints, watchpoints, or catchpoints by specifying
+their breakpoint numbers.
It is not necessary to delete a breakpoint to proceed past it. @value{GDBN}
automatically ignores breakpoints on the first instruction to be executed
when you continue execution without changing the execution address.
@table @code
-@item clear
@kindex clear
+@item clear
Delete any breakpoints at the next instruction to be executed in the
selected stack frame (@pxref{Selection, ,Selecting a frame}). When
the innermost frame is selected, this is a good way to delete a
@itemx clear @var{filename}:@var{linenum}
Delete any breakpoints set at or within the code of the specified line.
-@item delete @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
@cindex delete breakpoints
@kindex delete
@kindex d
-Delete the breakpoints or watchpoints of the numbers specified as
-arguments. If no argument is specified, delete all breakpoints (@value{GDBN}
-asks confirmation, unless you have @code{set confirm off}). You
-can abbreviate this command as @code{d}.
+@item delete @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
+Delete the breakpoints, watchpoints, or catchpoints of the numbers
+specified as arguments. If no argument is specified, delete all
+breakpoints (@value{GDBN} asks confirmation, unless you have @code{set
+confirm off}). You can abbreviate this command as @code{d}.
@end table
-@node Disabling
+@node Disabling, Conditions, Delete Breaks, Breakpoints
@subsection Disabling breakpoints
-@cindex disabled breakpoints
-@cindex enabled breakpoints
-Rather than deleting a breakpoint or watchpoint, you might prefer to
-@dfn{disable} it. This makes the breakpoint inoperative as if it had
-been deleted, but remembers the information on the breakpoint so that
-you can @dfn{enable} it again later.
+@kindex disable breakpoints
+@kindex enable breakpoints
+Rather than deleting a breakpoint, watchpoint, or catchpoint, you might
+prefer to @dfn{disable} it. This makes the breakpoint inoperative as if
+it had been deleted, but remembers the information on the breakpoint so
+that you can @dfn{enable} it again later.
-You disable and enable breakpoints and watchpoints with the
-@code{enable} and @code{disable} commands, optionally specifying one or
-more breakpoint numbers as arguments. Use @code{info break} or
-@code{info watch} to print a list of breakpoints or watchpoints if you
-do not know which numbers to use.
+You disable and enable breakpoints, watchpoints, and catchpoints with
+the @code{enable} and @code{disable} commands, optionally specifying one
+or more breakpoint numbers as arguments. Use @code{info break} or
+@code{info watch} to print a list of breakpoints, watchpoints, and
+catchpoints if you do not know which numbers to use.
-A breakpoint or watchpoint can have any of four different states of
-enablement:
+A breakpoint, watchpoint, or catchpoint can have any of four different
+states of enablement:
@itemize @bullet
@item
immediately after it does so it is deleted permanently.
@end itemize
-You can use the following commands to enable or disable breakpoints and
-watchpoints:
+You can use the following commands to enable or disable breakpoints,
+watchpoints, and catchpoints:
@table @code
-@item disable @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
@kindex disable breakpoints
@kindex disable
@kindex dis
+@item disable @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
Disable the specified breakpoints---or all breakpoints, if none are
listed. A disabled breakpoint has no effect but is not forgotten. All
options such as ignore-counts, conditions and commands are remembered in
case the breakpoint is enabled again later. You may abbreviate
@code{disable} as @code{dis}.
-@item enable @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
@kindex enable breakpoints
@kindex enable
+@item enable @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
Enable the specified breakpoints (or all defined breakpoints). They
become effective once again in stopping your program.
deletes any of these breakpoints as soon as your program stops there.
@end table
-Save for a breakpoint set with @code{tbreak} (@pxref{Set Breaks,
+Except for a breakpoint set with @code{tbreak} (@pxref{Set Breaks,
,Setting breakpoints}), breakpoints that you set are initially enabled;
subsequently, they become disabled or enabled only when you use one of
the commands above. (The command @code{until} can set and delete a
breakpoints; see @ref{Continuing and Stepping, ,Continuing and
stepping}.)
-@node Conditions
+@node Conditions, Break Commands, Disabling, Breakpoints
@subsection Break conditions
@cindex conditional breakpoints
@cindex breakpoint conditions
Break conditions can be specified when a breakpoint is set, by using
@samp{if} in the arguments to the @code{break} command. @xref{Set
Breaks, ,Setting breakpoints}. They can also be changed at any time
-with the @code{condition} command. The @code{watch} command does not
-recognize the @code{if} keyword; @code{condition} is the only way to
-impose a further condition on a watchpoint.
+with the @code{condition} command.
+@ifclear HPPA
+@c The watch command now seems to recognize the if keyword.
+@c catch doesn't, though.
+The @code{watch} command does not recognize the @code{if} keyword;
+@code{condition} is the only way to impose a further condition on a
+watchpoint.
+@end ifclear
+@ifset HPPA
+You can also use the @code{if} keyword with the @code{watch} command.
+The @code{catch} command does not recognize the @code{if} keyword;
+@code{condition} is the only way to impose a further condition on a
+catchpoint.
+@end ifset
@table @code
-@item condition @var{bnum} @var{expression}
@kindex condition
-Specify @var{expression} as the break condition for breakpoint or
-watchpoint number @var{bnum}. After you set a condition, breakpoint
-@var{bnum} stops your program only if the value of @var{expression} is
-true (nonzero, in C). When you use @code{condition}, @value{GDBN}
-checks @var{expression} immediately for syntactic correctness, and to
-determine whether symbols in it have referents in the context of your
-breakpoint.
+@item condition @var{bnum} @var{expression}
+Specify @var{expression} as the break condition for breakpoint,
+watchpoint, or catchpoint number @var{bnum}. After you set a condition,
+breakpoint @var{bnum} stops your program only if the value of
+@var{expression} is true (nonzero, in C). When you use
+@code{condition}, @value{GDBN} checks @var{expression} immediately for
+syntactic correctness, and to determine whether symbols in it have
+referents in the context of your breakpoint.
@c FIXME so what does GDB do if there is no referent? Moreover, what
@c about watchpoints?
@value{GDBN} does
your program reaches it.
@table @code
-@item ignore @var{bnum} @var{count}
@kindex ignore
+@item ignore @var{bnum} @var{count}
Set the ignore count of breakpoint number @var{bnum} to @var{count}.
The next @var{count} times the breakpoint is reached, your program's
execution does not stop; other than to decrement the ignore count, @value{GDBN}
variables}.
@end table
-@node Break Commands
+Ignore counts apply to breakpoints, watchpoints, and catchpoints.
+
+
+@node Break Commands, Breakpoint Menus, Conditions, Breakpoints
@subsection Breakpoint command lists
@cindex breakpoint commands
-You can give any breakpoint (or watchpoint) a series of commands to
-execute when your program stops due to that breakpoint. For example, you
-might want to print the values of certain expressions, or enable other
-breakpoints.
+You can give any breakpoint (or watchpoint or catchpoint) a series of
+commands to execute when your program stops due to that breakpoint. For
+example, you might want to print the values of certain expressions, or
+enable other breakpoints.
@table @code
+@kindex commands
+@kindex end
@item commands @r{[}@var{bnum}@r{]}
@itemx @dots{} @var{command-list} @dots{}
@itemx end
-@kindex commands
-@kindex end
Specify a list of commands for breakpoint number @var{bnum}. The commands
themselves appear on the following lines. Type a line containing just
@code{end} to terminate the commands.
follow it immediately with @code{end}; that is, give no commands.
With no @var{bnum} argument, @code{commands} refers to the last
-breakpoint or watchpoint set (not to the breakpoint most recently
-encountered).
+breakpoint, watchpoint, or catchpoint set (not to the breakpoint most
+recently encountered).
@end table
Pressing @key{RET} as a means of repeating the last @value{GDBN} command is
@end example
@ifclear CONLY
-@node Breakpoint Menus
+@node Breakpoint Menus, , Break Commands, Breakpoints
@subsection Breakpoint menus
@cindex overloading
@cindex symbol overloading
@c FIXME! This is likely to change to show arg type lists, at least
@smallexample
+@group
(@value{GDBP}) b String::after
[0] cancel
[1] all
Use the "delete" command to delete unwanted
breakpoints.
(@value{GDBP})
+@end group
@end smallexample
@end ifclear
-@ifclear BARETARGET
-@node Error in Breakpoints
-@subsection ``Cannot insert breakpoints''
-
-@c FIXME: "cannot insert breakpoints" error, v unclear.
-@c Q in pending mail to Gilmore. ---pesch@cygnus.com, 26mar91
-@c some light may be shed by looking at instances of
-@c ONE_PROCESS_WRITETEXT. But error message seems possible otherwise
-@c too. pesch, 20sep91
-Under some operating systems, breakpoints cannot be used in a program if
-any other process is running that program. In this situation,
-attempting to run or continue a program with a breakpoint causes @value{GDBN}
-to stop the other process.
-
-When this happens, you have three ways to proceed:
-
-@enumerate
-@item
-Remove or disable the breakpoints, then continue.
-
-@item
-Suspend @value{GDBN}, and copy the file containing your program to a new name.
-Resume @value{GDBN} and use the @code{exec-file} command to specify that @value{GDBN}
-should run your program under that name. Then start your program again.
-
-@c FIXME: RMS commented here "Show example". Maybe when someone
-@c explains the first FIXME: in this section...
-
-@item
-Relink your program so that the text segment is nonsharable, using the
-linker option @samp{-N}. The operating system limitation may not apply
-to nonsharable executables.
-@end enumerate
-@end ifclear
-
-@node Continuing and Stepping
+@c @ifclear BARETARGET
+@c @node Error in Breakpoints
+@c @subsection ``Cannot insert breakpoints''
+@c
+@c FIXME!! 14/6/95 Is there a real example of this? Let's use it.
+@c
+@c Under some operating systems, breakpoints cannot be used in a program if
+@c any other process is running that program. In this situation,
+@c attempting to run or continue a program with a breakpoint causes
+@c @value{GDBN} to stop the other process.
+@c
+@c When this happens, you have three ways to proceed:
+@c
+@c @enumerate
+@c @item
+@c Remove or disable the breakpoints, then continue.
+@c
+@c @item
+@c Suspend @value{GDBN}, and copy the file containing your program to a new
+@c name. Resume @value{GDBN} and use the @code{exec-file} command to specify
+@c that @value{GDBN} should run your program under that name.
+@c Then start your program again.
+@c
+@c @item
+@c Relink your program so that the text segment is nonsharable, using the
+@c linker option @samp{-N}. The operating system limitation may not apply
+@c to nonsharable executables.
+@c @end enumerate
+@c @end ifclear
+
+@node Continuing and Stepping, Signals, Breakpoints, Stopping
@section Continuing and stepping
@cindex stepping
@end ifclear
@table @code
-@item continue @r{[}@var{ignore-count}@r{]}
-@itemx c @r{[}@var{ignore-count}@r{]}
-@itemx fg @r{[}@var{ignore-count}@r{]}
@kindex continue
@kindex c
@kindex fg
+@item continue @r{[}@var{ignore-count}@r{]}
+@itemx c @r{[}@var{ignore-count}@r{]}
+@itemx fg @r{[}@var{ignore-count}@r{]}
Resume program execution, at the address where your program last stopped;
any breakpoints set at that address are bypassed. The optional argument
@var{ignore-count} allows you to specify a further number of times to
different address}) to go to an arbitrary location in your program.
A typical technique for using stepping is to set a breakpoint
-@ifclear CONLY
-(@pxref{Breakpoints, ,Breakpoints; watchpoints; and exceptions})
-@end ifclear
-@ifset CONLY
-(@pxref{Breakpoints, ,Breakpoints and watchpoints})
-@end ifset
-at the
-beginning of the function or the section of your program where a
-problem is believed to lie, run your program until it stops at that
-breakpoint, and then step through the suspect area, examining the
-variables that are interesting, until you see the problem happen.
+(@pxref{Breakpoints, ,Breakpoints; watchpoints; and catchpoints}) at the
+beginning of the function or the section of your program where a problem
+is believed to lie, run your program until it stops at that breakpoint,
+and then step through the suspect area, examining the variables that are
+interesting, until you see the problem happen.
@table @code
-@item step
@kindex step
@kindex s
+@item step
Continue running your program until control reaches a different source
line, then stop it and return control to @value{GDBN}. This command is
abbreviated @code{s}.
below.
@end quotation
+The @code{step} command now only stops at the first instruction of a
+source line. This prevents the multiple stops that used to occur in
+switch statements, for loops, etc. @code{step} continues to stop if a
+function that has debugging information is called within the line.
+
+Also, the @code{step} command now only enters a subroutine if there is line
+number information for the subroutine. Otherwise it acts like the
+@code{next} command. This avoids problems when using @code{cc -gl}
+on MIPS machines. Previously, @code{step} entered subroutines if there
+was any debugging information about the routine.
+
@item step @var{count}
Continue running as in @code{step}, but do so @var{count} times. If a
breakpoint is reached,
@end ifclear
stepping stops right away.
-@item next @r{[}@var{count}@r{]}
@kindex next
@kindex n
+@item next @r{[}@var{count}@r{]}
Continue to the next source line in the current (innermost) stack frame.
-Similar to @code{step}, but any function calls appearing within the line
+This is similar to @code{step}, but function calls that appear within the line
of code are executed without stopping. Execution stops when control
-reaches a different line of code at the stack level which was executing
-when the @code{next} command was given. This command is abbreviated
+reaches a different line of code at the original stack level that was
+executing when you gave the @code{next} command. This command is abbreviated
@code{n}.
An argument @var{count} is a repeat count, as for @code{step}.
-@code{next} within a function that lacks debugging information acts like
-@code{step}, but any function calls appearing within the code of the
-function are executed without stopping.
-@item finish
+@c FIX ME!! Do we delete this, or is there a way it fits in with
+@c the following paragraph? --- Vctoria
+@c
+@c @code{next} within a function that lacks debugging information acts like
+@c @code{step}, but any function calls appearing within the code of the
+@c function are executed without stopping.
+
+The @code{next} command now only stops at the first instruction of a
+source line. This prevents the multiple stops that used to occur in
+switch statements, for loops, etc.
+
@kindex finish
+@item finish
Continue running until just after function in the selected stack frame
returns. Print the returned value (if any).
Contrast this with the @code{return} command (@pxref{Returning,
,Returning from a function}).
-@item until
@kindex until
-@itemx u
@kindex u
+@item until
+@itemx u
Continue running until a source line past the current line, in the
current stack frame, is reached. This command is used to avoid single
stepping through a loop more than once. It is like the @code{next}
,Setting breakpoints}). This form of the command uses breakpoints,
and hence is quicker than @code{until} without an argument.
-@item stepi
-@itemx si
@kindex stepi
@kindex si
+@item stepi
+@itemx si
Execute one machine instruction, then stop and return to the debugger.
It is often useful to do @samp{display/i $pc} when stepping by machine
An argument is a repeat count, as in @code{step}.
@need 750
-@item nexti
-@itemx ni
@kindex nexti
@kindex ni
+@item nexti
+@itemx ni
Execute one machine instruction, but if it is a function call,
proceed until the function returns.
@end table
@ifset POSIX
-@node Signals
+@node Signals, Thread Stops, Continuing and Stepping, Stopping
@section Signals
@cindex signals
You can change these settings with the @code{handle} command.
@table @code
-@item info signals
@kindex info signals
+@item info signals
Print a table of all the kinds of signals and how @value{GDBN} has been told to
handle each one. You can use this to see the signal numbers of all
the defined types of signals.
-@item handle @var{signal} @var{keywords}@dots{}
+@code{info handle} is the new alias for @code{info signals}.
+
@kindex handle
-Change the way @value{GDBN} handles signal @var{signal}. @var{signal} can be the
-number of a signal or its name (with or without the @samp{SIG} at the
+@item handle @var{signal} @var{keywords}@dots{}
+Change the way @value{GDBN} handles signal @var{signal}. @var{signal} can
+be the number of a signal or its name (with or without the @samp{SIG} at the
beginning). The @var{keywords} say what change to make.
@end table
@end ifset
@ifclear BARETARGET
-@node Thread Stops
+@node Thread Stops, , Signals, Stopping
@section Stopping and starting multi-thread programs
When your program has multiple threads (@pxref{Threads,, Debugging
@kindex break @dots{} thread @var{threadno}
@item break @var{linespec} thread @var{threadno}
@itemx break @var{linespec} thread @var{threadno} if @dots{}
+@var{linespec} specifies source lines; there are several ways of
+writing them, but the effect is always to specify some source line.
+
Use the qualifier @samp{thread @var{threadno}} with a breakpoint command
to specify that you only want @value{GDBN} to stop the program when a
particular thread reaches this breakpoint. @var{threadno} is one of the
@smallexample
(gdb) break frik.c:13 thread 28 if bartab > lim
@end smallexample
+
@end table
@cindex stopped threads
first thread completes whatever you requested.
@end ifclear
-@node Stack
+@node Stack, Source, Stopping, Top
@chapter Examining the Stack
When your program has stopped, the first thing you need to know is where it
stopped and how it got there.
@cindex call stack
-Each time your program performs a function call, the information about
-where in your program the call was made from is saved in a block of data
-called a @dfn{stack frame}. The frame also contains the arguments of the
-call and the local variables of the function that was called. All the
-stack frames are allocated in a region of memory called the @dfn{call
+Each time your program performs a function call, information about the call
+is generated.
+That information includes the location of the call in your program,
+the arguments of the call,
+and the local variables of the function being called.
+The information is saved in a block of data called a @dfn{stack frame}.
+The stack frames are allocated in a region of memory called the @dfn{call
stack}.
When your program stops, the @value{GDBN} commands for examining the
particular, whenever you ask @value{GDBN} for the value of a variable in
your program, the value is found in the selected frame. There are
special @value{GDBN} commands to select whichever frame you are
-interested in.
+interested in. @xref{Selection, ,Selecting a frame}.
When your program stops, @value{GDBN} automatically selects the
-currently executing frame and describes it briefly as the @code{frame}
-command does (@pxref{Frame Info, ,Information about a frame}).
+currently executing frame and describes it briefly, similar to the
+@code{frame} command (@pxref{Frame Info, ,Information about a frame}).
@menu
* Frames:: Stack frames
@ifset MIPS
* MIPS Stack:: MIPS machines and the function stack
@end ifset
+
@end menu
-@node Frames
+@node Frames, Backtrace, Stack, Stack
@section Stack frames
@cindex frame
@cindex frame pointer
Inside your program, stack frames are identified by their addresses. A
stack frame consists of many bytes, each of which has its own address; each
-kind of computer has a convention for choosing one of those bytes whose
+kind of computer has a convention for choosing one byte whose
address serves as the address of the frame. Usually this address is kept
in a register called the @dfn{frame pointer register} while execution is
going on in that frame.
correct tracing of the function call chain. However, @value{GDBN} has
no provision for frameless functions elsewhere in the stack.
-@node Backtrace
+@table @code
+@kindex frame
+@item frame @var{args}
+The @code{frame} command allows you to move from one stack frame to another,
+and to print the stack frame you select. @var{args} may be either the
+address of the frame or the stack frame number. Without an argument,
+@code{frame} prints the current stack frame.
+
+@kindex select-frame
+@item select-frame
+The @code{select-frame} command allows you to move from one stack frame
+to another without printing the frame. This is the silent version of
+@code{frame}.
+@end table
+
+@node Backtrace, Selection, Frames, Stack
@section Backtraces
+@cindex backtraces
+@cindex tracebacks
+@cindex stack traces
A backtrace is a summary of how your program got where it is. It shows one
line per frame, for many frames, starting with the currently executing
frame (frame zero), followed by its caller (frame one), and on up the
stack.
@table @code
-@item backtrace
-@itemx bt
@kindex backtrace
@kindex bt
+@item backtrace
+@itemx bt
Print a backtrace of the entire stack: one line per frame for all
frames in the stack.
value, indicating that your program has stopped at the beginning of the
code for line @code{993} of @code{builtin.c}.
-@node Selection
+@node Selection, Frame Info, Backtrace, Stack
@section Selecting a frame
Most commands for examining the stack and other data in your program work on
of the stack frame just selected.
@table @code
-@item frame @var{n}
-@itemx f @var{n}
@kindex frame
@kindex f
+@item frame @var{n}
+@itemx f @var{n}
Select frame number @var{n}. Recall that frame zero is the innermost
(currently executing) frame, frame one is the frame that called the
innermost one, and so on. The highest-numbered frame is the one for
switches between them.
@ifclear H8EXCLUSIVE
+@ifclear HPPA
On the SPARC architecture, @code{frame} needs two addresses to
select an arbitrary frame: a frame pointer and a stack pointer.
@c SETUP_ARBITRARY_FRAME in the tm-*.h files. The above is up to date
@c as of 27 Jan 1994.
@end ifclear
+@end ifclear
-@item up @var{n}
@kindex up
+@item up @var{n}
Move @var{n} frames up the stack. For positive numbers @var{n}, this
advances toward the outermost frame, to higher frame numbers, to frames
that have existed longer. @var{n} defaults to one.
-@item down @var{n}
@kindex down
@kindex do
+@item down @var{n}
Move @var{n} frames down the stack. For positive numbers @var{n}, this
advances toward the innermost frame, to lower frame numbers, to frames
that were created more recently. @var{n} defaults to one. You may
@xref{List, ,Printing source lines}.
@table @code
-@item up-silently @var{n}
-@itemx down-silently @var{n}
@kindex down-silently
@kindex up-silently
+@item up-silently @var{n}
+@itemx down-silently @var{n}
These two commands are variants of @code{up} and @code{down},
respectively; they differ in that they do their work silently, without
causing display of the new frame. They are intended primarily for use
distracting.
@end table
-@node Frame Info
+@ifset MIPS
+@node Frame Info, MIPS Stack, Selection, Stack
@section Information about a frame
+@end ifset
+@ifclear MIPS
+@node Frame Info, , Selection, Stack
+@section Information about a frame
+@end ifclear
There are several other commands to print information about the selected
stack frame.
argument, this command is used to select a stack frame.
@xref{Selection, ,Selecting a frame}.
-@item info frame
-@itemx info f
@kindex info frame
@kindex info f
+@item info frame
+@itemx info f
This command prints a verbose description of the selected stack frame,
-including the address of the frame, the addresses of the next frame down
-(called by this frame) and the next frame up (caller of this frame), the
-language that the source code corresponding to this frame was written in,
-the address of the frame's arguments, the program counter saved in it
-(the address of execution in the caller frame), and which registers
-were saved in the frame. The verbose description is useful when
+including:
+
+@itemize @bullet
+@item
+the address of the frame
+@item
+the address of the next frame down (called by this frame)
+@item
+the address of the next frame up (caller of this frame)
+@item
+the language in which the source code corresponding to this frame is written
+@item
+the address of the frame's arguments
+@item
+the program counter saved in it (the address of execution in the caller frame)
+@item
+which registers were saved in the frame
+@end itemize
+
+@noindent The verbose description is useful when
something has gone wrong that has made the stack format fail to fit
the usual conventions.
architectures) that you specify in the @code{frame} command.
@xref{Selection, ,Selecting a frame}.
-@item info args
@kindex info args
+@item info args
Print the arguments of the selected frame, each on a separate line.
@item info locals
accessible at the point of execution of the selected frame.
@ifclear CONLY
-@item info catch
+@ifclear HPPA
@kindex info catch
@cindex catch exceptions
@cindex exception handlers
+@item info catch
Print a list of all the exception handlers that are active in the
current stack frame at the current point of execution. To see other
exception handlers, visit the associated frame (using the @code{up},
@code{down}, or @code{frame} commands); then type @code{info catch}.
-@xref{Exception Handling, ,Breakpoints and exceptions}.
+@xref{Set Catchpoints, , Setting catchpoints}.
+@end ifclear
@end ifclear
@end table
@ifset MIPS
-@node MIPS Stack
+@node MIPS Stack, , Frame Info, Stack
@section MIPS machines and the function stack
@cindex stack on MIPS
@value{GDBN} may be restricted to a slow serial line for this search)
you may want to limit the size of this search, using one of these
commands:
-@c FIXME! So what happens when GDB does *not* find the beginning of a
-@c function?
-@cindex @code{heuristic-fence-post} (MIPS)
@table @code
+@cindex @code{heuristic-fence-post} (MIPS)
@item set heuristic-fence-post @var{limit}
Restrict @value{GDBN} to examining at most @var{limit} bytes in its search
-for the beginning of a function. A value of @code{0} (the default)
-means there is no limit.
+for the beginning of a function. A value of @var{0} (the default)
+means there is no limit. However, except for @var{0}, the larger the
+limit the more bytes @code{heuristic-fence-post} must search and
+therefore the longer it takes to run.
@item show heuristic-fence-post
Display the current limit.
for debugging programs on MIPS processors.
@end ifset
-@node Source
+@node Source, Data, Stack, Top
@chapter Examining Source Files
@value{GDBN} can print parts of your program's source, since the debugging
source files by explicit command.
@ifclear DOSHOST
-If you use @value{GDBN} through its GNU Emacs interface, you may prefer to use
-Emacs facilities to view source; @pxref{Emacs, ,Using @value{GDBN} under GNU
-Emacs}.
+If you use @value{GDBN} through its @sc{gnu} Emacs interface, you may prefer
+to use
+Emacs facilities to view source; @pxref{Emacs, ,Using @value{GDBN} under @sc{gnu} Emacs}.
@end ifclear
@menu
* Machine Code:: Source and machine code
@end menu
-@node List
+@node List, Search, Source, Source
@section Printing source lines
@kindex list
@kindex l
To print lines from a source file, use the @code{list} command
-(abbreviated @code{l}). There are several ways to specify what part
-of the file you want to print.
+(abbreviated @code{l}). By default, ten lines are printed.
+There are several ways to specify what part of the file you want to print.
Here are the forms of the @code{list} command most commonly used:
the @code{list} command. You can change this using @code{set listsize}:
@table @code
-@item set listsize @var{count}
@kindex set listsize
+@item set listsize @var{count}
Make the @code{list} command display @var{count} source lines (unless
the @code{list} argument explicitly specifies some other number).
-@item show listsize
@kindex show listsize
+@item show listsize
Display the number of lines that @code{list} prints.
@end table
Specifies line @var{number} in the source file @var{filename}.
@item @var{function}
-@c FIXME: "of the open-brace" is C-centric. When we add other langs...
-Specifies the line of the open-brace that begins the body of the
-function @var{function}.
+Specifies the line that begins the body of the function @var{function}.
+For example: in C, this is the line with the open brace.
@item @var{filename}:@var{function}
Specifies the line of the open-brace that begins the body of the
@end table
@ifclear DOSHOST
-@node Search
+@node Search, Source Path, List, Source
@section Searching source files
@cindex searching
@kindex reverse-search
regular expression.
@table @code
-@item forward-search @var{regexp}
-@itemx search @var{regexp}
@kindex search
@kindex forward-search
+@item forward-search @var{regexp}
+@itemx search @var{regexp}
The command @samp{forward-search @var{regexp}} checks each line,
starting with the one following the last line listed, for a match for
-@var{regexp}. It lists the line that is found. You can use
+@var{regexp}. It lists the line that is found. You can use the
synonym @samp{search @var{regexp}} or abbreviate the command name as
@code{fo}.
@end table
@end ifclear
-@node Source Path
+@node Source Path, Machine Code, Search, Source
@section Specifying source directories
@cindex source path
each line is in the file.
@kindex directory
+@kindex dir
When you start @value{GDBN}, its source path is empty.
To add other directories, use the @code{directory} command.
@table @code
@item directory @var{dirname} @dots{}
+@item dir @var{dirname} @dots{}
Add directory @var{dirname} to the front of the source path. Several
directory names may be given to this command, separated by @samp{:} or
whitespace. You may specify a directory that is already in the source
directories in one command.
@end enumerate
-@node Machine Code
+@node Machine Code, , Source Path, Source
@section Source and machine code
You can use the command @code{info line} to map source lines to program
addresses (and vice versa), and the command @code{disassemble} to display
-a range of addresses as machine instructions.
+a range of addresses as machine instructions. When run under @sc{gnu} Emacs
+mode, the @code{info line} command now causes the arrow to point to the
+line specified. Also, @code{info line} prints addresses in symbolic form as
+well as hex.
@table @code
-@item info line @var{linespec}
@kindex info line
+@item info line @var{linespec}
Print the starting and ending addresses of the compiled code for
source line @var{linespec}. You can specify source lines in any of
the ways understood by the @code{list} command (@pxref{List, ,Printing
@table @code
@kindex disassemble
-@item disassemble
@cindex assembly instructions
@cindex instructions, assembly
@cindex machine instructions
@cindex listing machine instructions
+@item disassemble
This specialized command dumps a range of memory as machine
instructions. The default memory range is the function surrounding the
program counter of the selected frame. A single argument to this
@end table
@ifclear H8EXCLUSIVE
-We can use @code{disassemble} to inspect the object code
-range shown in the last @code{info line} example (the example
-shows SPARC machine instructions):
-
+The following example shows the disassembly of a range of addresses of
+HP PA-RISC 2.0 code:
@smallexample
-(@value{GDBP}) disas 0x63e4 0x6404
-Dump of assembler code from 0x63e4 to 0x6404:
-0x63e4 <builtin_init+5340>: ble 0x63f8 <builtin_init+5360>
-0x63e8 <builtin_init+5344>: sethi %hi(0x4c00), %o0
-0x63ec <builtin_init+5348>: ld [%i1+4], %o0
-0x63f0 <builtin_init+5352>: b 0x63fc <builtin_init+5364>
-0x63f4 <builtin_init+5356>: ld [%o0+4], %o0
-0x63f8 <builtin_init+5360>: or %o0, 0x1a4, %o0
-0x63fc <builtin_init+5364>: call 0x9288 <path_search>
-0x6400 <builtin_init+5368>: nop
+(@value{GDBP}) disas 0x32c4 0x32e4
+Dump of assembler code from 0x32c4 to 0x32e4:
+0x32c4 <main+204>: addil 0,dp
+0x32c8 <main+208>: ldw 0x22c(sr0,r1),r26
+0x32cc <main+212>: ldil 0x3000,r31
+0x32d0 <main+216>: ble 0x3f8(sr4,r31)
+0x32d4 <main+220>: ldo 0(r31),rp
+0x32d8 <main+224>: addil -0x800,dp
+0x32dc <main+228>: ldo 0x588(r1),r26
+0x32e0 <main+232>: ldil 0x3000,r31
End of assembler dump.
@end smallexample
@end ifclear
@end smallexample
@end ifset
-@node Data
+@table @code
+@kindex set assembly-language
+@cindex assembly instructions
+@cindex instructions, assembly
+@cindex machine instructions
+@cindex listing machine instructions
+@item set assembly-language @var{instruction-set}
+This command selects the instruction set to use when disassembling the program via the
+@code{disassemble} or @code{x/i} commands. It is useful for architectures that
+have more than one native instruction set.
+
+Currently it is only defined for the Intel x86 family. You can set @var{instruction-set}
+to either @code{i386} or @code{i8086}. The default is @code{i386}.
+@end table
+
+
+@node Data, Languages, Source, Top
@chapter Examining Data
@cindex printing data
@ifclear HAVE-FLOAT
* Floating Point Hardware:: Floating point hardware
@end ifclear
+
@end menu
-@node Expressions
+@node Expressions, Variables, Data, Data
@section Expressions
@cindex expressions
and string constants. It unfortunately does not include symbols defined
by preprocessor @code{#define} commands.
+@value{GDBN} now supports array constants in expressions input by
+the user. The syntax is @var{@{element, element@dots{}@}}. For example,
+you can now use the command @code{print @{1, 2, 3@}} to build up an array in
+memory that is malloc'd in the target program.
+
@ifclear CONLY
Because C is so widespread, most of the expressions shown in examples in
this manual are in C. @xref{Languages, , Using @value{GDBN} with Different
expressions regardless of your programming language.
Casts are supported in all languages, not just in C, because it is so
-useful to cast a number into a pointer so as to examine a structure
+useful to cast a number into a pointer in order to examine a structure
at that address in memory.
@c FIXME: casts supported---Mod2 true?
@end ifclear
-@value{GDBN} supports these operators in addition to those of programming
-languages:
+@value{GDBN} supports these operators, in addition to those common
+to programming languages:
@table @code
@item @@
@samp{::} allows you to specify a variable in terms of the file or
function where it is defined. @xref{Variables, ,Program variables}.
-@item @{@var{type}@} @var{addr}
@cindex @{@var{type}@}
@cindex type casting memory
@cindex memory, viewing as typed object
@cindex casts, to view memory
+@item @{@var{type}@} @var{addr}
Refers to an object of type @var{type} stored at address @var{addr} in
memory. @var{addr} may be any expression whose value is an integer or
pointer (but parentheses are required around binary operators, just as in
normally supposed to reside at @var{addr}.
@end table
-@node Variables
+@node Variables, Arrays, Expressions, Data
@section Program variables
The most common kind of expression to use is the name of a variable
in your program.
Variables in expressions are understood in the selected stack frame
-(@pxref{Selection, ,Selecting a frame}); they must either be global
-(or static) or be visible according to the scope rules of the
-programming language from the point of execution in that frame. This
-means that in the function
+(@pxref{Selection, ,Selecting a frame}); they must be either:
+
+@itemize @bullet
+@item
+global (or file-static)
+@end itemize
+
+@noindent or
+
+@itemize @bullet
+@item
+visible according to the scope rules of the
+programming language from the point of execution in that frame
+@end itemize
+
+@noindent This means that in the function
@example
foo (a)
scope, and just before exit.
@end quotation
You may see this problem when you are stepping by machine instructions.
-This is because on most machines, it takes more than one instruction to
+This is because, on most machines, it takes more than one instruction to
set up a stack frame (including local variable definitions); if you are
stepping by machine instructions, variables may appear to have the wrong
values until the stack frame is completely built. On exit, it usually
after you begin stepping through that group of instructions, local
variable definitions may be gone.
-@node Arrays
+@node Arrays, Output Formats, Variables, Data
@section Artificial arrays
@cindex artificial array
You can do this by referring to a contiguous span of memory as an
@dfn{artificial array}, using the binary operator @samp{@@}. The left
-operand of @samp{@@} should be the first element of the desired array,
-as an individual object. The right operand should be the desired length
+operand of @samp{@@} should be the first element of the desired array
+and be an individual object. The right operand should be the desired length
of the array. The result is an array value whose elements are all of
the type of the left argument. The first element is actually the left
argument; the second element comes from bytes of memory immediately
Artificial arrays most often appear in expressions via the value history
(@pxref{Value History, ,Value history}), after printing one out.
+Another way to create an artificial array is to use a cast.
+This re-interprets a value as if it were an array.
+The value need not be in memory:
+@example
+(@value{GDBP}) p/x (short[2])0x12345678
+$1 = @{0x1234, 0x5678@}
+@end example
+
+As a convenience, if you leave the array length out (as in
+@samp{(@var{type})[])@var{value}}) gdb calculates the size to fill
+the value (as @samp{sizeof(@var{value})/sizeof(@var{type})}:
+@example
+(@value{GDBP}) p/x (short[])0x12345678
+$2 = @{0x1234, 0x5678@}
+@end example
+
Sometimes the artificial array mechanism is not quite enough; in
moderately complex data structures, the elements of interest may not
actually be adjacent---for example, if you are interested in the values
@dots{}
@end example
-@node Output Formats
+@node Output Formats, Memory, Arrays, Data
@section Output formats
@cindex formatted output
you can use the @code{print} command with just a format and no
expression. For example, @samp{p/x} reprints the last value in hex.
-@node Memory
+@node Memory, Auto Display, Output Formats, Data
@section Examining memory
You can use the command @code{x} (for ``examine'') to examine memory in
@item @var{f}, the display format
The display format is one of the formats used by @code{print},
-or @samp{s} (null-terminated string) or @samp{i} (machine instruction).
-The default is @samp{x} (hexadecimal) initially, or the format from the
-last time you used either @code{x} or @code{print}.
+@samp{s} (null-terminated string), or @samp{i} (machine instruction).
+The default is @samp{x} (hexadecimal) initially.
+The default changes each time you use either @code{x} or @code{print}.
@item @var{u}, the unit size
The unit size is any of
are from the last memory unit printed; this is not the same as the last
address printed if several units were printed on the last line of output.
-@node Auto Display
+@node Auto Display, Print Settings, Memory, Data
@section Automatic display
@cindex automatic display
@cindex display of expressions
supported by @code{x}; otherwise it uses @code{print}.
@table @code
-@item display @var{exp}
@kindex display
+@item display @var{exp}
Add the expression @var{exp} to the list of expressions to display
each time your program stops. @xref{Expressions, ,Expressions}.
is a common name for the program counter; @pxref{Registers}).
@table @code
-@item undisplay @var{dnums}@dots{}
-@itemx delete display @var{dnums}@dots{}
@kindex delete display
@kindex undisplay
+@item undisplay @var{dnums}@dots{}
+@itemx delete display @var{dnums}@dots{}
Remove item numbers @var{dnums} from the list of expressions to display.
@code{undisplay} does not repeat if you press @key{RET} after using it.
(Otherwise you would just get the error @samp{No display number @dots{}}.)
-@item disable display @var{dnums}@dots{}
@kindex disable display
+@item disable display @var{dnums}@dots{}
Disable the display of item numbers @var{dnums}. A disabled display
item is not printed automatically, but is not forgotten. It may be
enabled again later.
-@item enable display @var{dnums}@dots{}
@kindex enable display
+@item enable display @var{dnums}@dots{}
Enable display of item numbers @var{dnums}. It becomes effective once
again in auto display of its expression, until you specify otherwise.
Display the current values of the expressions on the list, just as is
done when your program stops.
-@item info display
@kindex info display
+@item info display
Print the list of expressions previously set up to display
automatically, each one with its item number, but without showing the
values. This includes disabled expressions, which are marked as such.
automatically. The next time your program stops where @code{last_char}
is meaningful, you can enable the display expression once again.
-@node Print Settings
+@node Print Settings, Value History, Auto Display, Data
@section Print settings
@cindex format options
These settings are useful for debugging programs in any language:
@table @code
+@kindex set print address
@item set print address
@itemx set print address on
-@kindex set print address
@value{GDBN} prints memory addresses showing the location of stack
traces, structure values, pointer values, breakpoints, and so forth,
even when it also displays the contents of those addresses. The default
-is @code{on}. For example, this is what a stack frame display looks like, with
+is @code{on}. For example, this is what a stack frame display looks like with
@code{set print address on}:
@smallexample
@code{print address off}, you should get the same text for backtraces on
all machines---whether or not they involve pointer arguments.
-@item show print address
@kindex show print address
+@item show print address
Show whether or not addresses are to be printed.
@end table
When @value{GDBN} prints a symbolic address, it normally prints the
closest earlier symbol plus an offset. If that symbol does not uniquely
identify the address (for example, it is a name whose scope is a single
-source file), you may need to disambiguate. One way to do this is with
+source file), you may need to clarify. One way to do this is with
@code{info line}, for example @samp{info line *0x4537}. Alternately,
you can set @value{GDBN} to print the source file and line number when
it prints a symbolic address:
@table @code
-@item set print symbol-filename on
@kindex set print symbol-filename
+@item set print symbol-filename on
Tell @value{GDBN} to print the source file name and line number of a
symbol in the symbolic form of an address.
Do not print source file name and line number of a symbol. This is the
default.
-@item show print symbol-filename
@kindex show print symbol-filename
+@item show print symbol-filename
Show whether or not @value{GDBN} will print the source file name and
line number of a symbol in the symbolic form of an address.
@end table
printed is reasonably close to the closest earlier symbol:
@table @code
-@item set print max-symbolic-offset @var{max-offset}
@kindex set print max-symbolic-offset
+@item set print max-symbolic-offset @var{max-offset}
Tell @value{GDBN} to only display the symbolic form of an address if the
offset between the closest earlier symbol and the address is less than
-@var{max-offset}. The default is 0, which means to always print the
-symbolic form of an address, if any symbol precedes it.
+@var{max-offset}. The default is 0, which tells @value{GDBN}
+to always print the symbolic form of an address if any symbol precedes it.
-@item show print max-symbolic-offset
@kindex show print max-symbolic-offset
+@item show print max-symbolic-offset
Ask how large the maximum offset is that @value{GDBN} prints in a
symbolic address.
@end table
-Sometimes @value{GDBN} can tell you more about an address if it does an
-extensive search of its symbol information. The default is to provide
-a quick symbolic display that is usually correct, but which may not give
-the most useful answer when working in some object file formats. If
-you are not getting the information you need, try:
-
-@table @code
-@item set print fast-symbolic-addr off
-@kindex set print fast-symbolic-addr
-Search all symbol information when displaying an address symbolically.
-This setting may display more information about static variables, for
-example, but also takes longer.
-
-@item set print fast-symbolic-addr
-@item set print fast-symbolic-addr on
-Search only the ``minimal symbol information'' when displaying symbolic
-information about an address. This is the default.
-
-@item show print fast-symbolic-addr
-@kindex show print fast-symbolic-addr
-Ask whether @value{GDBN} is using a fast or slow method of printing
-symbolic address.
-@end table
-
@cindex wild pointer, interpreting
@cindex pointer, finding referent
If you have a pointer and you are not sure where it points, try
-@samp{set print symbol-filename on} and @samp{set print
-fast-symbolic-addr off}. Then you can determine the name and source
-file location of the variable where it points, using @samp{p/a
-@var{pointer}}. This interprets the address in symbolic form. For
-example, here @value{GDBN} shows that a variable @code{ptt} points at
-another variable @code{t}, defined in @file{hi2.c}:
+@samp{set print symbol-filename on}. Then you can determine the name
+and source file location of the variable where it points, using
+@samp{p/a @var{pointer}}. This interprets the address in symbolic form.
+For example, here @value{GDBN} shows that a variable @code{ptt} points
+at another variable @code{t}, defined in @file{hi2.c}:
@example
-(@value{GDBP}) set print fast-symbolic-addr off
(@value{GDBP}) set print symbol-filename on
(@value{GDBP}) p/a ptt
$4 = 0xe008 <t in hi2.c>
Other settings control how different kinds of objects are printed:
@table @code
+@kindex set print array
@item set print array
@itemx set print array on
-@kindex set print array
-Pretty-print arrays. This format is more convenient to read,
+Pretty print arrays. This format is more convenient to read,
but uses more space. The default is off.
@item set print array off
Return to compressed format for arrays.
-@item show print array
@kindex show print array
+@item show print array
Show whether compressed or pretty format is selected for displaying
arrays.
-@item set print elements @var{number-of-elements}
@kindex set print elements
+@item set print elements @var{number-of-elements}
+Set a limit on how many elements of an array @value{GDBN} will print.
If @value{GDBN} is printing a large array, it stops printing after it has
printed the number of elements set by the @code{set print elements} command.
This limit also applies to the display of strings.
-Setting the number of elements to zero means that the printing is unlimited.
+Setting @var{number-of-elements} to zero means that the printing is unlimited.
-@item show print elements
@kindex show print elements
-Display the number of elements of a large array that @value{GDBN} prints
-before losing patience.
+@item show print elements
+Display the number of elements of a large array that @value{GDBN} will print.
+If the number is 0, then the printing is unlimited.
+
+@kindex set print null-stop
+@item set print null-stop
+Cause @value{GDBN} to stop printing the characters of an array when the first
+@sc{NULL} is encountered. This is useful when large arrays actually
+contain only short strings.
-@item set print pretty on
@kindex set print pretty
-Cause @value{GDBN} to print structures in an indented format with one member per
-line, like this:
+@item set print pretty on
+Cause @value{GDBN} to print structures in an indented format with one member
+per line, like this:
@smallexample
@group
@noindent
This is the default format.
-@item show print pretty
@kindex show print pretty
+@item show print pretty
Show which format @value{GDBN} is using to print structures.
-@item set print sevenbit-strings on
@kindex set print sevenbit-strings
+@item set print sevenbit-strings on
Print using only seven-bit characters; if this option is set,
@value{GDBN} displays any eight-bit characters (in strings or
character values) using the notation @code{\}@var{nnn}. This setting is
Print full eight-bit characters. This allows the use of more
international character sets, and is the default.
-@item show print sevenbit-strings
@kindex show print sevenbit-strings
+@item show print sevenbit-strings
Show whether or not @value{GDBN} is printing only seven-bit characters.
-@item set print union on
@kindex set print union
-Tell @value{GDBN} to print unions which are contained in structures. This is the
-default setting.
+@item set print union on
+Tell @value{GDBN} to print unions which are contained in structures. This
+is the default setting.
@item set print union off
Tell @value{GDBN} not to print unions which are contained in structures.
-@item show print union
@kindex show print union
+@item show print union
Ask @value{GDBN} whether or not it will print unions which are contained in
structures.
These settings are of interest when debugging C++ programs:
@table @code
+@cindex demangling
+@kindex set print demangle
@item set print demangle
@itemx set print demangle on
-@kindex set print demangle
Print C++ names in their source form rather than in the encoded
(``mangled'') form passed to the assembler and linker for type-safe
linkage. The default is @samp{on}.
-@item show print demangle
@kindex show print demangle
+@item show print demangle
Show whether C++ names are printed in mangled or demangled form.
+@kindex set print asm-demangle
@item set print asm-demangle
@itemx set print asm-demangle on
-@kindex set print asm-demangle
Print C++ names in their source form rather than their mangled form, even
in assembler code printouts such as instruction disassemblies.
The default is off.
-@item show print asm-demangle
@kindex show print asm-demangle
+@item show print asm-demangle
Show whether C++ names in assembly listings are printed in mangled
or demangled form.
-@item set demangle-style @var{style}
@kindex set demangle-style
@cindex C++ symbol decoding style
@cindex symbol decoding style, C++
+@item set demangle-style @var{style}
Choose among several encoding schemes used by different compilers to
represent C++ names. The choices for @var{style} are currently:
Allow @value{GDBN} to choose a decoding style by inspecting your program.
@item gnu
-Decode based on the GNU C++ compiler (@code{g++}) encoding algorithm.
+Decode based on the @sc{gnu} C++ compiler (@code{g++}) encoding algorithm.
+@ifclear HPPA
+This is the default.
+@end ifclear
+
+@item hp
+Decode based on the HP ANSI C++ (@code{aCC}) encoding algorithm.
@item lucid
Decode based on the Lucid C++ compiler (@code{lcc}) encoding algorithm.
@strong{Warning:} this setting alone is not sufficient to allow
debugging @code{cfront}-generated executables. @value{GDBN} would
require further enhancement to permit that.
+
+@item foo
+Show the list of formats.
@end table
-@item show demangle-style
@kindex show demangle-style
+@item show demangle-style
Display the encoding style currently in use for decoding C++ symbols.
+@kindex set print object
@item set print object
@itemx set print object on
-@kindex set print object
When displaying a pointer to an object, identify the @emph{actual}
(derived) type of the object rather than the @emph{declared} type, using
the virtual function table.
Display only the declared type of objects, without reference to the
virtual function table. This is the default setting.
-@item show print object
@kindex show print object
+@item show print object
Show whether actual, or declared, object types are displayed.
+@kindex set print static-members
+@item set print static-members
+@itemx set print static-members on
+Print static members when displaying a C++ object. The default is on.
+
+@item set print static-members off
+Do not print static members when displaying a C++ object.
+
+@kindex show print static-members
+@item show print static-members
+Show whether C++ static members are printed, or not.
+
+@c These don't work with HP ANSI C++ yet.
+@kindex set print vtbl
@item set print vtbl
@itemx set print vtbl on
-@kindex set print vtbl
Pretty print C++ virtual function tables. The default is off.
+@ifset HPPA
+(The @code{vtbl} commands do not work on programs compiled with the HP
+ANSI C++ compiler (@code{aCC}).)
+@end ifset
@item set print vtbl off
Do not pretty print C++ virtual function tables.
-@item show print vtbl
@kindex show print vtbl
+@item show print vtbl
Show whether C++ virtual function tables are pretty printed, or not.
@end table
@end ifclear
-@node Value History
+@node Value History, Convenience Vars, Print Settings, Data
@section Value history
@cindex value history
-Values printed by the @code{print} command are saved in the @value{GDBN} @dfn{value
-history} so that you can refer to them in other expressions. Values are
-kept until the symbol table is re-read or discarded (for example with
-the @code{file} or @code{symbol-file} commands). When the symbol table
-changes, the value history is discarded, since the values may contain
-pointers back to the types defined in the symbol table.
+Values printed by the @code{print} command are saved in the @value{GDBN}
+@dfn{value history}. This allows you to refer to them in other expressions.
+Values are kept until the symbol table is re-read or discarded
+(for example with the @code{file} or @code{symbol-file} commands).
+When the symbol table changes, the value history is discarded,
+since the values may contain pointers back to the types defined in the
+symbol table.
@cindex @code{$}
@cindex @code{$$}
@item show values +
Print ten history values just after the values last printed. If no more
-values are available, produces no display.
+values are available, @code{show values +} produces no display.
@end table
Pressing @key{RET} to repeat @code{show values @var{n}} has exactly the
same effect as @samp{show values +}.
-@node Convenience Vars
+@node Convenience Vars, Registers, Value History, Data
@section Convenience variables
@cindex convenience variables
variable, when used as an expression, has the type of its current value.
@table @code
-@item show convenience
@kindex show convenience
+@item show convenience
Print a list of convenience variables used so far, and their values.
Abbreviated @code{show con}.
@end table
@example
set $i = 0
print bar[$i++]->contents
-@i{@dots{} repeat that command by typing @key{RET}.}
@end example
+@noindent Repeat that command by typing @key{RET}.
+
Some convenience variables are created automatically by @value{GDBN} and given
values likely to be useful.
@table @code
-@item $_
@kindex $_
+@item $_
The variable @code{$_} is automatically set by the @code{x} command to
the last address examined (@pxref{Memory, ,Examining memory}). Other
commands which provide a default address for @code{x} to examine also
except when set by the @code{x} command, in which case it is a pointer
to the type of @code{$__}.
-@item $__
@kindex $__
+@item $__
The variable @code{$__} is automatically set by the @code{x} command
to the value found in the last address examined. Its type is chosen
to match the format in which the data was printed.
+
+@item $_exitcode
+@kindex $_exitcode
+The variable @code{$_exitcode} is automatically set to the exit code when
+the program being debugged terminates.
@end table
-@node Registers
+@ifset HPPA
+If you refer to a function or variable name that begins with a dollar
+sign, @value{GDBN} searches for a user or system name first, before it
+searches for a convenience variable.
+@end ifset
+
+@node Registers, Floating Point Hardware, Convenience Vars, Data
@section Registers
@cindex registers
your machine.
@table @code
-@item info registers
@kindex info registers
+@item info registers
Print the names and values of all registers except floating-point
registers (in the selected stack frame).
-@item info all-registers
@kindex info all-registers
@cindex floating point registers
+@item info all-registers
Print the names and values of all registers, including floating-point
registers.
@item info registers @var{regname} @dots{}
-Print the relativized value of each specified register @var{regname}.
-@var{regname} may be any register name valid on the machine you are using, with
-or without the initial @samp{$}.
+Print the @dfn{relativized} value of each specified register @var{regname}.
+As discussed in detail below, register values are normally relative to
+the selected stack frame. @var{regname} may be any register name valid on
+the machine you are using, with or without the initial @samp{$}.
@end table
@value{GDBN} has four ``standard'' register names that are available (in
sees. For example, the registers of the 68881 floating point
coprocessor are always saved in ``extended'' (raw) format, but all C
programs expect to work with ``double'' (virtual) format. In such
-cases, @value{GDBN} normally works with the virtual format only (the format that
-makes sense for your program), but the @code{info registers} command
+cases, @value{GDBN} normally works with the virtual format only (the format
+that makes sense for your program), but the @code{info registers} command
prints the data in both formats.
Normally, register values are relative to the selected stack frame
@ifset AMD29K
@table @code
-@item set rstack_high_address @var{address}
@kindex set rstack_high_address
@cindex AMD 29K register stack
@cindex register stack, AMD29K
+@item set rstack_high_address @var{address}
On AMD 29000 family processors, registers are saved in a separate
``register stack''. There is no way for @value{GDBN} to determine the extent
of this stack. Normally, @value{GDBN} just assumes that the stack is ``large
you probably want to precede with @samp{0x} to specify in
hexadecimal.
-@item show rstack_high_address
@kindex show rstack_high_address
+@item show rstack_high_address
Display the current limit of the register stack, on AMD 29000 family
processors.
@end table
@end ifset
@ifclear HAVE-FLOAT
-@node Floating Point Hardware
+@node Floating Point Hardware, , Registers, Data
@section Floating point hardware
@cindex floating point
-@c FIXME! Really host, not target?
-Depending on the host machine architecture, @value{GDBN} may be able to give
+Depending on the configuration, @value{GDBN} may be able to give
you more information about the status of the floating point hardware.
@table @code
-@item info float
@kindex info float
+@item info float
Display hardware-dependent information about the floating
point unit. The exact contents and layout vary depending on the
-floating point chip; on some platforms, @samp{info float} is not
-available at all.
+floating point chip. Currently, @samp{info float} is supported on
+the ARM and x86 machines.
@end table
-@c FIXME: this is a cop-out. Try to get examples, explanations. Only
-@c FIXME...supported currently on arm's and 386's. Mark properly with
-@c FIXME... m4 macros to isolate general statements from hardware-dep,
-@c FIXME... at that point.
@end ifclear
@ifclear CONLY
-@node Languages
+@node Languages, Symbols, Data, Top
@chapter Using @value{GDBN} with Different Languages
@cindex languages
rarely expressed in the same manner. For instance, in ANSI C,
dereferencing a pointer @code{p} is accomplished by @code{*p}, but in
Modula-2, it is accomplished by @code{p^}. Values can also be
-represented (and displayed) differently. Hex numbers in C are written
-like @samp{0x1ae}, while in Modula-2 they appear as @samp{1AEH}.
+represented (and displayed) differently. Hex numbers in C appear as
+@samp{0x1ae}, while in Modula-2 they appear as @samp{1AEH}.
@end ifset
@cindex working language
allowing you to express operations like the above in your program's
native language, and allowing @value{GDBN} to output values in a manner
consistent with the syntax of your program's native language. The
-language you use to build expressions, called the @dfn{working
-language}, can be selected manually, or @value{GDBN} can set it
-automatically.
+language you use to build expressions is called the @dfn{working
+language}.
@menu
* Setting:: Switching between source languages
* Support:: Supported languages
@end menu
-@node Setting
+@node Setting, Show, Languages, Languages
@section Switching between source languages
There are two ways to control the working language---either have @value{GDBN}
set it automatically, or select it manually yourself. You can use the
@code{set language} command for either purpose. On startup, @value{GDBN}
-defaults to setting the language automatically.
+defaults to setting the language automatically. The working language is
+used to determine how expressions you type are interpreted, how values
+are printed, etc.
+
+In addition to the working language, every source file that
+@value{GDBN} 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 @value{GDBN} infers the
+language from the name of the file. The language of a source file
+controls whether C++ names are demangled---this way @code{backtrace} can
+show each frame appropriately for its own language. There is no way to
+set the language of a source file from within @value{GDBN}.
+
+This is most commonly a problem when you use a program, such
+as @code{cfront} or @code{f2c}, that generates C but is written in
+another language. In that case, make the
+program use @code{#line} directives in its C output; that way
+@value{GDBN} will know the correct language of the source code of the original
+program, and will display that source code, not the generated C code.
@menu
+* Filenames:: Filename extensions and languages.
* Manually:: Setting the working language manually
* Automatically:: Having @value{GDBN} infer the source language
@end menu
-@node Manually
+@node Filenames, Manually, Setting, Setting
+@subsection List of filename extensions and languages
+
+If a source file name ends in one of the following extensions, then
+@value{GDBN} infers that its language is the one indicated.
+
+@table @file
+@ifset MOD2
+@item .mod
+Modula-2 source file
+@end ifset
+
+@item .c
+C source file
+
+@item .C
+@itemx .cc
+@itemx .cxx
+@itemx .cpp
+@itemx .cp
+@itemx .c++
+C++ source file
+
+@ifclear HPPA
+@item .ch
+@itemx .c186
+@itemx .c286
+CHILL source file.
+@end ifclear
+
+@item .s
+@itemx .S
+Assembler source file. This actually behaves almost like C, but
+@value{GDBN} does not skip over function prologues when stepping.
+@end table
+
+@node Manually, Automatically, Filenames, Setting
@subsection Setting the working language
If you allow @value{GDBN} to set the language automatically,
@code{c} or @code{modula-2}.
@end ifset
For a list of the supported languages, type @samp{set language}.
-@c FIXME: rms: eventually this command should be "help set language".
+@ifclear MOD2
+Setting the language manually prevents @value{GDBN} from updating the
+working language automatically. For example, if you used the @code{c}
+setting to debug a C++ program, names might not be demangled properly,
+overload resolution would not work, user-defined operators might not be
+interpreted correctly, and so on.
+@end ifclear
@ifset MOD2
Setting the language manually prevents @value{GDBN} from updating the working
language automatically. This can lead to confusion if you try
@code{a} to the result of @code{b+c}, yielding a @code{BOOLEAN} value.
@end ifset
-@node Automatically
+@node Automatically, , Manually, Setting
@subsection Having @value{GDBN} infer the source language
-To have @value{GDBN} set the working language automatically, use @samp{set
-language local} or @samp{set language auto}. @value{GDBN} then infers the
-language that a program was written in by looking at the name of its
-source files, and examining their extensions:
-
-@table @file
-@ifset MOD2
-@item *.mod
-Modula-2 source file
-@end ifset
-
-@item *.c
-C source file
-
-@item *.C
-@itemx *.cc
-C++ source file
-@end table
-
-This information is recorded for each function or procedure in a source
-file. When your program stops in a frame (usually by encountering a
-breakpoint), @value{GDBN} 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 @value{GDBN} issues a warning.
+To have @value{GDBN} set the working language automatically, use
+@samp{set language local} or @samp{set language auto}. @value{GDBN}
+then infers the working language. That is, when your program stops in a
+frame (usually by encountering a breakpoint), @value{GDBN} 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 @value{GDBN} issues a warning.
This may not seem necessary for most programs, which are written
entirely in one source language. However, program modules and libraries
a different source language. Using @samp{set language auto} in this
case frees you from having to set the working language manually.
-@node Show
+@ifset MOD2
+@node Show, Checks, Setting, Languages
@section Displaying the language
+@end ifset
+@ifclear MOD2
+@node Show, Support, Setting, Languages
+@section Displaying the language
+@end ifclear
The following commands help you find out which language is the
working language, and also what language source files were written in.
build and compute expressions that may involve variables in your program.
@item info frame
-Among the other information listed here (@pxref{Frame Info, ,Information
-about a frame}) is the source language for this frame. This
-language becomes the working language if you use an
-identifier from this frame.
+Display the source language for this frame. This language becomes the
+working language if you use an identifier from this frame.
+@xref{Frame Info, ,Information about a frame}, to identify the other
+information listed here.
@item info source
-Among the other information listed here (@pxref{Symbols, ,Examining the
-Symbol Table}) is the source language of this source file.
+Display the source language of this source file.
+@xref{Symbols, ,Examining the Symbol Table}, to identify the other
+information listed here.
@end table
@ifset MOD2
-@node Checks
+@node Checks, Support, Show, Languages
@section Type and range checking
@quotation
@cindex type checking
@cindex checks, type
-@node Type Checking
+@node Type Checking, Range Checking, Checks, Checks
@subsection An overview of type checking
Some languages, such as Modula-2, are strongly typed, meaning that the
otherwise an error occurs. These checks prevent type mismatch
errors from ever causing any run-time problems. For example,
-@example
+@smallexample
1 + 2 @result{} 3
@exdent but
@error{} 1 + 2.3
-@end example
+@end smallexample
The second example fails because the @code{CARDINAL} 1 is not
type-compatible with the @code{REAL} 2.3.
-For expressions you use in @value{GDBN} commands, you can tell the @value{GDBN}
-type checker to skip checking; to treat any mismatches as errors and
-abandon the expression; or only issue warnings when type mismatches
-occur, but evaluate the expression anyway. When you choose the last of
+For the expressions you use in @value{GDBN} commands, you can tell the
+@value{GDBN} 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, @value{GDBN} evaluates expressions like the second example above, but
also issues a warning.
-Even though you may turn type checking off, other type-based reasons may
-prevent @value{GDBN} from evaluating an expression. For instance, @value{GDBN} does not
-know how to add an @code{int} and a @code{struct foo}. These particular
-type errors have nothing to do with the language in use, and usually
-arise from expressions, such as the one described above, which make
-little sense to evaluate anyway.
+Even if you turn type checking off, there may be other reasons
+related to type that prevent @value{GDBN} from evaluating an expression.
+For instance, @value{GDBN} does not know how to add an @code{int} and
+a @code{struct foo}. These particular type errors have nothing to do
+with the language in use, and usually arise from expressions, such as
+the one described above, which make little sense to evaluate anyway.
Each language defines to what degree it is strict about type. For
instance, both Modula-2 and C require the arguments to arithmetical
numbers and structures.
@item show type
-Show the current setting of the type checker, and whether or not @value{GDBN} is
-setting it automatically.
+Show the current setting of the type checker, and whether or not @value{GDBN}
+is setting it automatically.
@end table
@cindex range checking
@cindex checks, range
-@node Range Checking
+@node Range Checking, , Type Checking, Checks
@subsection An overview of range checking
In some languages (such as Modula-2), it is an error to exceed the
@end table
@end ifset
-@node Support
+@ifset MOD2
+@node Support, , Checks, Languages
+@section Supported languages
+@end ifset
+@ifclear MOD2
+@node Support, , Show, Languages
@section Supported languages
+@end ifclear
@ifset MOD2
@value{GDBN} 4 supports C, C++, and Modula-2.
@end ifset
@ifclear MOD2
-@value{GDBN} 4 supports C, and C++.
+@value{GDBN} 4 supports C and C++.
@end ifclear
Some @value{GDBN} features may be used in expressions regardless of the
language you use: the @value{GDBN} @code{@@} and @code{::} operators,
* Modula-2:: Modula-2
@end menu
-@node C
+@node C, Modula-2, , Support
@subsection C and C++
@cindex C and C++
@cindex expressions in C or C++
+@end ifset
Since C and C++ are so closely related, many features of @value{GDBN} apply
-to both languages. Whenever this is the case, we discuss both languages
+to both languages. Whenever this is the case, we discuss those languages
together.
-@end ifset
+
@ifclear MOD2
@c Cancel this below, under same condition, at end of this chapter!
@raisesections
@end ifclear
+@ifclear HPPA
@cindex C++
@kindex g++
-@cindex GNU C++
-The C++ debugging facilities are jointly implemented by the GNU C++
+@cindex @sc{gnu} C++
+The C++ debugging facilities are jointly implemented by the @sc{gnu} C++
compiler and @value{GDBN}. Therefore, to debug your C++ code
-effectively, you must compile your C++ programs with the GNU C++
+effectively, you must compile your C++ programs with the @sc{gnu} C++
compiler, @code{g++}.
For best results when debugging C++ programs, use the stabs debugging
format. You can select that format explicitly with the @code{g++}
command-line options @samp{-gstabs} or @samp{-gstabs+}. See
-@ref{Debugging Options,,Options for Debugging Your Program or GNU CC,
-gcc.info, Using GNU CC}, for more information.
+@ref{Debugging Options,,Options for Debugging Your Program or @sc{gnu} CC,
+gcc.info, Using @sc{gnu} CC}, for more information.
@end ifclear
+@ifset HPPA
+@cindex C++
+@kindex g++
+@cindex @sc{gnu} C++
+You can use @value{GDBN} to debug C programs compiled with either the HP
+C compiler (@code{cc}) or the GNU C compiler (@code{gcc}), and to debug
+programs compiled with either the HP ANSI C++ compiler (@code{aCC}) or
+the @sc{gnu} C++ compiler (@code{g++}).
+
+If you compile with the @sc{gnu} C++ compiler, use the stabs debugging
+format for best results when debugging. You can select that format
+explicitly with the @code{g++} command-line options @samp{-gstabs} or
+@samp{-gstabs+}. See @ref{Debugging Options,,Options for Debugging Your
+Program or @sc{gnu} CC, gcc.info, Using @sc{gnu} CC}, for more
+information.
+@end ifset
+@end ifclear
+
@ifset CONLY
-@node C
+@node C, Symbols, Data, Top
@chapter C Language Support
@cindex C language
@cindex expressions in C
@menu
* C Operators:: C operators
-* C Constants:: C constants
-* Debugging C:: @value{GDBN} and C
@end menu
@end ifset
+
@ifclear CONLY
@menu
* C Operators:: C and C++ operators
@end ifset
* Debugging C:: @value{GDBN} and C
-* Debugging C plus plus:: Special features for C++
+* Debugging C plus plus:: @value{GDBN} features for C++
@end menu
@end ifclear
@ifclear CONLY
@cindex C and C++ operators
-@node C Operators
+@node C Operators, C Constants, , C
@subsubsection C and C++ operators
@end ifclear
@ifset CONLY
@cindex C operators
-@node C Operators
+@node C Operators, C Constants, C, C
@section C operators
@end ifset
@itemize @bullet
@item
+@ifclear HPPA
@emph{Integral types} include @code{int} with any of its storage-class
specifiers; @code{char}; and @code{enum}.
+@end ifclear
+@ifset HPPA
+@emph{Integral types} include @code{int} with any of its storage-class
+specifiers; @code{char}; @code{enum}; and, for C++, @code{bool}.
+@end ifset
@item
@emph{Floating-point types} include @code{float} and @code{double}.
pointer based on the stored type information.
Defined on @code{struct} and @code{union} data.
+@ifset HPPA
+@item .*@r{, }->*
+Dereferences of pointers to members.
+@end ifset
+
@item []
Array indexing. @code{@var{a}[@var{i}]} is defined as
@code{*(@var{a}+@var{i})}. Same precedence as @code{->}.
@end ifclear
@end table
+@ifset HPPA
+If an operator is redefined in the user code, @value{GDBN} usually
+attempts to invoke the redefined version instead of using the operator's
+predefined meaning.
+@end ifset
+
@ifclear CONLY
-@cindex C and C++ constants
-@node C Constants
+@menu
+* C Constants::
+@end menu
+
+@ifset MOD2
+@node C Constants, Cplus expressions, C Operators, C
+@subsubsection C and C++ constants
+@end ifset
+@ifclear MOD2
+@node C Constants, Cplus expressions, C Operators, Support
@subsubsection C and C++ constants
+@end ifclear
+@cindex C and C++ constants
@value{GDBN} allows you to express the constants of C and C++ in the
following ways:
@end ifclear
@ifset CONLY
@cindex C constants
-@node C Constants
+@node C Constants, Debugging C, C Operators, C
@section C constants
@value{GDBN} allows you to express the constants of C in the
@itemize @bullet
@item
Integer constants are a sequence of digits. Octal constants are
-specified by a leading @samp{0} (ie. zero), and hexadecimal constants by
+specified by a leading @samp{0} (i.e. zero), and hexadecimal constants by
a leading @samp{0x} or @samp{0X}. Constants may also end with a letter
@samp{l}, specifying that the constant should be treated as a
@code{long} value.
@end itemize
@ifclear CONLY
-@node Cplus expressions
+@menu
+* Cplus expressions::
+* C Defaults::
+@ifset MOD2
+* C Checks::
+@end ifset
+
+* Debugging C::
+@end menu
+
+@ifset MOD2
+@node Cplus expressions, C Defaults, C Constants, C
+@subsubsection C++ expressions
+@end ifset
+@ifclear MOD2
+@node Cplus expressions, C Defaults, C Constants, Support
@subsubsection C++ expressions
+@end ifclear
@cindex expressions in C++
-@value{GDBN} expression handling has a number of extensions to
-interpret a significant subset of C++ expressions.
+@value{GDBN} expression handling can interpret most C++ expressions.
+@ifclear HPPA
@cindex C++ support, not in @sc{coff}
@cindex @sc{coff} versus C++
@cindex C++ and object formats
@c periodically whether this has happened...
@quotation
@emph{Warning:} @value{GDBN} can only debug C++ code if you compile with
-the GNU C++ compiler. Moreover, C++ debugging depends on the use of
+the @sc{gnu} C++ compiler. Moreover, C++ debugging depends on the use of
additional debugging information in the symbol table, and thus requires
special support. @value{GDBN} has this support @emph{only} with the
stabs debug format. In particular, if your compiler generates a.out,
MIPS @sc{ecoff}, RS/6000 @sc{xcoff}, or @sc{elf} with stabs extensions
-to the symbol table, these facilities are all available. (With GNU CC,
+to the symbol table, these facilities are all available. (With @sc{gnu} CC,
you can use the @samp{-gstabs} option to request stabs debugging
extensions explicitly.) Where the object code format is standard
@sc{coff} or @sc{dwarf} in @sc{elf}, on the other hand, most of the C++
support in @value{GDBN} does @emph{not} work.
@end quotation
+@end ifclear
@enumerate
that is, @value{GDBN} allows implicit references to the class instance
pointer @code{this} following the same rules as C++.
+@ifclear HPPA
@cindex call overloaded functions
@cindex type conversions in C++
@item
arguments of the type required by the function that you want to call.
@value{GDBN} does not perform conversions requiring constructors or
user-defined type operators.
+@end ifclear
+@ifset HPPA
+@cindex call overloaded functions
+@cindex overloaded functions
+@cindex type conversions in C++
+@item
+You can call overloaded functions; @value{GDBN} 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.
+
+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.
+
+Overload resolution is always performed, unless you have specified
+@code{set overload-resolution off}. @xref{Debugging C plus plus,
+,@value{GDBN} features for C++}.
+
+You must specify@code{set overload-resolution off} in order to use an
+explicit function signature to call an overloaded function, as in
+@smallexample
+p 'foo(char,int)'('x', 13)
+@end smallexample
+The @value{GDBN} command-completion facility can simplify this;
+@pxref{Completion, ,Command completion}.
+
+@end ifset
@cindex reference declarations
@item
-@value{GDBN} understands variables declared as C++ references; you can use them in
-expressions just as you do in C++ source---they are automatically
+@value{GDBN} understands variables declared as C++ references; you can use
+them in expressions just as you do in C++ source---they are automatically
dereferenced.
In the parameter list shown when @value{GDBN} displays a frame, the values of
debugging (@pxref{Variables, ,Program variables}).
@end enumerate
-@node C Defaults
+@ifset HPPA
+In addition, @value{GDBN} supports calling virtual functions correctly,
+printing out virtual bases of objects, calling functions in a base
+subobject, casting objects, and invoking user-defined operators.
+@end ifset
+
+@ifset MOD2
+@node C Defaults, C Checks, Cplus expressions, C
@subsubsection C and C++ defaults
+@end ifset
+@ifclear MOD2
+@node C Defaults, Debugging C, Cplus expressions, Support
+@subsubsection C and C++ defaults
+@end ifclear
@cindex C and C++ defaults
+@ifclear HPPA
If you allow @value{GDBN} to set type and range checking automatically, they
both default to @code{off} whenever the working language changes to
-C or C++. This happens regardless of whether you, or @value{GDBN},
-selected the working language.
+C or C++. This happens regardless of whether you or @value{GDBN}
+selects the working language.
+@end ifclear
-If you allow @value{GDBN} to set the language automatically, it sets the
-working language to C or C++ on entering code compiled from a source file
-whose name ends with @file{.c}, @file{.C}, or @file{.cc}.
+If you allow @value{GDBN} to set the language automatically, it recognizes
+source files whose names end with @file{.c}, @file{.C}, or @file{.cc}, and
+when @value{GDBN} enters code compiled from one of these files,
+it sets the working language to C or C++.
@xref{Automatically, ,Having @value{GDBN} infer the source language}, for
further details.
@ifset MOD2
@c Type checking is (a) primarily motivated by Modula-2, and (b)
@c unimplemented. If (b) changes, it might make sense to let this node
-@c appear even if Mod-2 does not, but meanwhile ignore it. pesch 16jul93.
-@node C Checks
+@c appear even if Mod-2 does not, but meanwhile ignore it. roland 16jul93.
+@node C Checks, Debugging C, C Defaults, C Constants
@subsubsection C and C++ type and range checks
@cindex C and C++ checks
enumerated tag.
@item
-Two two variables have the same type name, or types that have been
+The two variables have the same type name, or types that have been
declared equivalent through @code{typedef}.
@ignore
@end ifclear
@ifclear CONLY
-@node Debugging C
+@ifset MOD2
+@node Debugging C, Debugging C plus plus, C Checks, C
+@subsubsection @value{GDBN} and C
+@end ifset
+@ifclear MOD2
+@node Debugging C, Debugging C plus plus, C Defaults, Support
@subsubsection @value{GDBN} and C
@end ifclear
+@end ifclear
@ifset CONLY
-@node Debugging C
+@node Debugging C, , C Constants, C
@section @value{GDBN} and C
@end ifset
,Expressions}.
@ifclear CONLY
-@node Debugging C plus plus
+@menu
+* Debugging C plus plus::
+@end menu
+
+@ifset MOD2
+@node Debugging C plus plus, , Debugging C, C
+@subsubsection @value{GDBN} features for C++
+@end ifset
+@ifclear MOD2
+@node Debugging C plus plus, , Debugging C, Support
@subsubsection @value{GDBN} features for C++
+@end ifclear
@cindex commands for C++
Some @value{GDBN} commands are particularly useful with C++, and some are
@xref{Set Breaks, ,Setting breakpoints}.
@cindex C++ exception handling
-@item catch @var{exceptions}
-@itemx info catch
-Debug C++ exception handling using these commands. @xref{Exception
-Handling, ,Breakpoints and exceptions}.
+@item catch throw
+@itemx catch catch
+Debug C++ exception handling using these commands. @xref{Set
+Catchpoints, , Setting catchpoints}.
@cindex inheritance
@item ptype @var{typename}
@itemx show print vtbl
Control the format for printing virtual function tables.
@xref{Print Settings, ,Print settings}.
+@ifset HPPA
+(The @code{vtbl} commands do not work on programs compiled with the HP
+ANSI C++ compiler (@code{aCC}).)
+
+@kindex set overload-resolution
+@cindex overloaded functions
+@item set overload-resolution on
+Enable overload resolution for C++ expression evaluation. The default
+is on. For overloaded functions, @value{GDBN} evaluates the arguments
+and searches for a function whose signature matches the argument types,
+using the standard C++ conversion rules (@pxref{Cplus expressions, ,C++
+expressions} for details). If it cannot find a match, it emits a
+message.
+
+@item set overload-resolution off
+Disable overload resolution for C++ expression evaluation. For
+overloaded functions that are not class member functions, @value{GDBN}
+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, @value{GDBN}
+searches for a function whose signature @emph{exactly} matches the
+argument types.
+@end ifset
@item @r{Overloaded symbol names}
You can specify a particular definition of an overloaded symbol, using
@end ifclear
@ifset MOD2
-@node Modula-2
+@node Modula-2, ,C , Support
@subsection Modula-2
@cindex Modula-2
The extensions made to @value{GDBN} to support Modula-2 only support
-output from the GNU Modula-2 compiler (which is currently being
+output from the @sc{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 @value{GDBN} reads in the executable's symbol
@cindex expressions in Modula-2
@menu
* M2 Operators:: Built-in operators
-* Built-In Func/Proc:: Built-in functions and procedures
+* Built-In Func/Proc:: Built-in functions and procedures
* M2 Constants:: Modula-2 constants
* M2 Defaults:: Default settings for Modula-2
* Deviations:: Deviations from standard Modula-2
* GDB/M2:: @value{GDBN} and Modula-2
@end menu
-@node M2 Operators
+@node M2 Operators, Built-In Func/Proc, Modula-2, Modula-2
@subsubsection Operators
@cindex Modula-2 operators
@end quotation
@cindex Modula-2 built-ins
-@node Built-In Func/Proc
+@node Built-In Func/Proc, M2 Constants, M2 Operators, Modula-2
@subsubsection Built-in functions and procedures
Modula-2 also makes available several built-in procedures and functions.
@end quotation
@cindex Modula-2 constants
-@node M2 Constants
+@node M2 Constants, M2 Defaults, Built-In Func/Proc, Modula-2
@subsubsection Constants
@value{GDBN} allows you to express the constants of Modula-2 in the following
Set constants are not yet supported.
@end itemize
-@node M2 Defaults
+@node M2 Defaults, Deviations, M2 Constants, Modula-2
@subsubsection Modula-2 defaults
@cindex Modula-2 defaults
working language to Modula-2. @xref{Automatically, ,Having @value{GDBN} set
the language automatically}, for further details.
-@node Deviations
+@node Deviations, M2 Checks, M2 Defaults, Modula-2
@subsubsection Deviations from standard Modula-2
@cindex Modula-2, deviations from
All built-in procedures both modify @emph{and} return their argument.
@end itemize
-@node M2 Checks
+@node M2 Checks, M2 Scope, Deviations, Modula-2
@subsubsection Modula-2 type and range checks
@cindex Modula-2 checks
@item
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.)
+@sc{gnu} Modula-2 compiler, but it may not be true of other compilers.)
@end itemize
As long as type checking is enabled, any attempt to combine variables
Range checking is done on all mathematical operations, assignment, array
index bounds, and all built-in functions and procedures.
-@node M2 Scope
+@node M2 Scope, GDB/M2, M2 Checks, Modula-2
@subsubsection The scope operators @code{::} and @code{.}
@cindex scope
@kindex .
module @var{module}, or if @var{id} is not an identifier in
@var{module}.
-@node GDB/M2
+@node GDB/M2, , M2 Scope, Modula-2
@subsubsection @value{GDBN} and Modula-2
Some @value{GDBN} commands have little use when debugging Modula-2 programs.
@cindex @code{#} in Modula-2
In @value{GDBN} scripts, the Modula-2 inequality operator @code{#} is
interpreted as the beginning of a comment. Use @code{<>} instead.
-
@end ifset
@end ifclear
-@node Symbols
+@node Symbols, Altering, Languages, Top
@chapter Examining the Symbol Table
The commands described in this section allow you to inquire about the
(@pxref{File Options, ,Choosing files}), or by one of the
file-management commands (@pxref{Files, ,Commands to specify files}).
-@c FIXME! This might be intentionally specific to C and C++; if so, move
-@c to someplace in C section of lang chapter.
@cindex symbol names
@cindex names of symbols
@cindex quoting names
looks up the value of @code{x} in the scope of the file @file{foo.c}.
@table @code
-@item info address @var{symbol}
@kindex info address
+@item info address @var{symbol}
Describe where the data for @var{symbol} is stored. For a register
variable, this says which register it is kept in. For a non-register
local variable, this prints the stack-frame offset at which the variable
at all for a register variable, and for a stack local variable prints
the exact address of the current instantiation of the variable.
-@item whatis @var{exp}
@kindex whatis
+@item whatis @var{exp}
Print the data type of expression @var{exp}. @var{exp} is not
actually evaluated, and any side-effecting operations (such as
assignments or function calls) inside it do not take place.
@item whatis
Print the data type of @code{$}, the last value in the value history.
-@item ptype @var{typename}
@kindex ptype
+@item ptype @var{typename}
Print a description of data type @var{typename}. @var{typename} may be
the name of a type, or for C code it may have the form
@ifclear CONLY
As with @code{whatis}, using @code{ptype} without an argument refers to
the type of @code{$}, the last value in the value history.
+@kindex info types
@item info types @var{regexp}
@itemx info types
-@kindex info types
Print a brief description of all types whose name matches @var{regexp}
(or all types in your program, if you supply no argument). Each
complete typename is matched as though it were a complete line; thus,
@code{whatis}, it does not print a detailed description; second, it
lists all source files where a type is defined.
-@item info source
@kindex info source
+@item info source
Show the name of the current source file---that is, the source file for
the function containing the current point of execution---and the language
it was written in.
-@item info sources
@kindex info sources
+@item info sources
Print the names of all source files in your program for which there is
debugging information, organized into two lists: files whose symbols
have already been read, and files whose symbols will be read when needed.
-@item info functions
@kindex info functions
+@item info functions
Print the names and data types of all defined functions.
@item info functions @var{regexp}
include @code{step}; @samp{info fun ^step} finds those whose names
start with @code{step}.
-@item info variables
@kindex info variables
+@item info variables
Print the names and data types of all variables that are declared
outside of functions (i.e., excluding local variables).
variables) whose names contain a match for regular expression
@var{regexp}.
-@ignore
-This was never implemented.
-@item info methods
-@itemx info methods @var{regexp}
-@kindex info methods
-The @code{info methods} command permits the user to examine all defined
-methods within C++ program, or (with the @var{regexp} argument) a
-specific set of methods found in the various C++ classes. Many
-C++ classes provide a large number of methods. Thus, the output
-from the @code{ptype} command can be overwhelming and hard to use. The
-@code{info-methods} command filters the methods, printing only those
-which match the regular-expression @var{regexp}.
-@end ignore
+@ignore
+This was never implemented.
+@kindex info methods
+@item info methods
+@itemx info methods @var{regexp}
+The @code{info methods} command permits the user to examine all defined
+methods within C++ program, or (with the @var{regexp} argument) a
+specific set of methods found in the various C++ classes. Many
+C++ classes provide a large number of methods. Thus, the output
+from the @code{ptype} command can be overwhelming and hard to use. The
+@code{info-methods} command filters the methods, printing only those
+which match the regular-expression @var{regexp}.
+@end ignore
+
+@ifclear HPPA
+@cindex reloading symbols
+Some systems allow individual object files that make up your program to
+be replaced without stopping and restarting your program.
+@ifset VXWORKS
+For example, in VxWorks you can simply recompile a defective object file
+and keep on running.
+@end ifset
+If you are running on one of these systems, you can allow @value{GDBN} to
+reload the symbols for automatically relinked modules:
+
+@table @code
+@kindex set symbol-reloading
+@item set symbol-reloading on
+Replace symbol definitions for the corresponding source file when an
+object file with a particular name is seen again.
+
+@item set symbol-reloading off
+Do not replace symbol definitions when re-encountering object files of
+the same name. This is the default state; if you are not running on a
+system that permits automatically relinking modules, you should leave
+@code{symbol-reloading} off, since otherwise @value{GDBN} may discard symbols
+when linking large programs, that may contain several modules (from
+different directories or libraries) with the same name.
+
+@kindex show symbol-reloading
+@item show symbol-reloading
+Show the current @code{on} or @code{off} setting.
+@end table
+@end ifclear
+
+@ifset HPPA
+@kindex set opaque-type-resolution
+@item set opaque-type-resolution on
+Tell @value{GDBN} to resolve opaque types. An opaque type is a type
+declared as a pointer to a @code{struct}, @code{class}, or
+@code{union}---for example, @code{struct MyType *}---that is used in one
+source file although the full declaration of @code{struct MyType} is in
+another source file. The default is on.
+
+A change in the setting of this subcommand will not take effect until
+the next time symbols for a file are loaded.
+
+@item set opaque-type-resolution off
+Tell @value{GDBN} not to resolve opaque types. In this case, the type
+is printed as follows:
+@smallexample
+@{<no data fields>@}
+@end smallexample
+
+@kindex show opaque-type-resolution
+@item show opaque-type-resolution
+Show whether opaque types are resolved or not.
+@end ifset
-@item maint print symbols @var{filename}
-@itemx maint print psymbols @var{filename}
-@itemx maint print msymbols @var{filename}
@kindex maint print symbols
@cindex symbol dump
@kindex maint print psymbols
@cindex partial symbol dump
+@item maint print symbols @var{filename}
+@itemx maint print psymbols @var{filename}
+@itemx maint print msymbols @var{filename}
Write a dump of debugging symbol data into the file @var{filename}.
These commands are used to debug the @value{GDBN} symbol-reading code. Only
symbols with debugging data are included. If you use @samp{maint print
@value{GDBN} reads symbols (in the description of @code{symbol-file}).
@end table
-@node Altering
+@node Altering, GDB Files, Symbols, Top
@chapter Altering Execution
Once you think you have found an error in your program, you might want to
@ifset BARETARGET
restart your program
@end ifset
-at a different address, or even return prematurely from a function to
-its caller.
+at a different address, or even return prematurely from a function.
@menu
* Assignment:: Assignment to variables
* Patching:: Patching your program
@end menu
-@node Assignment
+@node Assignment, Jumping, Altering, Altering
@section Assignment to variables
@cindex assignment
not printed and is not put in the value history (@pxref{Value History,
,Value history}). The expression is evaluated only for its effects.
+@ifclear HPPA
If the beginning of the argument string of the @code{set} command
appears identical to a @code{set} subcommand, use the @code{set
variable} command instead of just @code{set}. This command is identical
-to @code{set} except for its lack of subcommands. For example, if
-your program has a variable @code{width}, you get
-an error if you try to set a new value with just @samp{set width=13},
-because @value{GDBN} has the command @code{set width}:
+to @code{set} except for its lack of subcommands. For example, if your
+program has a variable @code{width}, you get an error if you try to set
+a new value with just @samp{set width=13}, because @value{GDBN} has the
+command @code{set width}:
@example
(@value{GDBP}) whatis width
@example
(@value{GDBP}) set var width=47
@end example
+@end ifclear
+@ifset HPPA
+Because the @code{set} command has many subcommands that can conflict
+with the names of program variables, it is a good idea to use the
+@code{set variable} command instead of just @code{set}. For example, if
+your program has a variable @code{g}, you run into problems if you try
+to set a new value with just @samp{set g=4}, because @value{GDBN} has
+the command @code{set gnutarget}, abbreviated @code{set g}:
+
+@example
+@group
+(@value{GDBP}) whatis g
+type = double
+(@value{GDBP}) p g
+$1 = 1
+(@value{GDBP}) set g=4
+(gdb) p g
+$2 = 1
+(@value{GDBP}) r
+The program being debugged has been started already.
+Start it from the beginning? (y or n) y
+Starting program: /home/smith/cc_progs/a.out
+"/home/smith/cc_progs/a.out": can't open to read symbols: Invalid bfd target.
+(@value{GDBP}) show g
+The current BFD target is "=4".
+@end group
+@end example
+
+@noindent
+The program variable @code{g} did not change, and you silently set the
+@code{gnutarget} to an invalid value. In order to set the variable
+@code{g}, use
+
+@example
+(@value{GDBP}) set var g=4
+@end example
+@end ifset
@value{GDBN} allows more implicit conversions in assignments than C; you can
freely store an integer value into a pointer variable or vice versa,
and you can convert any structure to any other structure that is the
same length or shorter.
@comment FIXME: how do structs align/pad in these conversions?
-@comment /pesch@cygnus.com 18dec1990
+@comment /doc@cygnus.com 18dec1990
To store values into arbitrary places in memory, use the @samp{@{@dots{}@}}
construct to generate a value of specified type at a specified address
@noindent
stores the value 4 into that memory location.
-@node Jumping
+@node Jumping, Signaling, Assignment, Altering
@section Continuing at a different address
Ordinarily, when you continue your program, you do so at the place where
an address of your own choosing, with the following commands:
@table @code
-@item jump @var{linespec}
@kindex jump
+@item jump @var{linespec}
Resume execution at line @var{linespec}. Execution stops again
immediately if there is a breakpoint there. @xref{List, ,Printing
source lines}, for a description of the different forms of
-@var{linespec}.
+@var{linespec}. It is common practice to use the @code{tbreak} command
+in conjunction with @code{jump}. @xref{Set Breaks, ,Setting
+breakpoints}.
The @code{jump} command does not change the current stack frame, or
the stack pointer, or the contents of any memory location or any
Resume execution at the instruction at address @var{address}.
@end table
+@ifclear HPPA
+@c Doesn't work on HP-UX; have to set $pcoqh and $pcoqt.
You can get much the same effect as the @code{jump} command by storing a
new value into the register @code{$pc}. The difference is that this
-does not start your program running; it only changes the address where it
+does not start your program running; it only changes the address of where it
@emph{will} run when you continue. For example,
@example
makes the next @code{continue} command or stepping command execute at
address @code{0x485}, rather than at the address where your program stopped.
@xref{Continuing and Stepping, ,Continuing and stepping}.
+@end ifclear
-The most common occasion to use the @code{jump} command is to back up,
-perhaps with more breakpoints set, over a portion of a program that has
-already executed, in order to examine its execution in more detail.
+The most common occasion to use the @code{jump} command is to back
+up---perhaps with more breakpoints set---over a portion of a program
+that has already executed, in order to examine its execution in more
+detail.
@ifclear BARETARGET
@c @group
-@node Signaling
+@node Signaling, Returning, Jumping, Altering
@section Giving your program a signal
@table @code
-@item signal @var{signal}
@kindex signal
+@item signal @var{signal}
Resume execution where your program stopped, but immediately give it the
signal @var{signal}. @var{signal} can be the name or the number of a
signal. For example, on many systems @code{signal 2} and @code{signal
@end ifclear
-@node Returning
+@node Returning, Calling, Signaling, Altering
@section Returning from a function
@table @code
-@item return
-@itemx return @var{expression}
@cindex returning from a function
@kindex return
+@item return
+@itemx return @var{expression}
You can cancel execution of a function call with the @code{return}
command. If you give an
@var{expression} argument, its value is used as the function's return
and Stepping, ,Continuing and stepping}) resumes execution until the
selected stack frame returns naturally.
-@node Calling
+@node Calling, Patching, Returning, Altering
@section Calling program functions
@cindex calling functions
You can use this variant of the @code{print} command if you want to
execute a function from your program, but without cluttering the output
-with @code{void} returned values. The result is printed and saved in
-the value history, if it is not void.
+with @code{void} returned values. If the result is not void, it
+is printed and saved in the value history.
+
+@ifclear HPPA
+A new user-controlled variable, @var{call_scratch_address}, specifies
+the location of a scratch area to be used when @value{GDBN} calls a
+function in the target. This is necessary because the usual method
+of putting the scratch area on the stack does not work in systems that
+have separate instruction and data spaces.
+@end ifclear
-@node Patching
+@node Patching, , Calling, Altering
@section Patching programs
@cindex patching binaries
@cindex writing into executables
repairs.
@table @code
+@kindex set write
@item set write on
@itemx set write off
-@kindex set write
If you specify @samp{set write on}, @value{GDBN} opens executable
@ifclear BARETARGET
and core
are opened for writing as well as reading.
@end table
-@node GDB Files
+@node GDB Files, Targets, Altering, Top
@chapter @value{GDBN} Files
@value{GDBN} needs to know the file name of the program to be debugged, both in
* Symbol Errors:: Errors reading symbol files
@end menu
-@node Files
+@node Files, Symbol Errors, GDB Files, GDB Files
@section Commands to specify files
@cindex symbol table
@ifclear BARETARGET
@cindex core dump file
-The usual way to specify executable and core dump file names is with
-the command arguments given when you start @value{GDBN} (@pxref{Invocation,
-,Getting In and Out of @value{GDBN}}.
+You may want to specify executable and core dump file names.
+The usual way to do this is at start-up time, using the arguments to
+@value{GDBN}'s start-up commands (@pxref{Invocation, ,
+Getting In and Out of @value{GDBN}}).
@end ifclear
@ifset BARETARGET
The usual way to specify an executable file name is with
to specify new files are useful.
@table @code
-@item file @var{filename}
@cindex executable file
@kindex file
+@item file @var{filename}
Use @var{filename} as the program to be debugged. It is read for its
symbols and for the contents of pure memory. It is also the program
executed when you use the @code{run} command. If you do not specify a
-directory and the file is not found in the @value{GDBN} working directory, @value{GDBN}
-uses the environment variable @code{PATH} as a list of directories to
-search, just as the shell does when looking for a program to run. You
-can change the value of this variable, for both @value{GDBN} and your program,
-using the @code{path} command.
+directory and the file is not found in the @value{GDBN} working directory,
+@value{GDBN} uses the environment variable @code{PATH} as a list of
+directories to search, just as the shell does when looking for a program
+to run. You can change the value of this variable, for both @value{GDBN}
+and your program, using the @code{path} command.
+@ifclear HPPA
On systems with memory-mapped files, an auxiliary file
@file{@var{filename}.syms} may hold symbol table information for
@var{filename}. If so, @value{GDBN} maps in the symbol table from
@file{@var{filename}.syms}, starting up more quickly. See the
-descriptions of the options @samp{-mapped} and @samp{-readnow}
+descriptions of the file options @samp{-mapped} and @samp{-readnow}
(available on the command line, and with the commands @code{file},
-@code{symbol-file}, or @code{add-symbol-file}), for more information.
+@code{symbol-file}, or @code{add-symbol-file}, described below),
+for more information.
+@end ifclear
@item file
@code{file} with no argument makes @value{GDBN} discard any information it
has on both executable file and the symbol table.
-@item exec-file @r{[} @var{filename} @r{]}
@kindex exec-file
+@item exec-file @r{[} @var{filename} @r{]}
Specify that the program to be run (but not the symbol table) is found
in @var{filename}. @value{GDBN} searches the environment variable @code{PATH}
if necessary to locate your program. Omitting @var{filename} means to
discard information on the executable file.
-@item symbol-file @r{[} @var{filename} @r{]}
@kindex symbol-file
+@item symbol-file @r{[} @var{filename} @r{]}
Read symbol table information from file @var{filename}. @code{PATH} is
searched when necessary. Use the @code{file} command to get both symbol
table and program to run from the same file.
@code{symbol-file} with no argument clears out @value{GDBN} information on your
program's symbol table.
-The @code{symbol-file} command causes @value{GDBN} to forget the contents of its
-convenience variables, the value history, and all breakpoints and
+The @code{symbol-file} command causes @value{GDBN} to forget the contents
+of its convenience variables, the value history, and all breakpoints and
auto-display expressions. This is because they may contain pointers to
the internal data recording symbols and data types, which are part of
the old symbol table data being discarded inside @value{GDBN}.
When @value{GDBN} is configured for a particular environment, it
understands debugging information in whatever format is the standard
-generated for that environment; you may use either a GNU compiler, or
-other compilers that adhere to the local conventions. Best results are
-usually obtained from GNU compilers; for example, using @code{@value{GCC}}
-you can generate debugging information for optimized code.
+generated for that environment; you may use either a @sc{gnu} compiler, or
+other compilers that adhere to the local conventions.
+@ifclear HPPA
+Best results are usually obtained from @sc{gnu} compilers; for example,
+using @code{@value{GCC}} you can generate debugging information for
+optimized code.
+@end ifclear
+@ifclear HPPA
On some kinds of object files, the @code{symbol-file} command does not
+@end ifclear
+@ifset HPPA
+The @code{symbol-file} command does not
+@end ifset
normally read the symbol table in full right away. Instead, it scans
the symbol table quickly to find which source files and which symbols
are present. The details are read later, one source file at a time,
into messages if desired. @xref{Messages/Warnings, ,Optional warnings
and messages}.)
+@ifclear HPPA
We have not implemented the two-stage strategy for COFF yet. When the
symbol table is stored in COFF format, @code{symbol-file} reads the
symbol table data in full right away.
-@item symbol-file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
-@itemx file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
@kindex readnow
@cindex reading symbols immediately
@cindex symbols, reading immediately
@kindex mapped
@cindex memory-mapped symbol file
@cindex saving symbol table
+@item symbol-file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
+@itemx file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
You can override the @value{GDBN} two-stage strategy for reading symbol
tables by using the @samp{-readnow} option with any of the commands that
load symbol table information, if you want to be sure @value{GDBN} has the
entire symbol table available.
+@end ifclear
@ifclear BARETARGET
+@ifclear HPPA
If memory-mapped files are available on your system through the
@code{mmap} system call, you can use another option, @samp{-mapped}, to
cause @value{GDBN} to write the symbols for your program into a reusable
The @file{.syms} file is specific to the host machine where you run
@value{GDBN}. It holds an exact image of the internal @value{GDBN}
symbol table. It cannot be shared across multiple host platforms.
+@end ifclear
@c FIXME: for now no mention of directories, since this seems to be in
@c flux. 13mar1992 status is that in theory GDB would look either in
@c (eg rooted in val of env var GDBSYMS) could exist for mappable symbol
@c files.
-@item core-file @r{[} @var{filename} @r{]}
@kindex core
@kindex core-file
+@item core-file @r{[} @var{filename} @r{]}
Specify the whereabouts of a core dump file to be used as the ``contents
of memory''. Traditionally, core files contain only some parts of the
address space of the process that generated them; @value{GDBN} can access the
(@pxref{Kill Process, ,Killing the child process}).
@end ifclear
+@ifclear HPPA
+@kindex load @var{filename}
@item load @var{filename}
-@kindex load
@ifset GENERIC
Depending on what remote debugging facilities are configured into
@value{GDBN}, the @code{load} command may be available. Where it exists, it
@end ifset
@code{load} does not repeat if you press @key{RET} again after using it.
+@end ifclear
@ifclear BARETARGET
-@item add-symbol-file @var{filename} @var{address}
-@itemx add-symbol-file @var{filename} @var{address} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
+@ifclear HPPA
@kindex add-symbol-file
@cindex dynamic linking
+@item add-symbol-file @var{filename} @var{address}
+@itemx add-symbol-file @var{filename} @var{address} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
The @code{add-symbol-file} command reads additional symbol table information
from the file @var{filename}. You would use this command when @var{filename}
has been dynamically loaded (by some other means) into the program that
You can use the @samp{-mapped} and @samp{-readnow} options just as with
the @code{symbol-file} command, to change how @value{GDBN} manages the symbol
table information for @var{filename}.
+
+@kindex add-shared-symbol-file
+@item add-shared-symbol-file
+The @code{add-shared-symbol-file} command can be used only under Harris' CXUX
+operating system for the Motorola 88k. @value{GDBN} automatically looks for
+shared libraries, however if @value{GDBN} does not find yours, you can run
+@code{add-shared-symbol-file}. It takes no arguments.
+@end ifclear
+@end ifclear
+
+@ifclear HPPA
+@kindex section
+@item section
+The @code{section} command changes the base address of section SECTION of
+the exec file to ADDR. This can be used if the exec file does not contain
+section addresses, (such as in the a.out format), or when the addresses
+specified in the file itself are wrong. Each section must be changed
+separately. The ``info files'' command lists all the sections and their
+addresses.
@end ifclear
-@item info files
-@itemx info target
@kindex info files
@kindex info target
+@item info files
+@itemx info target
@code{info files} and @code{info target} are synonymous; both print
the current target (@pxref{Targets, ,Specifying a Debugging Target}),
including the
name of the executable file
@end ifset
currently in use by @value{GDBN}, and the files from which symbols were
-loaded. The command @code{help targets} lists all possible targets
+loaded. The command @code{help target} lists all possible targets
rather than current ones.
@end table
All file-specifying commands allow both absolute and relative file names
-as arguments. @value{GDBN} always converts the file name to an absolute path
+as arguments. @value{GDBN} always converts the file name to an absolute file
name and remembers it that way.
@ifclear BARETARGET
@cindex shared libraries
-@value{GDBN} supports SunOS, SVr4, Irix 5, and IBM RS/6000 shared libraries.
+@ifclear HPPA
+@c added HP-UX -- Kim (HP writer)
+@value{GDBN} supports HP-UX, SunOS, SVr4, Irix 5, and IBM RS/6000 shared
+libraries.
+@end ifclear
+@ifset HPPA
+@value{GDBN} supports HP-UX shared libraries.
+@end ifset
@value{GDBN} automatically loads symbol definitions from shared libraries
when you use the @code{run} command, or when you examine a core file.
(Before you issue the @code{run} command, @value{GDBN} does not understand
references to a function in a shared library, however---unless you are
debugging a core file).
+@ifset HPPA
+If the program loads a library explicitly, @value{GDBN} automatically
+loads the symbols at the time of the @code{shl_load} call.
+@end ifset
@c FIXME: some @value{GDBN} release may permit some refs to undef
@c FIXME...symbols---eg in a break cmd---assuming they are from a shared
@c FIXME...lib; check this from time to time when updating manual
@table @code
-@item info share
-@itemx info sharedlibrary
@kindex info sharedlibrary
@kindex info share
+@item info share
+@itemx info sharedlibrary
Print the names of the shared libraries which are currently loaded.
-@item sharedlibrary @var{regex}
-@itemx share @var{regex}
@kindex sharedlibrary
@kindex share
-This is an obsolescent command; you can use it to explicitly load shared
-object library symbols for files matching a Unix regular expression, but
-as with files loaded automatically, it only loads shared libraries
+@item sharedlibrary @var{regex}
+@itemx share @var{regex}
+
+Load shared object library symbols for files matching a
+Unix regular expression.
+As with files loaded automatically, it only loads shared libraries
required by your program for a core file or after typing @code{run}. If
@var{regex} is omitted all shared libraries required by your program are
loaded.
@end table
+
+@ifset HPPA
+@value{GDBN} detects the loading of a shared library and automatically
+reads in symbols from the newly loaded library, up to a threshold that
+is initially set but that you can modify if you wish.
+
+Beyond that threshold, symbols from shared libraries must be explicitly
+loaded. To load these symbols, use the command @code{sharedlibrary}
+@var{filename}. The base address of the shared library is determined
+automatically by @value{GDBN} and need not be specified.
+
+To display or set the threshold, use the commands:
+
+@table @code
+@kindex set auto-solib-add
+@item set auto-solib-add @var{threshold}
+Set the autoloading size threshold, in megabytes. If @var{threshold} is
+nonzero, symbols from all shared object libraries will be loaded
+automatically when the inferior begins execution or when the dynamic
+linker informs @value{GDBN} that a new library has been loaded, until
+the symbol table of the program and libraries exceeds this threshold.
+Otherwise, symbols must be loaded manually, using the
+@code{sharedlibrary} command. The default threshold is 100 megabytes.
+
+@kindex show auto-solib-add
+@item show auto-solib-add
+Display the current autoloading size threshold, in megabytes.
+@end table
+@end ifset
+
@end ifclear
-@node Symbol Errors
+@node Symbol Errors, , Files, GDB Files
@section Errors reading symbol files
While reading a symbol file, @value{GDBN} occasionally encounters problems,
@value{GDBN} could not parse a type specification output by the compiler.
@end table
-@node Targets
+@node Targets, Controlling GDB, GDB Files, Top
@chapter Specifying a Debugging Target
@cindex debugging target
@kindex target
A @dfn{target} is the execution environment occupied by your program.
+@ifclear HPPA
@ifclear BARETARGET
Often, @value{GDBN} runs in the same host environment as your program; in
that case, the debugging target is specified as a side effect when you
host, or controlling a standalone system over a serial port or a
realtime system over a TCP/IP connection---you
@end ifclear
+@end ifclear
+@ifset HPPA
+On HP-UX systems, @value{GDBN} has been configured to support debugging
+of processes running on the PA-RISC architecture. This means that the
+only possible targets are:
+
+@itemize @bullet
+@item
+An executable that has been compiled and linked to run on HP-UX
+
+@item
+A live HP-UX process, either started by @value{GDBN} (with the
+@code{run} command) or started outside of @value{GDBN} and attached to
+(with the @code{attach} command)
+
+@item
+A core file generated by an HP-UX process that previously aborted
+execution
+@end itemize
+
+@value{GDBN} on HP-UX has not been configured to support remote
+debugging, or to support programs running on other platforms. You
+@end ifset
@ifset BARETARGET
You
@end ifset
@menu
* Active Targets:: Active targets
* Target Commands:: Commands for managing targets
+@ifset REMOTESTUB
+* Byte Order:: Choosing target byte order
* Remote:: Remote debugging
+@end ifset
+
@end menu
-@node Active Targets
+@node Active Targets, Target Commands, Targets, Targets
@section Active targets
@cindex stacking targets
@cindex active targets
already-running process}).
@end ifclear
-@node Target Commands
+@node Target Commands, Byte Order, Active Targets, Targets
@section Commands for managing targets
@table @code
The @code{target} command does not repeat if you press @key{RET} again
after executing the command.
-@item help target
@kindex help target
+@item help target
Displays the names of all targets available. To display targets
currently selected, use either @code{info target} or @code{info files}
(@pxref{Files, ,Commands to specify files}).
@item help target @var{name}
Describe a particular target, including any parameters necessary to
select it.
+
+@kindex set gnutarget
+@item set gnutarget @var{args}
+@value{GDBN} uses its own library BFD to read your files. @value{GDBN}
+knows whether it is reading an @dfn{executable},
+a @dfn{core}, or a @dfn{.o} file; however, you can specify the file format
+with the @code{set gnutarget} command. Unlike most @code{target} commands,
+with @code{gnutarget} the @code{target} refers to a program, not a machine.
+
+@emph{Warning:} To specify a file format with @code{set gnutarget},
+you must know the actual BFD name.
+
+@noindent @xref{Files, , Commands to specify files}.
+
+@kindex show gnutarget
+@item show gnutarget
+Use the @code{show gnutarget} command to display what file format
+@code{gnutarget} is set to read. If you have not set @code{gnutarget},
+@value{GDBN} will determine the file format for each file automatically,
+and @code{show gnutarget} displays @samp{The current BDF target is "auto"}.
@end table
+@ifclear HPPA
Here are some common targets (available, or not, depending on the GDB
configuration):
+@end ifclear
+@ifset HPPA
+These are the valid targets on HP-UX systems:
+@end ifset
@table @code
-@item target exec @var{program}
@kindex target exec
+@item target exec @var{program}
An executable file. @samp{target exec @var{program}} is the same as
@samp{exec-file @var{program}}.
@ifclear BARETARGET
-@item target core @var{filename}
@kindex target core
+@item target core @var{filename}
A core dump file. @samp{target core @var{filename}} is the same as
@samp{core-file @var{filename}}.
@end ifclear
@ifset REMOTESTUB
-@item target remote @var{dev}
@kindex target remote
+@item target remote @var{dev}
Remote serial target in GDB-specific protocol. The argument @var{dev}
specifies what serial device to use for the connection (e.g.
-@file{/dev/ttya}). @xref{Remote, ,Remote debugging}.
+@file{/dev/ttya}). @xref{Remote, ,Remote debugging}. @code{target remote}
+now supports the @code{load} command. This is only useful if you have
+some other way of getting the stub to the target system, and you can put
+it somewhere in memory where it won't get clobbered by the download.
@end ifset
@ifset SIMS
-@item target sim
@kindex target sim
+@item target sim
CPU simulator. @xref{Simulator,,Simulated CPU Target}.
@end ifset
@ifset AMD29K
-@item target udi @var{keyword}
@kindex target udi
+@item target udi @var{keyword}
Remote AMD29K target, using the AMD UDI protocol. The @var{keyword}
argument specifies which 29K board or simulator to use. @xref{UDI29K
Remote,,The UDI protocol for AMD29K}.
-@item target amd-eb @var{dev} @var{speed} @var{PROG}
@kindex target amd-eb
+@item target amd-eb @var{dev} @var{speed} @var{PROG}
@cindex AMD EB29K
Remote PC-resident AMD EB29K board, attached over serial lines.
@var{dev} is the serial device, as for @code{target remote};
@end ifset
@ifset H8
-@item target hms
@kindex target hms
+@item target hms @var{dev}
A Hitachi SH, H8/300, or H8/500 board, attached via serial line to your host.
@ifclear H8EXCLUSIVE
-@c Unix only, not currently of interest for H8-only manual
Use special commands @code{device} and @code{speed} to control the serial
line and the communications speed used.
@end ifclear
@end ifset
@ifset I960
-@item target nindy @var{devicename}
@kindex target nindy
+@item target nindy @var{devicename}
An Intel 960 board controlled by a Nindy Monitor. @var{devicename} is
the name of the serial device to use for the connection, e.g.
@file{/dev/ttya}. @xref{i960-Nindy Remote, ,@value{GDBN} with a remote i960 (Nindy)}.
@end ifset
@ifset ST2000
-@item target st2000 @var{dev} @var{speed}
@kindex target st2000
+@item target st2000 @var{dev} @var{speed}
A Tandem ST2000 phone switch, running Tandem's STDBUG protocol. @var{dev}
is the name of the device attached to the ST2000 serial line;
@var{speed} is the communication line speed. The arguments are not used
if @value{GDBN} is configured to connect to the ST2000 using TCP or Telnet.
@xref{ST2000 Remote,,@value{GDBN} with a Tandem ST2000}.
-
@end ifset
+
@ifset VXWORKS
-@item target vxworks @var{machinename}
@kindex target vxworks
+@item target vxworks @var{machinename}
A VxWorks system, attached via TCP/IP. The argument @var{machinename}
is the target system's machine name or IP address.
@xref{VxWorks Remote, ,@value{GDBN} and VxWorks}.
@end ifset
+
+@kindex target bug
+@item target bug @var{dev}
+BUG monitor, running on a MVME187 (m88k) board.
+
+@ifclear HPPA
+@kindex target cpu32bug
+@item target cpu32bug @var{dev}
+CPU32BUG monitor, running on a CPU32 (M68K) board.
+
+@kindex target op50n
+@item target op50n @var{dev}
+OP50N monitor, running on an OKI HPPA board.
+
+@kindex target w89k
+@item target w89k @var{dev}
+W89K monitor, running on a Winbond HPPA board.
+
+@kindex target est
+@item target est @var{dev}
+EST-300 ICE monitor, running on a CPU32 (M68K) board.
+
+@kindex target rom68k
+@item target rom68k @var{dev}
+ROM 68K monitor, running on an IDP board.
+
+@kindex target array
+@item target array @var{dev}
+Array Tech LSI33K RAID controller board.
+
+@kindex target sparclite
+@item target sparclite @var{dev}
+Fujitsu sparclite boards, used only for the purpose of loading.
+You must use an additional command to debug the program.
+For example: target remote @var{dev} using @value{GDBN} standard
+remote protocol.
+@end ifclear
@end table
@ifset GENERIC
-Different targets are available on different configurations of @value{GDBN}; your
-configuration may have more or fewer targets.
+Different targets are available on different configurations of @value{GDBN};
+your configuration may have more or fewer targets.
@end ifset
-@node Remote
+@ifset REMOTESTUB
+@node Byte Order, Remote, Target Commands, Targets
+@section Choosing target byte order
+@cindex choosing target byte order
+@cindex target byte order
+@kindex set endian big
+@kindex set endian little
+@kindex set endian auto
+@kindex show endian
+
+You can now choose which byte order to use with a target system.
+Use the @code{set endian big} and @code{set endian little} commands.
+Use the @code{set endian auto} command to instruct
+@value{GDBN} to use the byte order associated with the executable.
+You can see the current setting for byte order with the @code{show endian}
+command.
+
+@emph{Warning:} Currently, only embedded MIPS configurations support
+dynamic selection of target byte order.
+
+@node Remote, , Byte Order, Targets
@section Remote debugging
@cindex remote debugging
If you are trying to debug a program running on a machine that cannot run
-GDB in the usual way, it is often useful to use remote debugging. For
-example, you might use remote debugging on an operating system kernel, or on
-a small system which does not have a general purpose operating system
+@value{GDBN} in the usual way, it is often useful to use remote debugging.
+For example, you might use remote debugging on an operating system kernel,
+or on a small system which does not have a general purpose operating system
powerful enough to run a full-featured debugger.
-Some configurations of GDB have special serial or TCP/IP interfaces
+Some configurations of @value{GDBN} have special serial or TCP/IP interfaces
to make this work with particular debugging targets. In addition,
-GDB comes with a generic serial protocol (specific to GDB, but
-not specific to any particular target system) which you can use if you
+@value{GDBN} comes with a generic serial protocol (specific to @value{GDBN},
+but not specific to any particular target system) which you can use if you
write the remote stubs---the code that runs on the remote system to
-communicate with GDB.
+communicate with @value{GDBN}.
Other remote targets may be available in your
-configuration of GDB; use @code{help targets} to list them.
+configuration of @value{GDBN}; use @code{help target} to list them.
+@end ifset
@ifset GENERIC
@c Text on starting up GDB in various specific cases; it goes up front
@ifset MIPS
* MIPS Remote:: @value{GDBN} and MIPS boards
@end ifset
+@ifset SPARCLET
+* Sparclet Remote:: @value{GDBN} and Sparclet boards
+@end ifset
@ifset SIMS
* Simulator:: Simulated CPU target
@end ifset
You can alter the way @value{GDBN} interacts with you by using
the @code{set} command. For commands controlling how @value{GDBN} displays
-data, @pxref{Print Settings, ,Print settings}; other settings are described here.
+data, @pxref{Print Settings, ,Print settings}; other settings are described
+here.
@menu
* Prompt:: Prompt
* Messages/Warnings:: Optional warnings and messages
@end menu
-@node Prompt
+@node Prompt, Editing, Controlling GDB, Controlling GDB
@section Prompt
+
@cindex prompt
@value{GDBN} indicates its readiness to read a command by printing a string
called the @dfn{prompt}. This string is normally @samp{(@value{GDBP})}. You
can change the prompt string with the @code{set prompt} command. For
instance, when debugging @value{GDBN} with @value{GDBN}, it is useful to change
-the prompt in one of the @value{GDBN} sessions so that you can always tell which
-one you are talking to.
+the prompt in one of the @value{GDBN} sessions so that you can always tell
+which one you are talking to.
+
+@emph{Note:} @code{set prompt} no longer adds a space for you after the
+prompt you set. This allows you to set a prompt which ends in a space
+or a prompt that does not.
@table @code
-@item set prompt @var{newprompt}
@kindex set prompt
+@item set prompt @var{newprompt}
Directs @value{GDBN} to use @var{newprompt} as its prompt string henceforth.
+
@kindex show prompt
@item show prompt
Prints a line of the form: @samp{Gdb's prompt is: @var{your-prompt}}
@end table
-@node Editing
+@node Editing, History, Prompt, Controlling GDB
@section Command editing
@cindex readline
@cindex command line editing
@value{GDBN} reads its input commands via the @dfn{readline} interface. This
-GNU library provides consistent behavior for programs which provide a
-command line interface to the user. Advantages are @code{emacs}-style
-or @code{vi}-style inline editing of commands, @code{csh}-like history
+@sc{gnu} library provides consistent behavior for programs which provide a
+command line interface to the user. Advantages are @sc{gnu} Emacs-style
+or @dfn{vi}-style inline editing of commands, @code{csh}-like history
substitution, and a storage and recall of command history across
debugging sessions.
Show whether command line editing is enabled.
@end table
-@node History
+@node History, Screen Size, Editing, Controlling GDB
@section Command history
@value{GDBN} can keep track of the commands you type during your
The commands to control history expansion are:
@table @code
-
@kindex set history expansion
@item set history expansion on
@itemx set history expansion
Disable history expansion.
The readline code comes with more complete documentation of
-editing and history expansion features. Users unfamiliar with @code{emacs}
+editing and history expansion features. Users unfamiliar with @sc{gnu} Emacs
or @code{vi} may wish to read it.
@ifset have-readline-appendices
@xref{Command Line Editing}.
Print ten commands just after the commands last printed.
@end table
-@node Screen Size
+@node Screen Size, Numbers, History, Controlling GDB
@section Screen size
@cindex size of screen
@cindex pauses in output
width} commands:
@table @code
-@item set height @var{lpp}
-@itemx show height
-@itemx set width @var{cpl}
-@itemx show width
@kindex set height
@kindex set width
@kindex show width
@kindex show height
+@item set height @var{lpp}
+@itemx show height
+@itemx set width @var{cpl}
+@itemx show width
These @code{set} commands specify a screen height of @var{lpp} lines and
a screen width of @var{cpl} characters. The associated @code{show}
commands display the current settings.
-If you specify a height of zero lines, @value{GDBN} does not pause during output
-no matter how long the output is. This is useful if output is to a file
-or to an editor buffer.
+If you specify a height of zero lines, @value{GDBN} does not pause during
+output no matter how long the output is. This is useful if output is to a
+file or to an editor buffer.
Likewise, you can specify @samp{set width 0} to prevent @value{GDBN}
from wrapping its output.
@end table
-@node Numbers
+@node Numbers, Messages/Warnings, Screen Size, Controlling GDB
@section Numbers
@cindex number representation
@cindex entering numbers
both input and output with the @code{set radix} command.
@table @code
-@kindex set radix
-@item set radix @var{base}
-Set the default base for numeric input and display. Supported choices
+@kindex set input-radix
+@item set input-radix @var{base}
+Set the default base for numeric input. Supported choices
for @var{base} are decimal 8, 10, or 16. @var{base} must itself be
specified either unambiguously or using the current default radix; for
example, any of
-@example
+@smallexample
set radix 012
set radix 10.
set radix 0xa
-@end example
+@end smallexample
@noindent
sets the base to decimal. On the other hand, @samp{set radix 10}
leaves the radix unchanged no matter what it was.
-@kindex show radix
-@item show radix
-Display the current default base for numeric input and display.
+@kindex set output-radix
+@item set output-radix @var{base}
+Set the default base for numeric display. Supported choices
+for @var{base} are decimal 8, 10, or 16. @var{base} must itself be
+specified either unambiguously or using the current default radix.
+
+@kindex show input-radix
+@item show input-radix
+Display the current default base for numeric input.
+
+@kindex show output-radix
+@item show output-radix
+Display the current default base for numeric display.
@end table
-@node Messages/Warnings
+@node Messages/Warnings, , Numbers, Controlling GDB
@section Optional warnings and messages
By default, @value{GDBN} is silent about its inner workings. If you are running
on a slow machine, you may want to use the @code{set verbose} command.
-It makes @value{GDBN} tell you when it does a lengthy internal operation, so
+This makes @value{GDBN} tell you when it does a lengthy internal operation, so
you will not think it has crashed.
Currently, the messages controlled by @code{set verbose} are those
@item set confirm on
Enables confirmation requests (the default).
-@item show confirm
@kindex show confirm
+@item show confirm
Displays state of confirmation requests.
@end table
-@c FIXME this does not really belong here. But where *does* it belong?
-@cindex reloading symbols
-Some systems allow individual object files that make up your program to
-be replaced without stopping and restarting your program.
-@ifset VXWORKS
-For example, in VxWorks you can simply recompile a defective object file
-and keep on running.
-@end ifset
-If you are running on one of these systems, you can allow @value{GDBN} to
-reload the symbols for automatically relinked modules:
-
-@table @code
-@kindex set symbol-reloading
-@item set symbol-reloading on
-Replace symbol definitions for the corresponding source file when an
-object file with a particular name is seen again.
-
-@item set symbol-reloading off
-Do not replace symbol definitions when re-encountering object files of
-the same name. This is the default state; if you are not running on a
-system that permits automatically relinking modules, you should leave
-@code{symbol-reloading} off, since otherwise @value{GDBN} may discard symbols
-when linking large programs, that may contain several modules (from
-different directories or libraries) with the same name.
-
-@item show symbol-reloading
-Show the current @code{on} or @code{off} setting.
-@end table
-
-@node Sequences
+@node Sequences, Emacs, Controlling GDB, Top
@chapter Canned Sequences of Commands
Aside from breakpoint commands (@pxref{Break Commands, ,Breakpoint
@menu
* Define:: User-defined commands
-* Hooks:: User-defined command hooks
+* Hooks:: User-defined command hooks
* Command Files:: Command files
* Output:: Commands for controlled output
@end menu
-@node Define
+@node Define, Hooks, Sequences, Sequences
@section User-defined commands
@cindex user-defined command
-A @dfn{user-defined command} is a sequence of @value{GDBN} commands to which you
-assign a new name as a command. This is done with the @code{define}
-command.
+A @dfn{user-defined command} is a sequence of @value{GDBN} commands to which
+you assign a new name as a command. This is done with the @code{define}
+command. User commands may accept up to 10 arguments separated by whitespace.
+Arguments are accessed within the user command via @var{$arg0@dots{}$arg9}.
+A trivial example:
+
+@smallexample
+define adder
+ print $arg0 + $arg1 + $arg2
+@end smallexample
+
+@noindent To execute the command use:
+
+@smallexample
+adder 1 2 3
+@end smallexample
+
+@noindent This defines the command @code{adder}, which prints the sum of
+its three arguments. Note the arguments are text substitutions, so they may
+reference variables, use complex expressions, or even perform inferior
+functions calls.
@table @code
-@item define @var{commandname}
@kindex define
+@item define @var{commandname}
Define a command named @var{commandname}. If there is already a command
by that name, you are asked to confirm that you want to redefine it.
which are given following the @code{define} command. The end of these
commands is marked by a line containing @code{end}.
-@item document @var{commandname}
+@kindex if
+@kindex else
+@item if
+Takes a single argument, which is an expression to evaluate.
+It is followed by a series of commands that are executed
+only if the expression is true (nonzero).
+There can then optionally be a line @code{else}, followed
+by a series of commands that are only executed if the expression
+was false. The end of the list is marked by a line containing @code{end}.
+
+@kindex while
+@item while
+The syntax is similar to @code{if}: the command takes a single argument,
+which is an expression to evaluate, and must be followed by the commands to
+execute, one per line, terminated by an @code{end}.
+The commands are executed repeatedly as long as the expression
+evaluates to true.
+
@kindex document
-Give documentation to the user-defined command @var{commandname}. The
-command @var{commandname} must already be defined. This command reads
-lines of documentation just as @code{define} reads the lines of the
-command definition, ending with @code{end}. After the @code{document}
-command is finished, @code{help} on command @var{commandname} displays
-the documentation you have specified.
+@item document @var{commandname}
+Document the user-defined command @var{commandname}, so that it can be
+accessed by @code{help}. The command @var{commandname} must already be
+defined. This command reads lines of documentation just as @code{define}
+reads the lines of the command definition, ending with @code{end}.
+After the @code{document} command is finished, @code{help} on command
+@var{commandname} displays the documentation you have written.
You may use the @code{document} command again to change the
documentation of a command. Redefining the command with @code{define}
does not change the documentation.
-@item help user-defined
@kindex help user-defined
+@item help user-defined
List all user-defined commands, with the first line of the documentation
(if any) for each.
+@kindex show user
@item show user
@itemx show user @var{commandname}
-@kindex show user
Display the @value{GDBN} commands used to define @var{commandname} (but not its
documentation). If no @var{commandname} is given, display the
definitions for all user-defined commands.
@end table
-User-defined commands do not take arguments. When they are executed, the
+When user-defined commands are executed, the
commands of the definition are not printed. An error in any command
stops execution of the user-defined command.
-Commands that would ask for confirmation if used interactively proceed
-without asking when used inside a user-defined command. Many @value{GDBN} commands
-that normally print messages to say what they are doing omit the messages
-when used in a user-defined command.
+If used interactively, commands that would ask for confirmation proceed
+without asking when used inside a user-defined command. Many @value{GDBN}
+commands that normally print messages to say what they are doing omit the
+messages when used in a user-defined command.
-@node Hooks
+@node Hooks, Command Files, Define, Sequences
@section User-defined command hooks
@cindex command files
If you try to define a hook which does not match any known command, you
get a warning from the @code{define} command.
-@node Command Files
+@node Command Files, Output, Hooks, Sequences
@section Command files
@cindex command files
-A command file for @value{GDBN} is a file of lines that are @value{GDBN} commands. Comments
-(lines starting with @kbd{#}) may also be included. An empty line in a
-command file does nothing; it does not mean to repeat the last command, as
-it would from the terminal.
+A command file for @value{GDBN} is a file of lines that are @value{GDBN}
+commands. Comments (lines starting with @kbd{#}) may also be included.
+An empty line in a command file does nothing; it does not mean to repeat
+the last command, as it would from the terminal.
@cindex init file
@cindex @file{@value{GDBINIT}}
@cindex init file name
On some configurations of @value{GDBN}, the init file is known by a
different name (these are typically environments where a specialized
-form of GDB may need to coexist with other forms, hence a different name
+form of @value{GDBN} may need to coexist with other forms,
+hence a different name
for the specialized version's init file). These are the environments
with special init file names:
-@itemize @bullet
@kindex .vxgdbinit
+@itemize @bullet
@item
VxWorks (Wind River Systems real-time OS): @samp{.vxgdbinit}
@code{source} command:
@table @code
-@item source @var{filename}
@kindex source
+@item source @var{filename}
Execute the command file @var{filename}.
@end table
normally print messages to say what they are doing omit the messages
when called from command files.
-@node Output
+@node Output, , Command Files, Sequences
@section Commands for controlled output
During the execution of a command file or a user-defined command, normal
want.
@table @code
-@item echo @var{text}
@kindex echo
+@item echo @var{text}
@c I do not consider backslash-space a standard C escape sequence
@c because it is not in ANSI.
Print @var{text}. Nonprinting characters can be included in
echo onto several lines.\n
@end example
-@item output @var{expression}
@kindex output
+@item output @var{expression}
Print the value of @var{expression} and nothing but that value: no
newlines, no @samp{$@var{nn} = }. The value is not entered in the
-value history either. @xref{Expressions, ,Expressions}, for more information on
-expressions.
+value history either. @xref{Expressions, ,Expressions}, for more information
+on expressions.
@item output/@var{fmt} @var{expression}
Print the value of @var{expression} in format @var{fmt}. You can use
the same formats as for @code{print}. @xref{Output Formats,,Output
formats}, for more information.
-@item printf @var{string}, @var{expressions}@dots{}
@kindex printf
+@item printf @var{string}, @var{expressions}@dots{}
Print the values of the @var{expressions} under the control of
@var{string}. The @var{expressions} are separated by commas and may be
either numbers or pointers. Their values are printed as specified by
@end table
@ifclear DOSHOST
-@node Emacs
-@chapter Using @value{GDBN} under GNU Emacs
+@node Emacs, GDB Bugs, Sequences, Top
+@chapter Using @value{GDBN} under @sc{gnu} Emacs
-@cindex emacs
-A special interface allows you to use GNU Emacs to view (and
+@cindex Emacs
+@cindex @sc{gnu} Emacs
+A special interface allows you to use @sc{gnu} Emacs to view (and
edit) the source files for the program you are debugging with
@value{GDBN}.
executable file you want to debug as an argument. This command starts
@value{GDBN} as a subprocess of Emacs, with input and output through a newly
created Emacs buffer.
+@ifset HPPA
+(Do not use the @code{-tui} option to run @value{GDBN} from Emacs.)
+@end ifset
Using @value{GDBN} under Emacs is just like using @value{GDBN} normally except for two
things:
session proceeds normally; but Emacs does not get enough information
back from @value{GDBN} to locate the source files in this situation. To
avoid this problem, either start @value{GDBN} mode from the directory where
-your program resides, or specify a full path name when prompted for the
+your program resides, or specify an absolute file name when prompted for the
@kbd{M-x gdb} argument.
A similar confusion can result if you use the @value{GDBN} @code{file} command to
@item M-u
Go up the number of frames indicated by the numeric argument
-(@pxref{Arguments, , Numeric Arguments, emacs, The GNU Emacs Manual}),
+(@pxref{Arguments, , Numeric Arguments, Emacs, The @sc{gnu} Emacs Manual}),
like the @value{GDBN} @code{up} command.
@emph{Warning:} In Emacs v19, this command is @kbd{C-c C-u}.
to correspond properly with the code.
@c The following dropped because Epoch is nonstandard. Reactivate
-@c if/when v19 does something similar. ---pesch@cygnus.com 19dec1990
+@c if/when v19 does something similar. ---doc@cygnus.com 19dec1990
@ignore
-@kindex emacs epoch environment
-@kindex epoch
+@kindex Emacs Epoch environment
+@kindex Epoch
@kindex inspect
-Version 18 of Emacs has a built-in window system called the @code{epoch}
+Version 18 of @sc{gnu} Emacs has a built-in window system
+called the @code{epoch}
environment. Users of this environment can use a new command,
@code{inspect} which performs identically to @code{print} except that
each value is printed in its own window.
@end ifclear
@ifset LUCID
-@node Energize
+@node Energize, GDB Bugs, Emacs, Top
@chapter Using @value{GDBN} with Energize
@cindex Energize
Energize graphical interface to drive @value{GDBN}; you can also, if you
choose, type @value{GDBN} commands as usual in a debugging window. Even if
you use the graphical interface, the debugging window (which uses Emacs,
-and resembles the standard Emacs interface to @value{GDBN}) displays the
+and resembles the standard @sc{gnu} Emacs interface to
+@value{GDBN}) displays the
equivalent commands, so that the history of your debugging session is
properly reflected.
@end ifset
@node GDB Bugs
+@c links whacked to pacify makeinfo
+@c , Command Line Editing, Emacs, Top
@chapter Reporting Bugs in @value{GDBN}
@cindex bugs in @value{GDBN}
@cindex reporting bugs in @value{GDBN}
* Bug Reporting:: How to report bugs
@end menu
-@node Bug Criteria
+@node Bug Criteria, Bug Reporting, GDB Bugs, GDB Bugs
@section Have you found a bug?
@cindex bug criteria
If you are not sure whether you have found a bug, here are some guidelines:
@itemize @bullet
-@item
@cindex fatal signal
@cindex debugger crash
@cindex crash of debugger
+@item
If the debugger gets a fatal signal, for any input whatever, that is a
@value{GDBN} bug. Reliable debuggers never crash.
-@item
@cindex error on valid input
+@item
If @value{GDBN} produces an error message for valid input, that is a bug.
-@item
@cindex invalid input
+@item
If @value{GDBN} does not produce an error message for invalid input,
that is a bug. However, you should note that your idea of
``invalid input'' might be our idea of ``an extension'' or ``support
for improvement of @value{GDBN} are welcome in any case.
@end itemize
-@node Bug Reporting
+@node Bug Reporting, , Bug Criteria, GDB Bugs
@section How to report bugs
@cindex bug reports
@cindex @value{GDBN} bugs, reporting
-A number of companies and individuals offer support for GNU products.
+@ifclear HPPA
+A number of companies and individuals offer support for @sc{gnu} products.
If you obtained @value{GDBN} from a support organization, we recommend you
contact that organization first.
You can find contact information for many support companies and
-individuals in the file @file{etc/SERVICE} in the GNU Emacs
+individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
distribution.
In any event, we also recommend that you send bug reports for @value{GDBN} to one
@strong{Do not send bug reports to @samp{info-gdb}, or to
@samp{help-gdb}, or to any newsgroups.} Most users of @value{GDBN} do not want to
-receive bug reports. Those that do, have arranged to receive @samp{bug-gdb}.
+receive bug reports. Those that do have arranged to receive @samp{bug-gdb}.
The mailing list @samp{bug-gdb} has a newsgroup @samp{gnu.gdb.bug} which
serves as a repeater. The mailing list and the newsgroup carry exactly
As a last resort, send bug reports on paper to:
@example
-GNU Debugger Bugs
-Free Software Foundation
-545 Tech Square
-Cambridge, MA 02139
+@sc{gnu} Debugger Bugs
+Free Software Foundation Inc.
+59 Temple Place - Suite 330
+Boston, MA 02111-1307
+USA
@end example
+@end ifclear
+
+@ifset HPPA
+If you obtained HP GDB as part of your HP ANSI C or HP ANSI C++ compiler
+kit, report problems to your HP Support Representative.
+
+If you obtained HP GDB from the Hewlett-Packard Web site, report
+problems by electronic mail to @code{wdb-www@@ch.hp.com}.
+@end ifset
The fundamental principle of reporting bugs usefully is this:
@strong{report all the facts}. If you are not sure whether to state a
easiest thing for you to do, and the most helpful.
Keep in mind that the purpose of a bug report is to enable us to fix
-the bug if it is new to us. It is not as important as what happens if
-the bug is already known. Therefore, always write your bug reports on
+the bug if it is new to us.
+@c
+@c FIX ME!!--What the heck does the following sentence mean,
+@c in the context of the one above?
+@c
+@c It is not as important as what happens if the bug is already known.
+@c
+Therefore, always write your bug reports on
the assumption that the bug has not been reported previously.
Sometimes people give a few sketchy facts and ask, ``Does this ring a
The type of machine you are using, and the operating system name and
version number.
+@ifclear HPPA
@item
What compiler (and its version) was used to compile @value{GDBN}---e.g.
``@value{GCC}--2.0''.
+@end ifclear
@item
What compiler (and its version) was used to compile the program you
+@ifclear HPPA
are debugging---e.g. ``@value{GCC}--2.0''.
+@end ifclear
+@ifset HPPA
+are debugging---e.g. ``HP92453-01 A.10.32.03 HP C Compiler''. Use the
+@code{what} command with the pathname of the compile command
+(@file{what /opt/ansic/bin/cc}, for example) to obtain this information.
+@end ifset
@item
The command arguments you gave the compiler to compile your example and
Of course, if the bug is that @value{GDBN} gets a fatal signal, then we will
certainly notice it. But if the bug is incorrect output, we might not
-notice unless it is glaringly wrong. We are human, after all. You
-might as well not give us a chance to make a mistake.
+notice unless it is glaringly wrong. You might as well not give us a
+chance to make a mistake.
Even if the problem you experience is a fatal signal, you should still
say so explicitly. Suppose something strange is going on, such as,
happening for us. If you had not told us to expect a crash, then we
would not be able to draw any conclusion from our observations.
+@ifclear HPPA
@item
If you wish to suggest changes to the @value{GDBN} source, send us context
diffs. If you even discuss something in the @value{GDBN} source, refer to
The line numbers in our development sources will not match those in your
sources. Your line numbers would convey no useful information to us.
+@end ifclear
@end itemize
Here are some things that are not necessary:
@include inc-hist.texi
@ifset NOVEL
-@node Renamed Commands
+@ifset RENAMED
+@node Renamed Commands, Formatting Documentation, GDB Bugs, Top
@appendix Renamed Commands
-The following commands were renamed in GDB 4, in order to make the
+The following commands were renamed in @value{GDBN} 4, in order to make the
command set as a whole more consistent and easier to use and remember:
@kindex add-syms
@end tex
@c END TEXI2ROFF-KILL
@end ifset
+@end ifset
@ifclear PRECONFIGURED
+@ifclear HPPA
@node Formatting Documentation
+@c links whacked to pacify makeinfo
+@c , Installing GDB, Renamed Commands, Top
@appendix Formatting Documentation
-@cindex GDB reference card
+@cindex @value{GDBN} reference card
@cindex reference card
-The GDB 4 release includes an already-formatted reference card, ready
+The @value{GDBN} 4 release includes an already-formatted reference card, ready
for printing with PostScript or Ghostscript, in the @file{gdb}
subdirectory of the main source directory@footnote{In
@file{gdb-@value{GDBVN}/gdb/refcard.ps} of the version @value{GDBVN}
make refcard.dvi
@end example
-The GDB reference card is designed to print in landscape mode on US
-``letter'' size paper; that is, on a sheet 11 inches wide by 8.5 inches
+The @value{GDBN} reference card is designed to print in @dfn{landscape}
+mode on US ``letter'' size paper;
+that is, on a sheet 11 inches wide by 8.5 inches
high. You will need to specify this form of printing as an option to
your @sc{dvi} output program.
@cindex documentation
-All the documentation for GDB comes as part of the machine-readable
+All the documentation for @value{GDBN} comes as part of the machine-readable
distribution. The documentation is written in Texinfo format, which is
a documentation system that uses a single source file to produce both
on-line information and a printed manual. You can use one of the Info
formatting commands to create the on-line version of the documentation
and @TeX{} (or @code{texi2roff}) to typeset the printed version.
-GDB includes an already formatted copy of the on-line Info version of
+@value{GDBN} includes an already formatted copy of the on-line Info version of
this manual in the @file{gdb} subdirectory. The main Info file is
-@file{gdb-@var{version-number}/gdb/gdb.info}, and it refers to
+@file{gdb-@r{version-number}/gdb/gdb.info}, and it refers to
subordinate files matching @samp{gdb.info*} in the same directory. If
necessary, you can print out these files, or read them with any editor;
-but they are easier to read using the @code{info} subsystem in GNU Emacs
-or the standalone @code{info} program, available as part of the GNU
+but they are easier to read using the @code{info} subsystem in @sc{gnu} Emacs
+or the standalone @code{info} program, available as part of the @sc{gnu}
Texinfo distribution.
If you want to format these Info files yourself, you need one of the
Info formatting programs, such as @code{texinfo-format-buffer} or
@code{makeinfo}.
-If you have @code{makeinfo} installed, and are in the top level GDB
+If you have @code{makeinfo} installed, and are in the top level @value{GDBN}
source directory (@file{gdb-@value{GDBVN}}, in the case of version @value{GDBVN}), you can
make the Info file by typing:
@TeX{} also requires a macro definitions file called
@file{texinfo.tex}. This file tells @TeX{} how to typeset a document
-written in Texinfo format. On its own, @TeX{} cannot read, much less
+written in Texinfo format. On its own, @TeX{} cannot either read or
typeset a Texinfo file. @file{texinfo.tex} is distributed with GDB
and is located in the @file{gdb-@var{version-number}/texinfo}
directory.
@example
make gdb.dvi
@end example
+@end ifclear
-@node Installing GDB
-@appendix Installing GDB
-@cindex configuring GDB
+@node Installing GDB, Index, Using History Interactively, Top
+@appendix Installing @value{GDBN}
+@cindex configuring @value{GDBN}
@cindex installation
-GDB comes with a @code{configure} script that automates the process
-of preparing GDB for installation; you can then use @code{make} to
+@ifset HPPA
+If you obtain @value{GDBN} (HP WDB 0.75) as part of your HP ANSI C or
+HP ANSI C++ Developer's Kit at HP-UX Release 11.0, you do not have to
+take any special action to build or install @value{GDBN}.
+
+If you obtain @value{GDBN} (HP WDB 0.75) from an HP web site, you may
+download either a @code{swinstall}-able package or a source tree, or
+both.
+
+Most customers will want to install the @value{GDBN} binary that is part
+of the @code{swinstall}-able package. To do so, use a command of the
+form
+
+@smallexample
+/usr/sbin/swinstall -s @var{package-name} WDB
+@end smallexample
+
+Alternatively, it is possible to build @value{GDBN} from the source
+distribution. Sophisticated customers who want to modify the debugger
+sources to tailor @value{GDBN} to their their needs may wish to do this.
+The source distribution consists of a @code{tar}'ed source tree rooted
+at @file{gdb-4.16/...}. The instructions that follow describe how to
+build a @file{gdb} executable from this source tree. HP believes that
+these instructions apply to the WDB source tree that it distributes.
+However, HP does not explicitly support building a @file{gdb} for any
+non-HP platform from the WDB source tree. It may work, but HP has not
+tested it for any platforms other than those described in the WDB 0.75
+Release Notes.
+@end ifset
+
+@value{GDBN} comes with a @code{configure} script that automates the process
+of preparing @value{GDBN} for installation; you can then use @code{make} to
build the @code{gdb} program.
@iftex
@c irrelevant in info file; it's as current as the code it lives with.
-@footnote{If you have a more recent version of GDB than @value{GDBVN},
+@footnote{If you have a more recent version of @value{GDBN} than @value{GDBVN},
look at the @file{README} file in the sources; we may have improved the
installation procedures since publishing this manual.}
@end iftex
-The GDB distribution includes all the source code you need for GDB in
-a single directory, whose name is usually composed by appending the
-version number to @samp{gdb}.
+The @value{GDBN} distribution includes all the source code you need for
+@value{GDBN} in a single directory, whose name is usually composed by
+appending the version number to @samp{gdb}.
-For example, the GDB version @value{GDBVN} distribution is in the
+For example, the @value{GDBN} version @value{GDBVN} distribution is in the
@file{gdb-@value{GDBVN}} directory. That directory contains:
@table @code
@item gdb-@value{GDBVN}/configure @r{(and supporting files)}
-script for configuring GDB and all its supporting libraries.
+script for configuring @value{GDBN} and all its supporting libraries
@item gdb-@value{GDBVN}/gdb
-the source specific to GDB itself
+the source specific to @value{GDBN} itself
@item gdb-@value{GDBVN}/bfd
source for the Binary File Descriptor library
@item gdb-@value{GDBVN}/include
-GNU include files
+@sc{gnu} include files
@item gdb-@value{GDBVN}/libiberty
source for the @samp{-liberty} free software library
source for the library of opcode tables and disassemblers
@item gdb-@value{GDBVN}/readline
-source for the GNU command-line interface
+source for the @sc{gnu} command-line interface
@item gdb-@value{GDBVN}/glob
-source for the GNU filename pattern-matching subroutine
+source for the @sc{gnu} filename pattern-matching subroutine
@item gdb-@value{GDBVN}/mmalloc
-source for the GNU memory-mapped malloc package
+source for the @sc{gnu} memory-mapped malloc package
@end table
-The simplest way to configure and build GDB is to run @code{configure}
+The simplest way to configure and build @value{GDBN} is to run @code{configure}
from the @file{gdb-@var{version-number}} source directory, which in
this example is the @file{gdb-@value{GDBVN}} directory.
First switch to the @file{gdb-@var{version-number}} source directory
if you are not already in it; then run @code{configure}. Pass the
-identifier for the platform on which GDB will run as an
+identifier for the platform on which @value{GDBN} will run as an
argument.
For example:
@noindent
where @var{host} is an identifier such as @samp{sun4} or
-@samp{decstation}, that identifies the platform where GDB will run.
+@samp{decstation}, that identifies the platform where @value{GDBN} will run.
(You can often leave off @var{host}; @code{configure} tries to guess the
correct value by examining your system.)
libraries, then @code{gdb} itself. The configured source files, and the
binaries, are left in the corresponding source directories.
+@need 750
@code{configure} is a Bourne-shell (@code{/bin/sh}) script; if your
system does not recognize this automatically when you run a different
shell, you may need to run @code{sh} on it explicitly:
you tell it not to, with the @samp{--norecursion} option).
You can run the @code{configure} script from any of the
-subordinate directories in the GDB distribution if you only want to
+subordinate directories in the @value{GDBN} distribution if you only want to
configure that subdirectory, but be sure to specify a path to it.
For example, with version @value{GDBVN}, type the following to configure only
You can install @code{@value{GDBP}} anywhere; it has no hardwired paths.
However, you should make sure that the shell on your path (named by
the @samp{SHELL} environment variable) is publicly readable. Remember
-that GDB uses the shell to start your program---some systems refuse to
-let GDB debug child processes whose programs are not readable.
+that @value{GDBN} uses the shell to start your program---some systems refuse to
+let @value{GDBN} debug child processes whose programs are not readable.
@menu
-* Separate Objdir:: Compiling GDB in another directory
+* Separate Objdir:: Compiling @value{GDBN} in another directory
* Config Names:: Specifying names for hosts and targets
-* configure Options:: Summary of options for configure
+* Configure Options:: Summary of options for configure
@end menu
-@node Separate Objdir
-@section Compiling GDB in another directory
+@node Separate Objdir, Config Names, Installing GDB, Installing GDB
+@section Compiling @value{GDBN} in another directory
-If you want to run GDB versions for several host or target machines,
+If you want to run @value{GDBN} versions for several host or target machines,
you need a different @code{gdb} compiled for each combination of
host and target. @code{configure} is designed to make this easy by
allowing you to generate each configuration in a separate subdirectory,
rather than in the source directory. If your @code{make} program
-handles the @samp{VPATH} feature (GNU @code{make} does), running
+handles the @samp{VPATH} feature (@sc{gnu} @code{make} does), running
@code{make} in each of these directories builds the @code{gdb}
program specified there.
would be the same as the argument to @samp{--srcdir}, you can leave out
the @samp{--srcdir} option; it is assumed.)
-For example, with version @value{GDBVN}, you can build GDB in a separate
-directory for a Sun 4 like this:
+For example, with version @value{GDBVN}, you can build @value{GDBN} in a
+separate directory for a Sun 4 like this:
@example
@group
directory, it creates a tree for the binaries with the same structure
(and using the same names) as the tree under the source directory. In
the example, you'd find the Sun 4 library @file{libiberty.a} in the
-directory @file{gdb-sun4/libiberty}, and GDB itself in
+directory @file{gdb-sun4/libiberty}, and @value{GDBN} itself in
@file{gdb-sun4/gdb}.
-One popular reason to build several GDB configurations in separate
-directories is to configure GDB for cross-compiling (where GDB
-runs on one machine---the host---while debugging programs that run on
-another machine---the target). You specify a cross-debugging target by
+One popular reason to build several @value{GDBN} configurations in separate
+directories is to configure @value{GDBN} for cross-compiling (where
+@value{GDBN} runs on one machine---the @dfn{host}---while debugging
+programs that run on another machine---the @dfn{target}).
+You specify a cross-debugging target by
giving the @samp{--target=@var{target}} option to @code{configure}.
When you run @code{make} to build a program or library, you must run
The @code{Makefile} that @code{configure} generates in each source
directory also runs recursively. If you type @code{make} in a source
directory such as @file{gdb-@value{GDBVN}} (or in a separate configured
-directory configured with @samp{--srcdir=@var{path}/gdb-@value{GDBVN}}), you
+directory configured with @samp{--srcdir=@var{dirname}/gdb-@value{GDBVN}}), you
will build all the required libraries, and then build GDB.
When you have multiple hosts or targets configured in separate
if they are NFS-mounted on each of the hosts); they will not interfere
with each other.
-@node Config Names
+@node Config Names, Configure Options, Separate Objdir, Installing GDB
@section Specifying names for hosts and targets
The specifications used for hosts and targets in the @code{configure}
or as the value for @var{target} in a @code{--target=@var{target}}
option. The equivalent full name is @samp{sparc-sun-sunos4}.
-The @code{configure} script accompanying GDB does not provide
+The @code{configure} script accompanying @value{GDBN} does not provide
any query facility to list all supported host and target names or
aliases. @code{configure} calls the Bourne shell script
@code{config.sub} to map abbreviations to full names; you can read the
@end smallexample
@noindent
-@code{config.sub} is also distributed in the GDB source
+@code{config.sub} is also distributed in the @value{GDBN} source
directory (@file{gdb-@value{GDBVN}}, for version @value{GDBVN}).
-@node configure Options
+@node Configure Options, , Config Names, Installing GDB
@section @code{configure} options
Here is a summary of the @code{configure} options and arguments that
are most often useful for building @value{GDBN}. @code{configure} also has
several other options not listed here. @inforef{What Configure
Does,,configure.info}, for a full explanation of @code{configure}.
-@c FIXME: Would this be more, or less, useful as an xref (ref to printed
-@c manual in the printed manual, ref to info file only from the info file)?
@example
configure @r{[}--help@r{]}
@r{[}--prefix=@var{dir}@r{]}
- @r{[}--srcdir=@var{path}@r{]}
+ @r{[}--srcdir=@var{dirname}@r{]}
@r{[}--norecursion@r{]} @r{[}--rm@r{]}
@r{[}--target=@var{target}@r{]} @var{host}
@end example
@c avoid splitting the warning from the explanation:
@need 2000
-@item --srcdir=@var{path}
-@strong{Warning: using this option requires GNU @code{make}, or another
+@item --srcdir=@var{dirname}
+@strong{Warning: using this option requires @sc{gnu} @code{make}, or another
@code{make} that implements the @code{VPATH} feature.}@*
Use this option to make configurations in directories separate from the
-GDB source directories. Among other things, you can use this to
+@value{GDBN} source directories. Among other things, you can use this to
build (or maintain) several configurations simultaneously, in separate
directories. @code{configure} writes configuration specific files in
the current directory, but arranges for them to use the source in the
-directory @var{path}. @code{configure} creates directories under
+directory @var{dirname}. @code{configure} creates directories under
the working directory in parallel to the source directories below
-@var{path}.
+@var{dirname}.
@item --norecursion
Configure only the directory level where @code{configure} is executed; do not
@c This does not work (yet if ever). FIXME.
@c @item --parse=@var{lang} @dots{}
-@c Configure the GDB expression parser to parse the listed languages.
-@c @samp{all} configures GDB for all supported languages. To get a
+@c Configure the @value{GDBN} expression parser to parse the listed languages.
+@c @samp{all} configures @value{GDBN} for all supported languages. To get a
@c list of all supported languages, omit the argument. Without this
-@c option, GDB is configured to parse all supported languages.
+@c option, @value{GDBN} is configured to parse all supported languages.
@item --target=@var{target}
-Configure GDB for cross-debugging programs running on the specified
-@var{target}. Without this option, GDB is configured to debug
-programs that run on the same machine (@var{host}) as GDB itself.
+Configure @value{GDBN} for cross-debugging programs running on the specified
+@var{target}. Without this option, @value{GDBN} is configured to debug
+programs that run on the same machine (@var{host}) as @value{GDBN} itself.
There is no convenient way to generate a list of all available targets.
@item @var{host} @dots{}
-Configure GDB to run on the specified @var{host}.
+Configure @value{GDBN} to run on the specified @var{host}.
There is no convenient way to generate a list of all available hosts.
@end table
@noindent
@code{configure} accepts other options, for compatibility with
-configuring other GNU tools recursively; but these are the only
-options that affect GDB or its supporting libraries.
+configuring other @sc{gnu} tools recursively; but these are the only
+options that affect @value{GDBN} or its supporting libraries.
@end ifclear
-@node Index
+
+@node Index, , Installing GDB, Top
@unnumbered Index
@printindex cp
\centerline{{\sl\fontname\tensl\/}}
\centerline{are used for emphasis.}\vfill}
\page\colophon
-% Blame: pesch@cygnus.com, 1991.
+% Blame: doc@cygnus.com, 1991.
@end tex
@contents