From fe3f5fc8280c8697ec793b7090ae2845abf570f5 Mon Sep 17 00:00:00 2001 From: Roland Pesch Date: Sat, 30 Mar 1991 02:13:24 +0000 Subject: [PATCH] Restructured manual; introduced introductory sample session. --- gdb/doc/gdb.texinfo | 1885 ++++++++++++++++++++++++------------------- 1 file changed, 1076 insertions(+), 809 deletions(-) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 88574d4f8e..49c7221529 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -8,17 +8,18 @@ @c _HOST__ architectures (and you can of course get the full source, @c with all configurations, from wherever you got this). _if__(0) +_0__ THIS IS THE FULL SOURCE. The full source needs to be run through m4 before either tex- or info- formatting: for example, - m4 pretex.m4 none.m4 m680x0.m4 as.texinfo >as-680x0.texinfo + m4 pretex.m4 none.m4 m680x0.m4 gdb.texinfo >gdb-680x0.texinfo will produce (assuming your path finds either GNU or SysV m4; Berkeley won't do) a file suitable for formatting. See the text in "pretex.m4" for a fuller explanation (and the macro definitions). - +_1__ _fi__(0) @c -@synindex ky cp +@syncodeindex ky cp @c FOR UPDATES LEADING TO THIS DRAFT, GDB CHANGELOG CONSULTED BETWEEN: @c Tue Feb 26 01:47:07 1991 Cygnus John Gilmore (cygnus at yuba) @c Sat Dec 22 02:51:40 1990 John Gilmore (gnu at cygint) @@ -220,14 +221,176 @@ HPPA architecture support. @end itemize -@node Invocation, User Interface, New Features, Top -@chapter Starting _GDBN__ +@node Sample Session,,, +@chapter A Sample _GDB__ Session + +You can use this manual at your leisure to read all about _GDBN__. +However, a handful of commands are enough to get started using the +debugger. This chapter illustrates these commands. + +In this sample session, we emphasize user input like this: @var{input}, +to make it easier to pick out from the surrounding output. + +We'll be using _GDBN__ to inspect GNU @code{m4} (a generic macro +processor). + +_0__@smallexample +$ @var{cd gm4/common} + +$ @var{_GDBP__ m4} +Reading symbol data from m4...done. +@end smallexample + +@noindent +_GDBN__ only reads enough symbol data to know where to find the rest +when needed; as a result, the first prompt comes up very quickly. + +@smallexample +(_GDBP__) @var{break m4_changequote} +Breakpoint 1 at 0x59d4: file builtin.c, line 812. +@end smallexample + +@noindent +We've chosen to see how the @code{m4} builtin @samp{changequote} +works. We know the relevant subroutine is @samp{m4_changequote} (from +inspecting the source), so we set a breakpoint there. + +@smallexample +(_GDBP__) @var{run} +Starting program: /s1/gnu/src/gm4/common/m4 +@var{`usual' quotes } +usual quotes +@end smallexample + +@noindent +Now we've started @code{m4} running under _GDBN__ control; while we don't touch +the @samp{m4_changequote} subroutine, the program runs as usual. + +@smallexample +@var{changequote(<,>)} + +Breakpoint 1, m4_changequote (argc=3, argv=0x2b958) at builtin.c:812 +812 if (bad_argc(TOKEN_DATA_TEXT(argv[0]), argc, 1, 3)) +@end smallexample +@noindent +Once we've encountered the breakpoint, _GDBN__ suspends execution +of our program, displaying information about where it stopped. + +@smallexample +(_GDBP__) @var{s} +bad_argc (name=0xf833cfb4
, argc=3, min=1, max=3) at builtin.c:230 +230 if (min > 0 && argc < min) @{ +@end smallexample +@noindent +We single-stepped with the command @samp{s}; since there was a subroutine +call, we've stopped in the first line of that subroutine, not in the next line +of @code{m4_changequote}. + +The command @samp{next} would have taken us to the next line of the same +subroutine. Now that we've stopped deeper in the stack, we can use the +@samp{backtrace} command (which can also be spelled @samp{bt}) to get +information about where we are. + +@smallexample +(_GDBP__) @var{bt} +#0 bad_argc (name=0xf833cfb4
, argc=3, + min=1, max=3) at builtin.c:230 +#1 0x59ec in m4_changequote (argc=3, argv=0x2b958) at builtin.c:812 +#2 0x6e38 in expand_macro (sym=0x2b060) at macro.c:242 +#3 0x6840 in expand_token (obs=0x0, t=176224, td=0xf7fffb08) at macro.c:71 +#4 0x6794 in expand_input () at macro.c:40 +#5 0x28dc in main (argc=0, argv=0xf7fffbf8) at m4.c:174 +@end smallexample + +@noindent +We'll tell _GDBN__ to finish execution of this subroutine, to get back +to @code{m4_changequote}. + +@smallexample +(_GDBP__) @var{finish} +Run till exit from #0 bad_argc (name=0xf833cfb4
, argc=3, min=1, max=3) at builtin.c:230 +0x59ec in m4_changequote (argc=3, argv=0x2b958) at builtin.c:812 +812 if (bad_argc(TOKEN_DATA_TEXT(argv[0]), argc, 1, 3)) +Value returned is $1 = false +(_GDBP__) @var{s} +815 lquote = (argc >= 2) ? TOKEN_DATA_TEXT(argv[1])[0] : DEF_LQUOTE; +(_GDBP__) @var{whatis lquote} +type = char +(_GDBP__) @var{p lquote} +$2 = 96 '`' +@end smallexample + +@noindent +When we stepped to another line, @code{m4} was about to set a variable +@samp{lquote}; we inspected its type with @samp{whatis} and its value +with @samp{p} (the @samp{print} command). We can see some context by +displaying the surrounding source code, with the @samp{l} (@code{list}) +command. + +@smallexample +(_GDBP__) @var{l} +810 token_data **argv; +811 @{ +812 if (bad_argc(TOKEN_DATA_TEXT(argv[0]), argc, 1, 3)) +813 return; +814 +815 lquote = (argc >= 2) ? TOKEN_DATA_TEXT(argv[1])[0] : DEF_LQUOTE; +816 rquote = (argc >= 3) ? TOKEN_DATA_TEXT(argv[2])[0] : DEF_RQUOTE; +817 @} +818 +819 /* +(_GDBP__) @var{s} +816 rquote = (argc >= 3) ? TOKEN_DATA_TEXT(argv[2])[0] : DEF_RQUOTE; +(_GDBP__) @var{s} +817 @} +(_GDBP__) @var{p lquote} +$3 = 60 '<' +(_GDBP__) @var{p rquote} +$4 = 62 '>' +@end smallexample + +@noindent +We proceeded past another line with @samp{s}, and inspected the new +values of @code{m4}'s internal variables @code{rquote} and +@code{lquote}. + +Since we're done with our inspection of this subroutine, we'll tell +_GDBN__ to allow @code{m4} to continue running, with the @samp{c} +(@code{continue}) command: + +@smallexample +(_GDBP__) @var{c} +Continuing. + +@var{`usual' quotes } +`usual' quotes not these + +Program exited normally. +(_GDBP__) @var{quit} + +$ +_1__@end smallexample + +@noindent +Finally, when we ended the @code{m4} run, _GDBN__ told us +``@code{Program exited normally.}'' We ended our _GDBN__ session with +the _GDBN__ @samp{quit} command. + + +@node Starting and Stopping,,, +@chapter Starting and Stopping + +@node Starting _GDBN__,,, +@section Starting _GDBN__ _GDBN__ is invoked with the shell command @samp{_GDBP__}. Once started, it reads commands from the terminal until you tell it to exit. -The most usual way to start _GDBN__ is with one argument or two, specifying -an executable program as the argument: +You can start by just calling @samp{_GDBP__} with no arguments or +options; but the most usual way to start _GDBN__ is with one argument or +two, specifying an executable program as the argument: @example _GDBP__ program @end example @@ -245,7 +408,7 @@ in sequential order. The order makes a difference when the @samp{-x} option is used. @node File Options, Mode Options, Invocation, Invocation -@section Options and Arguments to Choose Files +@subsection Options and Arguments to Choose Files As shown above, any arguments other than options specify an executable file and core file; that is, the first argument encountered with no @@ -275,8 +438,8 @@ Execute _GDBN__ commands from file @var{file}. @xref{Command Files}. Add @var{directory} to the path to search for source files. @end table -@node Mode Options, Remote i960-Nindy, File Options, Invocation -@section Options to Choose Modes +@node Mode Options, , , +@subsection Options to Choose Modes @table @code @item -nx @@ -323,7 +486,7 @@ _GDBN__ for remote debugging. _if__(_I960__) @node i960-Nindy Remote,,, -@section _GDBN__ with a Remote Intel 960 (Nindy) +@subsection _GDBN__ with a Remote Intel 960 (Nindy) ``Nindy'' is the name of a Rom Monitor program for Intel 960 target systems. When _GDBN__ is configured to control a remote Intel 960 using @@ -341,7 +504,7 @@ By using the @samp{target} command at any point during your _GDBN__ session. @end itemize @node Nindy Startup,,, -@subsection Startup with Nindy +@subsubsection Startup with Nindy The command-line options for Nindy are detailed below. If you simply start @code{_GDBP__} without using options to specify a serial port, you are @@ -355,7 +518,7 @@ responding to the prompt with an empty line. If you do this, and later wish to attach to Nindy, use @samp{target} (@pxref{Target Commands}). @node Nindy Options,,, -@subsection Options for Nindy +@subsubsection Options for Nindy These are the startup options for beginning your _GDBN__ session with a Nindy-960 board attached: @@ -402,7 +565,7 @@ _fi__(_I960__) _if__(_AMD29K__) @node EB29K Remote,,, -@section Starting _GDBN__ with a Remote EB29K +@subsection _GDBN__ with a Remote EB29K @cindex EB29K board @cindex running 29K programs @@ -415,12 +578,12 @@ you've hooked the cable between the PC's @samp{COM1} port and @samp{/dev/ttya} on the Unix system. @node Comms (EB29K),,, -@subsection Communications Setup +@subsubsection Communications Setup The next step is to set up the PC's port, by doing something like the following in DOS on the PC: -@example +_0__@example C:\> MODE com1:9600,n,8,1,none -@end example +_1__@end example @noindent This example---run on an MS DOS 4.0 system---sets the PC port to 9600 bps, no parity, eight data bits, one stop bit, and no ``retry'' action; @@ -431,9 +594,9 @@ end of the connection as well. To give control of the PC to the Unix side of the serial line, type the following at the DOS console: -@example +_0__@example C:\> CTTY com1 -@end example +_1__@end example @noindent (Later, if you wish to return control to the DOS console, you can use the command @samp{CTTY con}---but you must send it over the device that @@ -472,7 +635,7 @@ start the PC program @samp{EBMON} (an EB29K control program supplied with your board by AMD). You should see an initial display from @code{EBMON} similar to the one in our example, ending with the @code{EBMON} prompt @samp{#}--- -@example +_0__@example C:\> g: G:\> CD \usr\joe\work29k @@ -501,7 +664,7 @@ Am29027 Available = No Byte Write Available = Yes # ~. -@end example +_1__@end example Then exit the @code{cu} or @code{tip} program (done in the example by typing @code{~.} at the @code{EBMON} prompt). @code{EBMON} will keep @@ -516,8 +679,8 @@ other way---perhaps floppy-disk transfer---of getting the 29K program from the Unix system to the PC; _GDBN__ will @emph{not} download it over the serial line. -@node _GDBP__-EB29K -@subsection EB29K cross-debugging +@node _GDBP__-EB29K,,, +@subsubsection EB29K cross-debugging Finally, @code{cd} to the directory containing an image of your 29K program on the Unix system, and start _GDBN__---specifying as argument the name of your 29K program: @@ -558,7 +721,7 @@ Type @samp{CTTY con} to return command input to the main DOS console, and type @samp{~.} to leave @code{tip} or @code{cu}. @node Remote Log, , Remote Commands, Remote -@subsection Remote Log +@subsubsection Remote Log @kindex eb.log @cindex log file for EB29K The @samp{target amd-eb} command creates a file @file{eb.log} in the @@ -569,9 +732,54 @@ another window often helps to debug trouble with @code{EBMON}, or unexpected events on the PC side of the connection. _fi__(_AMD29K__) -@node User Interface, Files, Invocation, Top -@chapter _GDBN__ Commands and Displays +@node Stopping _GDBN__,,, +@section Stopping _GDBN__ +@cindex exiting _GDBN__ +@kindex quit +To exit _GDBN__, use the @samp{quit} command (abbreviated @samp{q}), or type +an end-of-file character (usually @kbd{C-d}). +@cindex interrupt +An interrupt (often @kbd{C-c}) will not exit from _GDBN__, but rather +will terminate the action of any _GDBN__ command that is in progress and +return to _GDBN__ command level. It is safe to type the interrupt +character at any time because _GDBN__ does not allow it to take effect +until a time when it is safe. + +If you've been using _GDBN__ to control an attached process or device, +you can release it with the @samp{detach} command; @pxref{Attach}. + +@node Shell Commands,,, +@section Shell Commands +If you just need to execute occasional shell commands during your +debugging session, there's no need to stop or suspend _GDBN__; you can +just use the @samp{shell} command. + +@table @code +@item shell @var{command string} +@kindex shell +@cindex shell escape +Directs _GDBN__ to invoke an inferior shell to execute @var{command string}. +The environment variable @code{SHELL} is used if it exists, otherwise _GDBN__ +uses @samp{/bin/sh}. +@end table + +The utility @samp{make} is often needed in development environments. +You don't have to use the @samp{shell} command for this purpose in _GDBN__: + +@table @code +@item make @dots{} +@kindex make +@cindex calling make +Causes _GDBN__ to execute an inferior @code{make} program with the specified +arguments. This is equivalent to @samp{shell make @dots{}}. +@end table + +@node Commands,,, +@chapter _GDBN__ Commands + +@node Command Syntax,,, +@section Command Syntax A _GDBN__ command is a single line of input. There is no limit on how long it can be. It starts with a command name, which is followed by arguments whose meaning depends on the command name. For example, the command @@ -599,585 +807,114 @@ differently when repeated because that is more useful. A line of input starting with @samp{#} is a comment; it does nothing. This is useful mainly in command files (@xref{Command Files}). +@node Help,,, +@section Getting Help @cindex online documentation @kindex help +You can always ask _GDBN__ itself for information on its commands, using the +command @samp{help}. + @table @code @item help -@itemx help @var{category} -@itemx help @var{command} -You can always ask _GDBN__ itself for information on its commands, using the -command @samp{help}. With a command name as argument, it will display a -paragraph on how to use the command. Used with no arguments, -@samp{help} displays a short list of named categories of commands; you -can then use @samp{help @var{category}} to list the individual commands -in a category. +Used with no arguments, @samp{help} displays a short list of named +categories of commands: +@example +(_GDBP__) help +List of classes of commands: -@kindex info version -@item info version -As _GDBN__ evolves, new commands are introduced, and old ones may wither -away. If multiple versions of _GDBN__ are in use at your site, it may -occasionally be useful to make sure what version of _GDBN__ you're running. -_GDBN__ announces its version whenever it starts up; but you can make it -repeat this information with the @samp{info version} command. +running -- Running the program +stack -- Examining the stack +data -- Examining data +breakpoints -- Making program stop at certain points +files -- Specifying and examining files +status -- Status inquiries +support -- Support facilities +user-defined -- User-defined commands +aliases -- Aliases of other commands +obscure -- Obscure features + +Type "help" followed by a class name for a list of commands in that class. +Type "help" followed by command name for full documentation. +Command name abbreviations are allowed if unambiguous. +(_GDBP__) +@end example + +@item help @var{category} +Using one of the general help categories as an argument, you can get a +list of the individual commands in a category. For example, here is the +help display for category @samp{status}: +@example +(_GDBP__) help status +Status inquiries. + +List of commands: + +show -- Generic command for showing things set with "set" +info -- Generic command for printing status + +Type "help" followed by command name for full documentation. +Command name abbreviations are allowed if unambiguous. +(_GDBP__) +@end example + +@item help @var{command} +With a command name as @samp{help} argument, _GDBN__ will display a +short paragraph on how to use that command. @end table -@cindex prompt -_GDBN__ indicates its readiness to read a command by printing a string -called the @dfn{prompt}. This string is normally @samp{(_GDBP__)}. You can -change the prompt string with the @samp{set prompt} command. For -instance, when debugging _GDBN__ with _GDBN__, it is useful to change the prompt -in one of the _GDBN__s so that you tell which one you are talking to. +In addition to @samp{help}, you can use the _GDBN__ commands @samp{info} +and @samp{show} to inquire about the state of your program, or the state +of _GDBN__ itself. Both commands support many ``sub-commands'', or +topics of inquiry; this manual introduces each of them in the +appropriate context. The listings under ``@code{info}'' and under +``@code{show}'' in the Index point to all the sub-commands +(@pxref{Index}). @table @code -@item set prompt @var{newprompt} -@kindex set prompt -Directs _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 - -@cindex exiting _GDBN__ -@kindex quit -To exit _GDBN__, use the @samp{quit} command (abbreviated @samp{q}), or type -an end-of-file character (usually @ctrl{d}). An interrupt (often -@ctrl{c}) will not exit from _GDBN__, but rather will terminate the action -of any _GDBN__ command that is in progress and return to _GDBN__ command level. -It is safe to type the interrupt character at any time because _GDBN__ does -not allow it to take effect until a time when it is safe. - -@cindex readline -@cindex command line editing -@cindex history substitution -_GDBN__ reads its input commands via the @code{readline} interface. This -GNU library provides consistent behavior for programs which provide a -command line interface to the user. Advantages are @samp{emacs}-style -or @samp{vi}-style inline editing of commands, @samp{csh}-like history -substitution, and a storage and recall of command history across -debugging sessions. - -You may control the behavior of command line editing in _GDBN__ with the -command @samp{set}. You may check the status of any of these settings -with the command @samp{show}. - -@table @code -@kindex set editing -@cindex editing -@item set editing -@itemx set editing on -Enable command line editing (enabled by default). - -@item set editing off -Disable command line editing. - -@kindex show editing -@item show editing -Show whether command line editing is enabled. - -@cindex history file -@kindex set history file -@item set history file @var{filename} -Set the name of the _GDBN__ command history file to @samp{filename}. This is -the file from which _GDBN__ will read an initial command history -list or to which it will write this list when it exits. This list is -accessed through history expansion or through the history -command editing characters listed below. This file defaults to the -value of the environmental variable @code{GDBHISTFILE}, or to -@code{./.gdb_history} if this variable is not set. - -@cindex history write -@kindex set history write -@item set history write -@itemx set history write on -Make _GDBN__ record command history in a file, whose name may be specified with the -@samp{set history file} command. By default, this option is disabled. - -@item set history write off -Make _GDBN__ stop recording command history in a file. - -@cindex history size -@kindex set history size -@item set history size @var{size} -Set the number of commands which _GDBN__ will keep in its history list. -This defaults to the value of the environmental variable -@code{HISTSIZE}, or to 256 if this variable is not set. -@end table - -@cindex history expansion -History expansion assigns special meaning to the character @samp{!} -(@pxref{Event Designators}). Since @samp{!} is also the logical not -operator in C, history expansion is off by default. If you decide to -enable history expansion with the @samp{set history expansion on} -command, you may sometimes need to follow @samp{!} (when it is used as -logical not, in an expression) with a space or a tab to prevent it from -being expanded. The @code{readline} history facilities will not attempt -substitution on the strings @samp{!=} and @samp{!(}, even when history -expansion is enabled. - -The commands to control history expansion are: - -@table @code - -@kindex set history expansion -@item set history expansion on -@itemx set history expansion -Enable history expansion. History expansion is off by default. - -@item set history expansion off -Disable history expansion. - -The @code{readline} code comes with more complete documentation of -editing and history expansion features. Users unfamiliar with @samp{emacs} -or @samp{vi} may wish to read it. @xref{Command Line Editing}. - -@kindex show history -@item show history -@itemx show history file -@itemx show history write -@itemx show history size -@itemx show history expansion -These commands display the state of the _GDBN__ history parameters. -@samp{show history} by itself displays all four states. +@kindex info +@item info +This command is for describing the state of your program; for example, +it can list the arguments given to your program (@samp{info args}), the +registers currently in use (@samp{info registers}), or the breakpoints +you've set (@samp{info breakpoints}). You can get a complete list of +the @code{info} sub-commands with @samp{help info}. @kindex show -@kindex info set @item show -@itemx info set -This chapter introduces a number of internal _GDBN__ variables that you -can control with the @samp{set} command, and display with the -@samp{show} command. A number of others are introduced throughout the -manual. To display all the settable parameters and their current +In contrast, @samp{show} is for describing the state of _GDBN__ itself. +You can change most of the things you can @code{show}, by using the +related command @samp{set}; for example, you can control what number +system is used for displays with @samp{set radix}, or simply inquire +which possibility is currently in use with @samp{show radix}. + +@kindex info set +To display all the settable parameters and their current values, you can use @samp{show} with no arguments; you may also use @samp{info set}. Both commands produce the same display. +@c FIXME: "info set" violates the rule that "info" is for state of +@c FIXME...program. Ck w/ GNU: "info set" to be called something else, +@c FIXME...or change desc of rule---eg "state of prog and debugging session"? + + +@kindex show version +@item show version +@c FIXME: chgd to "show version" from "info". Verify John doing same to GDBv4. +This @samp{show} subcommand is one of those with no corresponding +@samp{set} subcommand. As _GDBN__ evolves, new commands are introduced, +and old ones may wither away. If multiple versions of _GDBN__ are in +use at your site, it may occasionally be useful to make sure what +version of _GDBN__ you're running. It is also useful to include this +information in _GDBN__ bug-reports. _GDBN__ announces its version +number if you start it with no arguments; but you can make it give this +information on request, with the @samp{show version} command. @end table -@table @code -@kindex info editing -@item info editing -Display the last ten commands in the command history. +@node Running,,, +@chapter Running Programs Under _GDBN__ -@item info editing @var{n} -Print ten commands centered on command number @var{n}. - -@item info editing + -Print ten commands just after the commands last printed. - -@end table - -Occasionally it is useful to execute a shell command from within _GDBN__. -This can be done with the @samp{shell} command. - -@table @code -@item shell @var{command string} -@kindex shell -@cindex shell escape -Directs _GDBN__ to invoke an inferior shell to execute @var{command string}. -The environment variable @code{SHELL} is used if it exists, otherwise _GDBN__ -uses @samp{/bin/sh}. -@end table - -The utility @samp{make} is often needed in development environments. -You don't have to use the @samp{shell} command for this purpose in _GDBN__: - -@table @code -@item make @dots{} -@kindex make -@cindex calling make -Causes _GDBN__ to execute an inferior @code{make} program with the specified -arguments. This is equivalent to @samp{shell make @dots{}}. -@end table - -@cindex screen size -@cindex pauses in output -Certain commands to _GDBN__ may produce large amounts of information output -to the screen. To help you read all of it, _GDBN__ pauses and asks you for -input at the end of each page of output. Type @key{RET} when you want -to continue the output. Normally _GDBN__ knows the size of the screen from -the termcap data base together with the value of the @code{TERM} -environment variable and the @code{stty rows} and @code{stty cols} -settings. If this is not correct, you can override it with -the @samp{set screen-height} and @samp{set screen-width} commands: - -_GDBN__ also uses the screen width setting to determine when to wrap lines -of output. Depending what is being printed, it tries to break the -line at a readable place, rather than simply letting it overflow onto -the following line. - -@table @code -@item set screen-height @var{lpp} -@itemx show screen-height -@itemx set screen-width @var{cpl} -@itemx show screen-width -@kindex set screen-height -@kindex set screen-width -@kindex show screen-width -@kindex show screen-height -These @samp{set} commands specify a screen height of @var{lpp} lines and -a screen width of @var{cpl} characters. The associated @samp{show} -commands display the current settings. - -If you specify a height of zero lines, _GDBN__ will 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. -@end table - -@cindex number representation -@cindex entering numbers -You can always enter numbers in octal, decimal, or hexadecimal in _GDBN__ by -the usual conventions: octal numbers begin with @samp{0}, decimal -numbers end with @samp{.}, and hexadecimal numbers begin with @samp{0x}. -Numbers that begin with none of these are, by default, entered in base -10; likewise, the default display for numbers---when no particular -format is specified---is base 10. You can change the default base for -both input and output with the @samp{set radix} command. - -@table @code -@kindex set radix -@item set radix @var{base} -Set the default base for numeric input and display. Supported choices -for @var{base} are decimal 8, 10, 16. @var{base} must itself be -specified either unambiguously or using the current default radix; for -example, any of - -@example -set radix 012 -set radix 10. -set radix 0xa -@end example - -@noindent -will set the base to decimal. On the other hand, @samp{set radix 10} -will leave the radix unchanged no matter what it was. - -@kindex show radix -@item show radix -Display the current default base for numeric input and display. - -@end table - -By default, _GDBN__ is silent about its inner workings. If you are running -on a slow machine, you may want to use the @samp{set verbose} command. -It will make _GDBN__ tell you when it does a lengthy internal operation, so -you won't think it has crashed. - -Currently, the messages controlled by @samp{set verbose} are those which -announce that the symbol table for a source file is being read -(@pxref{Files}, in the description of the command -@samp{symbol-file}). -@c The following is the right way to do it, but emacs 18.55 doesn't support -@c @ref, and neither the emacs lisp manual version of texinfmt or makeinfo -@c is released. -@ignore -see @samp{symbol-file} in @ref{Files}). -@end ignore - -@table @code -@kindex set verbose -@item set verbose on -Enables _GDBN__'s output of certain informational messages. - -@item set verbose off -Disables _GDBN__'s output of certain informational messages. - -@kindex show verbose -@item show verbose -Displays whether @samp{set verbose} is on or off. -@end table - -By default, if _GDBN__ encounters bugs in the symbol table of an object file, -it prints a single message about each type of problem it finds, then -shuts up. You can suppress these messages, or allow more than one such -message to be printed if you want to see how frequent the problems are. -@xref{Files}. - -@table @code -@kindex set complaints -@item set complaints @var{limit} -Permits _GDBN__ to output @var{limit} complaints about each type of unusual -symbols before becoming silent about the problem. Set @var{limit} to -zero to suppress all complaints; set it to a large number to prevent -complaints from being suppressed. - -@kindex show complaints -@item show complaints -Displays how many symbol complaints _GDBN__ is permitted to produce. -@end table - -By default, _GDBN__ is cautious, and asks what sometimes seem to be a lot of -stupid questions. For example, if you try to run a program which is -already running: -@example - -(_GDBP__) run -The program being debugged has been started already. -Start it from the beginning? (y or n) -@end example - -If you're willing to unflinchingly face the consequences of your own -commands, you can disable this ``feature'': - -@table @code -@kindex set caution -@cindex flinching -@cindex stupid questions -@item set caution off -Disables cautious questions. - -@item set caution on -Enables cautious questions (the default). - -@item show caution -@kindex show caution -Displays state of cautious questions. -@end table - -@node Files, Compilation, User Interface, Top -@chapter Specifying _GDBN__'s Files - -@cindex core dump file -@cindex executable file -@cindex symbol table -_GDBN__ needs to know the file name of the program to be debugged, both in -order to read its symbol table and in order to start the program. To -debug a core dump of a previous run, _GDBN__ must be told the file name of -the core dump. - -The usual way to specify the executable and core dump file names is with -the command arguments given when you start _GDBN__, as discussed in -@pxref{Invocation}. - -But occasionally it is necessary to change to a different file during a -_GDBN__ session. Or you may run _GDBN__ and forget to specify the files you -want to use. In these situations the _GDBN__ commands to specify new files -are useful. - -@table @code -@item file @var{filename} -@kindex file -Use @var{filename} as the program to be debugged. It is read for its -symbols, for getting the contents of pure memory, and it is the program -executed when you use the @samp{run} command. If you do not specify a -directory and the file is not found in _GDBN__'s working directory, _GDBN__ will -use the environment variable @code{PATH} as a list of directories to -search, just as the shell does when looking for a program to run. - -@samp{file} with no argument makes both executable file and symbol -table become unspecified. - -@item exec-file @var{filename} -@kindex exec-file -Specify that the program to be run (but not the symbol table) is found -in @var{filename}. _GDBN__ will search the environment variable @code{PATH} -if necessary to locate the program. - -@item symbol-file @var{filename} -@kindex symbol-file -Read symbol table information from file @var{filename}. @code{PATH} is -searched when necessary. Use the @samp{file} command to get both symbol -table and program to run from the same file. - -@samp{symbol-file} with no argument clears out _GDBN__'s information on your -program's symbol table. - -The @samp{symbol-file} command causes _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 _GDBN__. - -On some kinds of object files, the @samp{symbol-file} command does not -actually 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, -when they are needed. - -The purpose of this two-stage reading strategy is to make _GDBN__ start up -faster. For the most part, it is invisible except for occasional pauses -while the symbol table details for a particular source file are being -read. (The @samp{set verbose} command can turn these pauses into -messages if desired. @xref{User Interface}). - -When the symbol table is stored in COFF format, @samp{symbol-file} does -read the symbol table data in full right away. We haven't implemented -the two-stage strategy for COFF yet. - -When _GDBN__ is configured for a particular environment, it will understand -debugging information in whatever format is the standard generated for -that environment; you may use either the GNU compiler _GCC__, or other -compilers that adhere to the local conventions. Best results are -usually obtained from _GCC__; for example, using _GCC__ you can generate -debugging information for optimized code. - -While the symbol file is being read, _GDBN__ will occasionally encounter -problems, such as symbol types it does not recognize, or known bugs in -compiler output. By default, it prints one message about each such -type of problem, no matter how many times the problem occurs. You can -ask it to print more messages, to see how many times the problems occur, -or can shut the messages off entirely, with the @samp{set -complaints} command (@xref{User Interface}). - -The messages currently printed, and their meanings, are: - -@table @code -@item inner block not inside outer block in @var{symbol} - -The symbol information shows where symbol scopes begin and end -(such as at the start of a function or a block of statements). This -error indicates that an inner scope block is not fully contained -in its outer scope blocks. _GDBN__ circumvents the problem by treating -the inner block as if it had the same scope as the outer block. -@var{symbol} may be ``(don't know)'' if the outer block is not -a function. - -@item block at @var{address} out of order - -The symbol information for symbol scope blocks should occur in -order of increasing addresses. This error indicates that it does not -do so. _GDBN__ does not circumvent this problem, and will have trouble -locating symbols in the source file whose symbols being read. (You -can often determine what source file is affected by turning on -@samp{info verbose}. @xref{User Interface}.) - -@item bad block start address patched - -The symbol information for a symbol scope block has a start address -smaller than the address of the preceding source line. This is known -to occur in the SunOS 4.1.1 (and earlier) C compiler. _GDBN__ circumvents -the problem by treating the symbol scope block as starting on the -previous source line. - -@comment @item{encountered DBX-style class variable debugging information. -@comment You seem to have compiled your program with "g++ -g0" instead of "g++ -g". -@comment Therefore _GDBN__ will not know about your class variables} -@comment -@comment This error indicates that the symbol information produced for a C++ -@comment program includes zero-size fields, which indicated static fields in -@comment a previous release of the G++ compiler. This message is probably -@comment obsolete. -@comment -@item bad string table offset in symbol @var{n} - -Symbol number @var{n} contains a pointer into the string table which is -larger than the size of the string table. _GDBN__ circumvents the problem -by considering the symbol to have the name @code{foo}, which may cause -other problems if many symbols end up with this name. @cindex{foo} - -@item unknown symbol type @code{0xNN} - -The symbol information contains new data types that _GDBN__ does not yet -know how to read. @code{0xNN} is the symbol type of the misunderstood -information, in hexadecimal. _GDBN__ circumvents the error by ignoring -this symbol information. This will usually allow the program to be -debugged, though certain symbols will not be accessible. If you -encounter such a problem and feel like debugging it, you can debug _GDBP__ -with itself, breakpoint on "complain", then go "up" to -read_dbx_symtab() and examine *bufp to see the symbol. - -@c @item stub type has NULL name -@c -@c FIXME, Mike Tiemann needs to write about what this means. - -@item const/volatile indicator missing, got 'X' - -The symbol information for a C++ type is missing some information that -the compiler should have output for it. - -@item C++ type mismatch between compiler and debugger - -The debugger could not parse a type specification output by the compiler -for some C++ object. - -@end table - -@item core-file @var{filename} -@itemx core @var{filename} -@kindex core -@kindex core-file -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; _GDBN__ can access the -executable file itself for other parts. - -@samp{core-file} with no argument specifies that no core file is -to be used. - -Note that the core file is ignored when your program is actually running -under _GDBN__. So, if you have been running the program and you wish to -debug a core file instead, you must kill the subprocess in which the -program is running. To do this, use the @samp{kill} command -(@pxref{Kill Process}). - -@item load @var{filename} -@kindex load -This command will dynamically link @var{filename} on the current target, -performing any necessary downloads, then add @var{filename}'s symbol -table in the same way as the @samp{add-syms} command. - -@item add-syms @var{filename} @var{address} -@kindex add-syms -@cindex dynamic linking -The @samp{add-syms} command reads additional symbol table information -from the file @var{filename}. You would use this command when that file -has been dynamically loaded (by some other means) into the program that -is running. @var{address} should be the memory address at which the -file has been loaded; _GDBN__ cannot figure this out for itself. - -The symbol table of the file @var{filename} is added to the symbol table -originally read with the @samp{symbol-file} command. You can use the -@samp{add-syms} command any number of times; the new symbol data thus -read keeps adding to the old. The @samp{symbol-file} command forgets -all the symbol data _GDBN__ has read. - -@item info files -@itemx info target -@kindex info files -@kindex info target -@samp{info files} and @samp{info target} are synonymous; both print the -current targets (@pxref{Targets}), including the names of the -executable and core dump files currently in use by _GDBN__, and the files -from which symbols were loaded. - -Beware: the similar command @samp{info targets} lists all possible -targets rather than current ones. - -@end table - -While all three file-specifying commands allow both absolute and relative -file names as arguments, _GDBN__ always converts the file name to an absolute -one and remembers it that way. - -@kindex sharedlibrary -@kindex share -@cindex shared libraries - -_GDBN__ supports the SunOS shared library format. Symbols from a shared -library cannot be referenced before the shared library has been linked -with the program. (That is to say, after one types @samp{run} and -the function @code{main()} has been entered; or when examining core -files.) Once the shared library has been linked in, you can use the -following commands: - -@table @code -@item sharedlibrary @var{regex} -@itemx share @var{regex} -Load shared object library symbols for files matching a UNIX regular -expression. - -@item share -@itemx sharedlibrary -Load symbols for all shared libraries. - -@item info share -@itemx info sharedlibrary -@kindex info sharedlibrary -@kindex info share -Print the names of the shared libraries which are currently loaded. -@end table - - -@node Compilation, Targets, Files, Top -@chapter Compiling for Debugging +@node Compilation,,, +@section Compiling for Debugging In order to debug a program effectively, you need to ask for debugging information when you compile it. This debugging information is stored @@ -1222,138 +959,10 @@ option or use shorter file names. Alternatively, use a version of GNU @code{ar} dated more recently than August 1989. @end ignore -@node Targets, Running, Compilation, Top -@chapter Specifying a Debugging Target -@cindex debugging target -@kindex target -A @dfn{target} is an interface between the debugger and a particular -kind of file or process. - -Often, you will be able to run _GDBN__ in the same host environment as the -program you are debugging; in that case, the debugging target can just be -specified as a side effect of the @samp{file} or @samp{core} commands. -When you need more flexibility---for example, running _GDBN__ on a -physically separate host, controlling standalone systems over a -serial port, or realtime systems over a TCP/IP connection---you can use -the @samp{target} command. - -@menu -* Active Targets:: Active Targets -* Target Commands:: Commands for Managing Targets -@end menu - -@node Active Targets, Target Commands, Targets, Targets -@section Active Targets -@cindex stacking targets -@cindex active targets -@cindex multiple targets - -Targets are managed in three @dfn{strata} that correspond to different -classes of target: processes, core files, and executable files. This -allows you to (for example) start a process and inspect its activity -without abandoning your work on a core file. - -More than one target can potentially respond to a request. In -particular, when you access memory _GDBN__ will walk down the three strata of -targets until it finds a target that can handle that particular address. - -Strata are always examined in a fixed order: first a process if there is -one, then a core file if there is one, and finally an executable file if -there is one of those. - -When you specify a new target in a given stratum, it replaces any target -previously in that stratum. - -To get rid of a target without replacing it, use the @samp{detach} -command. The related command @samp{attach} provides you with a way of -choosing a particular running process as a new target. @xref{Attach}. - -@node Target Commands, , Active Targets, Targets -@section Commands for Managing Targets - -@table @code -@item target @var{type} @var{parameters} -Connects the _GDBN__ host environment to a target machine or process. A -target is typically a protocol for talking to debugging facilities. You -use the argument @var{type} to specify the type or protocol of the -target machine; for example, @samp{target vxworks} for a TCP/IP link to -a VxWorks system. - -Further @var{parameters} are interpreted by the target protocol, but -typically include things like device names or host names to connect -with, process numbers, and baud rates. Executing -@example - target @var{type} -@end example - -@noindent -(without any parameters) will issue a message about what -parameters are required for that target type. - -@item info targets -@kindex info targets -Displays the names of all targets available. Beware: the similar -command @samp{info target} displays targets currently in use rather than -all available ones. @samp{info files} gives the same information as -@samp{info target} (@pxref{Files}). -@end table - -Here are some common targets (available, or not, depending on _GDBN__ -configuration): - -@table @code -@item target exec @var{prog} -@kindex target exec -An executable file. @samp{target exec @var{prog}} is the same as -@samp{exec-file @var{prog}}. - -@item target core @var{filename} -@kindex target core -A core dump file. @samp{target core @var{filename}} is the same as -@samp{core-file @var{filename}}. - -@item target remote @var{dev} -@kindex target remote -Remote serial target in _GDBP__-specific protocol. The argument @var{dev} -specifies what serial device to use for the connection (e.g. -@code{/dev/ttya}). - -_if__(_AMD29K__) -@item target amd-eb @var{dev} @var{speed} @var{PROG} -@kindex target amd-eb -@cindex AMD EB29K -Remote PC-resident AMD EB29K board, attached over serial lines. -@var{dev} is the serial device, as for @samp{target remote}; -@samp{speed} allows you to specify the linespeed; and @var{PROG} is the -name of the program to be debugged, as it appears to DOS on the PC. -@xref{AMD29K Remote}. - -_fi__(_AMD29K__) -_if__(_I960__) -@item target nindy @var{devicename} -@kindex target nindy -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. -@samp{/dev/ttya}. - -_fi__(_I960__) -_if__(_VXWORKS__) -@item target vxworks @var{machinename} -@kindex target vxworks -A VxWorks system, attached via TCP/IP. The argument @var{machinename} -is the target system's machine name or IP address. - -_fi__(_VXWORKS__) -@end table - -_if__(_GENERIC__) -Different targets are available on different configurations of _GDBN__; your -configuration may have more or fewer targets. -_fi__(_GENERIC__) - -@node Running, Stopping, Targets, Top -@chapter Running Programs Under _GDBN__ +@node Starting,,, +@section Starting your Program +@cindex starting @cindex running @kindex run To start your program under _GDBN__, use the @samp{run} command. Except on @@ -1528,9 +1137,9 @@ terminal that _GDBN__ uses. You can redirect the program's input and/or output using @samp{sh}-style redirection commands in the @samp{run} command. For example, -@example +_0__@example run > outfile -@end example +_1__@end example @noindent starts the program, diverting its output to the file @file{outfile}. @@ -2139,7 +1748,7 @@ is not checked. Once the ignore count reaches zero, the condition will be checked. Note that you could achieve the effect of the ignore count with a -condition such as @w{@samp{$foo-- <= 0}} using a debugger convenience +condition such as _0__@w{@samp{$foo-- <= 0}}_1__ using a debugger convenience variable that is decremented each time. @xref{Convenience Vars}. @node Break Commands, Error in Breakpoints, Conditions, Breakpoints @@ -2185,7 +1794,7 @@ controlled output are often useful in silent breakpoints. @xref{Output}. For example, here is how you could use breakpoint commands to print the value of @code{x} at entry to @code{foo} whenever it is positive. -@example +_0__@example break foo if x>0 commands silent @@ -2194,7 +1803,7 @@ output x echo \n cont end -@end example +_1__@end example One application for breakpoint commands is to correct one bug so you can test another. Put a breakpoint just after the erroneous line of code, give @@ -3248,7 +2857,7 @@ nearest preceding symbol. This format can be used to discover where (in what function) an unknown address is located: @example (_GDBP__) p/a 0x54320 -$3 = 0x54320 <_initialize_vx+396> +_0__$3 = 0x54320 <_initialize_vx+396>_1__ @end example @@ -3627,11 +3236,11 @@ Abbreviated @samp{i con}. One of the ways to use a convenience variable is as a counter to be incremented or a pointer to be advanced. For example: -@example +_0__@example set $i = 0 print bar[$i++]->contents @i{@dots{}repeat that command by typing @key{RET}.} -@end example +_1__@end example Some convenience variables are created automatically by _GDBN__ and given values likely to be useful. @@ -3868,7 +3477,7 @@ the value of the assignment expression (which is 4). All the assignment operators of C are supported, including the increment operators @samp{++} and @samp{--}, and combining -assignments such as @samp{+=} and @samp{<<=}. +assignments such as @samp{+=} and _0__@samp{<<=}_1__. @kindex set @kindex set variable @@ -4012,6 +3621,725 @@ execute some piece of 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. +@node Files,,, +@chapter _GDBN__'s Files + +@section Commands to Specify Files +@cindex core dump file +@cindex symbol table +_GDBN__ needs to know the file name of the program to be debugged, both in +order to read its symbol table and in order to start the program. To +debug a core dump of a previous run, _GDBN__ must be told the file name of +the core dump. + +The usual way to specify the executable and core dump file names is with +the command arguments given when you start _GDBN__, as discussed in +@pxref{Invocation}. + +But occasionally it is necessary to change to a different file during a +_GDBN__ session. Or you may run _GDBN__ and forget to specify the files you +want to use. In these situations the _GDBN__ commands to specify new files +are useful. + +@table @code +@item file @var{filename} +@cindex executable file +@kindex file +Use @var{filename} as the program to be debugged. It is read for its +symbols, for getting the contents of pure memory, and it is the program +executed when you use the @samp{run} command. If you do not specify a +directory and the file is not found in _GDBN__'s working directory, +_GDBN__ will use the environment variable @code{PATH} as a list of +directories to search, just as the shell does when looking for a program +to run. + +@samp{file} with no argument makes both executable file and symbol +table become unspecified. + +@item exec-file @var{filename} +@kindex exec-file +Specify that the program to be run (but not the symbol table) is found +in @var{filename}. _GDBN__ will search the environment variable @code{PATH} +if necessary to locate the program. + +@item symbol-file @var{filename} +@kindex symbol-file +Read symbol table information from file @var{filename}. @code{PATH} is +searched when necessary. Use the @samp{file} command to get both symbol +table and program to run from the same file. + +@samp{symbol-file} with no argument clears out _GDBN__'s information on your +program's symbol table. + +The @samp{symbol-file} command causes _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 _GDBN__. + +On some kinds of object files, the @samp{symbol-file} command does not +actually 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, +when they are needed. + +The purpose of this two-stage reading strategy is to make _GDBN__ start up +faster. For the most part, it is invisible except for occasional pauses +while the symbol table details for a particular source file are being +read. (The @samp{set verbose} command can turn these pauses into +messages if desired. @xref{User Interface}). + +When the symbol table is stored in COFF format, @samp{symbol-file} does +read the symbol table data in full right away. We haven't implemented +the two-stage strategy for COFF yet. + +When _GDBN__ is configured for a particular environment, it will understand +debugging information in whatever format is the standard generated for +that environment; you may use either the GNU compiler _GCC__, or other +compilers that adhere to the local conventions. Best results are +usually obtained from _GCC__; for example, using _GCC__ you can generate +debugging information for optimized code. + +@item core-file @var{filename} +@itemx core @var{filename} +@kindex core +@kindex core-file +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; _GDBN__ can access the +executable file itself for other parts. + +@samp{core-file} with no argument specifies that no core file is +to be used. + +Note that the core file is ignored when your program is actually running +under _GDBN__. So, if you have been running the program and you wish to +debug a core file instead, you must kill the subprocess in which the +program is running. To do this, use the @samp{kill} command +(@pxref{Kill Process}). + +@item load @var{filename} +@kindex load +This command will dynamically link @var{filename} on the current target, +performing any necessary downloads, then add @var{filename}'s symbol +table in the same way as the @samp{add-syms} command. + +@item add-syms @var{filename} @var{address} +@kindex add-syms +@cindex dynamic linking +The @samp{add-syms} command reads additional symbol table information +from the file @var{filename}. You would use this command when that file +has been dynamically loaded (by some other means) into the program that +is running. @var{address} should be the memory address at which the +file has been loaded; _GDBN__ cannot figure this out for itself. + +The symbol table of the file @var{filename} is added to the symbol table +originally read with the @samp{symbol-file} command. You can use the +@samp{add-syms} command any number of times; the new symbol data thus +read keeps adding to the old. The @samp{symbol-file} command forgets +all the symbol data _GDBN__ has read. + +@item info files +@itemx info target +@kindex info files +@kindex info target +@samp{info files} and @samp{info target} are synonymous; both print the +current targets (@pxref{Targets}), including the names of the +executable and core dump files currently in use by _GDBN__, and the files +from which symbols were loaded. + +Beware: the similar command @samp{info targets} lists all possible +targets rather than current ones. + +@end table + +While all three file-specifying commands allow both absolute and relative +file names as arguments, _GDBN__ always converts the file name to an absolute +one and remembers it that way. + +@kindex sharedlibrary +@kindex share +@cindex shared libraries + +_GDBN__ supports the SunOS shared library format. Symbols from a shared +library cannot be referenced before the shared library has been linked +with the program. (That is to say, after one types @samp{run} and +the function @code{main()} has been entered; or when examining core +files.) Once the shared library has been linked in, you can use the +following commands: + +@table @code +@item sharedlibrary @var{regex} +@itemx share @var{regex} +Load shared object library symbols for files matching a UNIX regular +expression. + +@item share +@itemx sharedlibrary +Load symbols for all shared libraries. + +@item info share +@itemx info sharedlibrary +@kindex info sharedlibrary +@kindex info share +Print the names of the shared libraries which are currently loaded. +@end table + +@section Errors Reading Symbols +While a symbol file is being read, _GDBN__ will occasionally encounter +problems, such as symbol types it does not recognize, or known bugs in +compiler output. By default, it prints one message about each such +type of problem, no matter how many times the problem occurs. You can +ask it to print more messages, to see how many times the problems occur, +or can shut the messages off entirely, with the @samp{set +complaints} command (@xref{User Interface}). + +The messages currently printed, and their meanings, are: + +@table @code +@item inner block not inside outer block in @var{symbol} + +The symbol information shows where symbol scopes begin and end +(such as at the start of a function or a block of statements). This +error indicates that an inner scope block is not fully contained +in its outer scope blocks. _GDBN__ circumvents the problem by treating +the inner block as if it had the same scope as the outer block. +@var{symbol} may be ``(don't know)'' if the outer block is not +a function. + +@item block at @var{address} out of order + +The symbol information for symbol scope blocks should occur in +order of increasing addresses. This error indicates that it does not +do so. _GDBN__ does not circumvent this problem, and will have trouble +locating symbols in the source file whose symbols being read. (You +can often determine what source file is affected by turning on +@samp{info verbose}. @xref{User Interface}.) + +@item bad block start address patched + +The symbol information for a symbol scope block has a start address +smaller than the address of the preceding source line. This is known +to occur in the SunOS 4.1.1 (and earlier) C compiler. _GDBN__ circumvents +the problem by treating the symbol scope block as starting on the +previous source line. + +@comment @item{encountered DBX-style class variable debugging information. +@comment You seem to have compiled your program with "g++ -g0" instead of "g++ -g". +@comment Therefore _GDBN__ will not know about your class variables} +@comment +@comment This error indicates that the symbol information produced for a C++ +@comment program includes zero-size fields, which indicated static fields in +@comment a previous release of the G++ compiler. This message is probably +@comment obsolete. +@comment +@item bad string table offset in symbol @var{n} + +Symbol number @var{n} contains a pointer into the string table which is +larger than the size of the string table. _GDBN__ circumvents the problem +by considering the symbol to have the name @code{foo}, which may cause +other problems if many symbols end up with this name. @cindex{foo} + +@item unknown symbol type @code{0xNN} + +The symbol information contains new data types that _GDBN__ does not yet +know how to read. @code{0xNN} is the symbol type of the misunderstood +information, in hexadecimal. _GDBN__ circumvents the error by ignoring +this symbol information. This will usually allow the program to be +debugged, though certain symbols will not be accessible. If you +encounter such a problem and feel like debugging it, you can debug _GDBP__ +with itself, breakpoint on "complain", then go "up" to +read_dbx_symtab() and examine *bufp to see the symbol. + +@c @item stub type has NULL name +@c +@c FIXME, Mike Tiemann needs to write about what this means. + +@item const/volatile indicator missing, got 'X' + +The symbol information for a C++ type is missing some information that +the compiler should have output for it. + +@item C++ type mismatch between compiler and debugger + +The debugger could not parse a type specification output by the compiler +for some C++ object. + +@end table + +@node Targets, Running, Compilation, Top +@chapter Specifying a Debugging Target +@cindex debugging target +@kindex target +A @dfn{target} is an interface between the debugger and a particular +kind of file or process. + +Often, you will be able to run _GDBN__ in the same host environment as the +program you are debugging; in that case, the debugging target can just be +specified as a side effect of the @samp{file} or @samp{core} commands. +When you need more flexibility---for example, running _GDBN__ on a +physically separate host, controlling standalone systems over a +serial port, or realtime systems over a TCP/IP connection---you can use +the @samp{target} command. + +@menu +* Active Targets:: Active Targets +* Target Commands:: Commands for Managing Targets +@end menu + +@node Active Targets, Target Commands, Targets, Targets +@section Active Targets +@cindex stacking targets +@cindex active targets +@cindex multiple targets + +Targets are managed in three @dfn{strata} that correspond to different +classes of target: processes, core files, and executable files. This +allows you to (for example) start a process and inspect its activity +without abandoning your work on a core file. + +More than one target can potentially respond to a request. In +particular, when you access memory _GDBN__ will walk down the three strata of +targets until it finds a target that can handle that particular address. + +Strata are always examined in a fixed order: first a process if there is +one, then a core file if there is one, and finally an executable file if +there is one of those. + +When you specify a new target in a given stratum, it replaces any target +previously in that stratum. + +To get rid of a target without replacing it, use the @samp{detach} +command. The related command @samp{attach} provides you with a way of +choosing a particular running process as a new target. @xref{Attach}. + +@node Target Commands, , Active Targets, Targets +@section Commands for Managing Targets + +@table @code +@item target @var{type} @var{parameters} +Connects the _GDBN__ host environment to a target machine or process. A +target is typically a protocol for talking to debugging facilities. You +use the argument @var{type} to specify the type or protocol of the +target machine; for example, @samp{target vxworks} for a TCP/IP link to +a VxWorks system. + +Further @var{parameters} are interpreted by the target protocol, but +typically include things like device names or host names to connect +with, process numbers, and baud rates. Executing +@example + target @var{type} +@end example + +@noindent +(without any parameters) will issue a message about what +parameters are required for that target type. + +@item info targets +@kindex info targets +Displays the names of all targets available. Beware: the similar +command @samp{info target} displays targets currently in use rather than +all available ones. @samp{info files} gives the same information as +@samp{info target} (@pxref{Files}). +@end table + +Here are some common targets (available, or not, depending on _GDBN__ +configuration): + +@table @code +@item target exec @var{prog} +@kindex target exec +An executable file. @samp{target exec @var{prog}} is the same as +@samp{exec-file @var{prog}}. + +@item target core @var{filename} +@kindex target core +A core dump file. @samp{target core @var{filename}} is the same as +@samp{core-file @var{filename}}. + +@item target remote @var{dev} +@kindex target remote +Remote serial target in _GDBP__-specific protocol. The argument @var{dev} +specifies what serial device to use for the connection (e.g. +@code{/dev/ttya}). + +_if__(_AMD29K__) +@item target amd-eb @var{dev} @var{speed} @var{PROG} +@kindex target amd-eb +@cindex AMD EB29K +Remote PC-resident AMD EB29K board, attached over serial lines. +@var{dev} is the serial device, as for @samp{target remote}; +@samp{speed} allows you to specify the linespeed; and @var{PROG} is the +name of the program to be debugged, as it appears to DOS on the PC. +@xref{EB29K Remote}. + +_fi__(_AMD29K__) +_if__(_I960__) +@item target nindy @var{devicename} +@kindex target nindy +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. +@samp{/dev/ttya}. + +_fi__(_I960__) +_if__(_VXWORKS__) +@item target vxworks @var{machinename} +@kindex target vxworks +A VxWorks system, attached via TCP/IP. The argument @var{machinename} +is the target system's machine name or IP address. + +_fi__(_VXWORKS__) +@end table + +_if__(_GENERIC__) +Different targets are available on different configurations of _GDBN__; your +configuration may have more or fewer targets. +_fi__(_GENERIC__) + +@node Remote,,, +@section Remote Debugging +@cindex remote debugging + +If you are trying to debug a program running on a machine that can't run +_GDBN__ in the usual way, it is often useful to use remote debugging. For +example, you might be debugging an operating system kernel, or debugging +a small system which does not have a general purpose operating system +powerful enough to run a full-featured debugger. Currently _GDBN__ supports +remote debugging over a serial connection, and (using Sun RPC) over a +TCP/IP connection. + +The program to be debugged on the remote machine needs to contain a +debugging device driver which talks to _GDBN__ over the serial line. The +same version of _GDBN__ that is used ordinarily can be used for this. +Several sample remote debugging drivers are distributed with _GDBN__; see +the @file{README} file in the _GDBN__ distribution for more information. + +@menu +* Remote Commands:: Commands used to start and finish remote debugging. +@end menu + +For details of the communication protocol, see the comments in the _GDBN__ +source file @file{remote.c}. + +@node Remote Commands, , Remote, Remote +@subsection Commands for Remote Debugging + +To start remote debugging, first run _GDBN__ and specify as an executable file +the program that is running in the remote machine. This tells _GDBN__ how +to find the program's symbols and the contents of its pure text. Then +establish communication using the @samp{target remote} command with a device +name as an argument. For example: + +@example +target remote /dev/ttyb +@end example + +@noindent +if the serial line is connected to the device named @file{/dev/ttyb}. This +will stop the remote machine if it is not already stopped. + +Now you can use all the usual commands to examine and change data and to +step and continue the remote program. + +To resume the remote program and stop debugging it, use the @samp{detach} +command. + +Other remote targets be available in your +configuration of _GDBN__; use @samp{info targets} to list them. + +@table @code +@item reset +@kindex reset +For a target attached through a serial line, this command sends a +``break'' to the remote target system; this is only useful if the target +has been equipped with a circuit to perform a hard reset (or some other +interesting action) when a break is detected. +@end table + +@node Controlling _GDBN__,,, +@chapter Controlling _GDBN__ + +You can alter many aspects of _GDBN__'s interaction with you by using +the @samp{set} command. + +@node Prompt,,, +@section Prompt +@cindex prompt +_GDBN__ indicates its readiness to read a command by printing a string +called the @dfn{prompt}. This string is normally @samp{(_GDBP__)}. You can +change the prompt string with the @samp{set prompt} command. For +instance, when debugging _GDBN__ with _GDBN__, it is useful to change the prompt +in one of the _GDBN__s so that you tell which one you are talking to. + +@table @code +@item set prompt @var{newprompt} +@kindex set prompt +Directs _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/History,,, +@section Command Editing and History +@cindex readline +@cindex command line editing +@cindex history substitution +_GDBN__ reads its input commands via the @code{readline} interface. This +GNU library provides consistent behavior for programs which provide a +command line interface to the user. Advantages are @samp{emacs}-style +or @samp{vi}-style inline editing of commands, @samp{csh}-like history +substitution, and a storage and recall of command history across +debugging sessions. + +You may control the behavior of command line editing in _GDBN__ with the +command @samp{set}. You may check the status of any of these settings +with the command @samp{show}. + +@table @code +@kindex set editing +@cindex editing +@item set editing +@itemx set editing on +Enable command line editing (enabled by default). + +@item set editing off +Disable command line editing. + +@kindex show editing +@item show editing +Show whether command line editing is enabled. + +@cindex history file +@kindex set history file +@item set history file @var{filename} +Set the name of the _GDBN__ command history file to @samp{filename}. This is +the file from which _GDBN__ will read an initial command history +list or to which it will write this list when it exits. This list is +accessed through history expansion or through the history +command editing characters listed below. This file defaults to the +value of the environmental variable @code{GDBHISTFILE}, or to +@code{./.gdb_history} if this variable is not set. + +@cindex history write +@kindex set history write +@item set history write +@itemx set history write on +Make _GDBN__ record command history in a file, whose name may be specified with the +@samp{set history file} command. By default, this option is disabled. + +@item set history write off +Make _GDBN__ stop recording command history in a file. + +@cindex history size +@kindex set history size +@item set history size @var{size} +Set the number of commands which _GDBN__ will keep in its history list. +This defaults to the value of the environmental variable +@code{HISTSIZE}, or to 256 if this variable is not set. +@end table + +@cindex history expansion +History expansion assigns special meaning to the character @samp{!} +(@pxref{Event Designators}). Since @samp{!} is also the logical not +operator in C, history expansion is off by default. If you decide to +enable history expansion with the @samp{set history expansion on} +command, you may sometimes need to follow @samp{!} (when it is used as +logical not, in an expression) with a space or a tab to prevent it from +being expanded. The @code{readline} history facilities will not attempt +substitution on the strings @samp{!=} and @samp{!(}, even when history +expansion is enabled. + +The commands to control history expansion are: + +@table @code + +@kindex set history expansion +@item set history expansion on +@itemx set history expansion +Enable history expansion. History expansion is off by default. + +@item set history expansion off +Disable history expansion. + +The @code{readline} code comes with more complete documentation of +editing and history expansion features. Users unfamiliar with @samp{emacs} +or @samp{vi} may wish to read it. @xref{Command Line Editing}. + +@kindex show history +@item show history +@itemx show history file +@itemx show history write +@itemx show history size +@itemx show history expansion +These commands display the state of the _GDBN__ history parameters. +@samp{show history} by itself displays all four states. + +@end table + +@table @code +@kindex info editing +@item info editing +Display the last ten commands in the command history. + +@item info editing @var{n} +Print ten commands centered on command number @var{n}. + +@item info editing + +Print ten commands just after the commands last printed. + +@end table + +@node Screen Size,,, +@section Screen Size +@cindex size of screen +@cindex pauses in output +Certain commands to _GDBN__ may produce large amounts of information output +to the screen. To help you read all of it, _GDBN__ pauses and asks you for +input at the end of each page of output. Type @key{RET} when you want +to continue the output. Normally _GDBN__ knows the size of the screen from +the termcap data base together with the value of the @code{TERM} +environment variable and the @code{stty rows} and @code{stty cols} +settings. If this is not correct, you can override it with +the @samp{set screen-height} and @samp{set screen-width} commands: + +_GDBN__ also uses the screen width setting to determine when to wrap lines +of output. Depending what is being printed, it tries to break the +line at a readable place, rather than simply letting it overflow onto +the following line. + +@table @code +@item set screen-height @var{lpp} +@itemx show screen-height +@itemx set screen-width @var{cpl} +@itemx show screen-width +@kindex set screen-height +@kindex set screen-width +@kindex show screen-width +@kindex show screen-height +These @samp{set} commands specify a screen height of @var{lpp} lines and +a screen width of @var{cpl} characters. The associated @samp{show} +commands display the current settings. + +If you specify a height of zero lines, _GDBN__ will 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. +@end table + +@node Numbers,,, +@section Numbers +@cindex number representation +@cindex entering numbers +You can always enter numbers in octal, decimal, or hexadecimal in _GDBN__ by +the usual conventions: octal numbers begin with @samp{0}, decimal +numbers end with @samp{.}, and hexadecimal numbers begin with @samp{0x}. +Numbers that begin with none of these are, by default, entered in base +10; likewise, the default display for numbers---when no particular +format is specified---is base 10. You can change the default base for +both input and output with the @samp{set radix} command. + +@table @code +@kindex set radix +@item set radix @var{base} +Set the default base for numeric input and display. Supported choices +for @var{base} are decimal 8, 10, 16. @var{base} must itself be +specified either unambiguously or using the current default radix; for +example, any of + +@example +set radix 012 +set radix 10. +set radix 0xa +@end example + +@noindent +will set the base to decimal. On the other hand, @samp{set radix 10} +will leave the radix unchanged no matter what it was. + +@kindex show radix +@item show radix +Display the current default base for numeric input and display. + +@end table + +@node Messages/Warnings,,, +@section Optional Warnings and Messages +By default, _GDBN__ is silent about its inner workings. If you are running +on a slow machine, you may want to use the @samp{set verbose} command. +It will make _GDBN__ tell you when it does a lengthy internal operation, so +you won't think it has crashed. + +Currently, the messages controlled by @samp{set verbose} are those which +announce that the symbol table for a source file is being read +(@pxref{Files}, in the description of the command +@samp{symbol-file}). +@c The following is the right way to do it, but emacs 18.55 doesn't support +@c @ref, and neither the emacs lisp manual version of texinfmt or makeinfo +@c is released. +@ignore +see @samp{symbol-file} in @ref{Files}). +@end ignore + +@table @code +@kindex set verbose +@item set verbose on +Enables _GDBN__'s output of certain informational messages. + +@item set verbose off +Disables _GDBN__'s output of certain informational messages. + +@kindex show verbose +@item show verbose +Displays whether @samp{set verbose} is on or off. +@end table + +By default, if _GDBN__ encounters bugs in the symbol table of an object file, +it prints a single message about each type of problem it finds, then +shuts up. You can suppress these messages, or allow more than one such +message to be printed if you want to see how frequent the problems are. +@xref{Files}. + +@table @code +@kindex set complaints +@item set complaints @var{limit} +Permits _GDBN__ to output @var{limit} complaints about each type of unusual +symbols before becoming silent about the problem. Set @var{limit} to +zero to suppress all complaints; set it to a large number to prevent +complaints from being suppressed. + +@kindex show complaints +@item show complaints +Displays how many symbol complaints _GDBN__ is permitted to produce. +@end table + +By default, _GDBN__ is cautious, and asks what sometimes seem to be a lot of +stupid questions. For example, if you try to run a program which is +already running: +@example + +(_GDBP__) run +The program being debugged has been started already. +Start it from the beginning? (y or n) +@end example + +If you're willing to unflinchingly face the consequences of your own +commands, you can disable this ``feature'': + +@table @code +@kindex set caution +@cindex flinching +@cindex stupid questions +@item set caution off +Disables cautious questions. + +@item set caution on +Enables cautious questions (the default). + +@item show caution +@kindex show caution +Displays state of cautious questions. +@end table + @node Sequences, Emacs, Altering, Top @chapter Canned Sequences of Commands @@ -4205,7 +4533,7 @@ All the facilities of Emacs' Shell mode are available for this purpose. @item _GDBN__ displays source code through Emacs. Each time _GDBN__ displays a stack frame, Emacs automatically finds the source file for that frame -and puts an arrow (@samp{=>}) at the left margin of the current line. +and puts an arrow (_0__@samp{=>}_1__) at the left margin of the current line. Emacs uses a separate buffer for source display, and splits the window to show both your _GDBN__ session and the source. @@ -4330,66 +4658,6 @@ environment. Users of this environment can use a new command, each value is printed in its own window. @end ignore -@node Remote, _GDBN__ Bugs, Emacs, Top -@chapter Remote Debugging -@cindex remote debugging - -If you are trying to debug a program running on a machine that can't run -_GDBN__ in the usual way, it is often useful to use remote debugging. For -example, you might be debugging an operating system kernel, or debugging -a small system which does not have a general purpose operating system -powerful enough to run a full-featured debugger. Currently _GDBN__ supports -remote debugging over a serial connection, and (using Sun RPC) over a -TCP/IP connection. - -The program to be debugged on the remote machine needs to contain a -debugging device driver which talks to _GDBN__ over the serial line. The -same version of _GDBN__ that is used ordinarily can be used for this. -Several sample remote debugging drivers are distributed with _GDBN__; see -the @file{README} file in the _GDBN__ distribution for more information. - -@menu -* Remote Commands:: Commands used to start and finish remote debugging. -@end menu - -For details of the communication protocol, see the comments in the _GDBN__ -source file @file{remote.c}. - -@node Remote Commands, , Remote, Remote -@section Commands for Remote Debugging - -To start remote debugging, first run _GDBN__ and specify as an executable file -the program that is running in the remote machine. This tells _GDBN__ how -to find the program's symbols and the contents of its pure text. Then -establish communication using the @samp{target remote} command with a device -name as an argument. For example: - -@example -target remote /dev/ttyb -@end example - -@noindent -if the serial line is connected to the device named @file{/dev/ttyb}. This -will stop the remote machine if it is not already stopped. - -Now you can use all the usual commands to examine and change data and to -step and continue the remote program. - -To resume the remote program and stop debugging it, use the @samp{detach} -command. - -Other remote targets be available in your -configuration of _GDBN__; use @samp{info targets} to list them. - -@table @code -@item reset -@kindex reset -For a target attached through a serial line, this command sends a -``break'' to the remote target system; this is only useful if the target -has been equipped with a circuit to perform a hard reset (or some other -interesting action) when a break is detected. -@end table - @node _GDBN__ Bugs, Installing _GDBN__, Remote, Top @comment node-name, next, previous, up @chapter Reporting Bugs in _GDBN__ @@ -4445,23 +4713,12 @@ for improvement of _GDBN__ are welcome in any case. @cindex Bug Reports @cindex Compiler Bugs, Reporting -@comment The following is meant to be neutral and helpful, not just a plug for -@comment Cygnus; feedback on the issue (to "pesch@cygnus.com" or -@comment "info@cygnus.com"---the latter will reach all of Cygnus) -@comment is welcome. A number of companies and individuals offer support for GNU products. If you obtained _GDBN__ from a support organization, we recommend you contact that organization first. -Among these organizations are Cygnus Support (Palo Alto CA, USA); C2V -(Paris, France); Dynamix Corporation (King of Prussia PA, USA); The Nice -Computer Company (Perth, Australia); Optimal Solutions (Seattle WA, -USA); and The Pharos Group (Las Cruces NM, USA). - -Full contact information is in the file @samp{etc/SERVICE} in the GNU -Emacs distribution. Numerous individual consultants are also listed -there. -@comment END NEUTRAL+HELPFUL section +Contact information for many support companies and individuals is +available in the file @samp{etc/SERVICE} in the GNU Emacs distribution. In any event, we also recommend that you send bug reports for _GDBN__ to one of these addresses: @@ -4520,8 +4777,8 @@ To enable us to fix the bug, you should include all these things: @itemize @bullet @item -The version of _GDBN__. _GDBN__ announces it on startup; you can also print it -at any time using @samp{info version}. +The version of _GDBN__. _GDBN__ announces it if you start with no +arguments; you can also print it at any time using @samp{show version}. Without this, we won't know whether there is any point in looking for the bug in the current version of _GDBN__. @@ -4972,15 +5229,25 @@ Ty Coon, President of Vice That's all there is to it! -@node Commands, Concepts, License, Top -@unnumbered Command Index - -@printindex ky - -@node Concepts, , Commands, Top +@node Index,,, @unnumbered Index @printindex cp +@tex +% I think something like @colophon should be in texinfo. In the +% meantime: +\long\def\colophon{\hbox to0pt{}\vfill +\centerline{The body of this manual is set in} +\centerline{\fontname\tenrm,} +\centerline{with headings in {\bf\fontname\tenbf}} +\centerline{and examples in {\tt\fontname\tentt}.} +\centerline{{\it\fontname\tenit\/} and} +\centerline{{\sl\fontname\tensl\/}} +\centerline{are used for emphasis.}\vfill} +\page\colophon +% Blame: pesch@cygnus.com, 28mar91. +@end tex + @contents @bye