aboutsummaryrefslogtreecommitdiff
path: root/gdb/doc/gdb.run-m4
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/doc/gdb.run-m4')
-rwxr-xr-xgdb/doc/gdb.run-m4390
1 files changed, 390 insertions, 0 deletions
diff --git a/gdb/doc/gdb.run-m4 b/gdb/doc/gdb.run-m4
new file mode 100755
index 0000000..cfa42fe
--- /dev/null
+++ b/gdb/doc/gdb.run-m4
@@ -0,0 +1,390 @@
+_dnl__ -*- Texinfo -*-
+_dnl__ Copyright (c) 1988 1989 1990 1991 Free Software Foundation, Inc.
+_dnl__ This file is part of the source for the GDB manual.
+_dnl__ $Id$
+@node Running, Stopping, Commands, Top
+@chapter Running Programs Under _GDBN__
+
+@menu
+* Compilation:: Compiling for Debugging
+* Starting:: Starting your Program
+* Arguments:: Your Program's Arguments
+* Environment:: Your Program's Environment
+* 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
+@end menu
+
+@node Compilation, Starting, Running, Running
+@section Compiling for Debugging
+
+In order to debug a program effectively, you need to generate
+debugging information when you compile it. This debugging information
+is stored in the object file; it describes the data type of each
+variable or function and the correspondence between source line numbers
+and addresses in the executable code.
+
+To request debugging information, specify the @samp{-g} option when you run
+the compiler.
+
+Many C compilers are unable to handle the @samp{-g} and @samp{-O}
+options together. Using those compilers, you cannot generate optimized
+executables containing debugging information.
+
+The GNU C compiler supports @samp{-g} with or without @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 the program is
+correct, but there's no sense in pushing your luck.
+
+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!).
+
+Older versions of the GNU C compiler permitted a variant option
+@samp{-gg} for debugging information. _GDBN__ no longer supports this
+format; if your GNU C compiler has this option, do not use it.
+
+@ignore
+@comment As far as I know, there are no cases in which _GDBN__ will
+@comment produce strange output in this case. (but no promises).
+If your program includes archives made with the @code{ar} program, and
+if the object files used as input to @code{ar} were compiled without the
+@samp{-g} option and have names longer than 15 characters, _GDBN__ will get
+confused reading the program's symbol table. No error message will be
+given, but _GDBN__ may behave strangely. The reason for this problem is a
+deficiency in the Unix archive file format, which cannot represent file
+names longer than 15 characters.
+
+To avoid this problem, compile the archive members with the @samp{-g}
+option or use shorter file names. Alternatively, use a version of GNU
+@code{ar} dated more recently than August 1989.
+@end ignore
+
+
+@node Starting, Arguments, Compilation, Running
+@section Starting your Program
+@cindex starting
+@cindex running
+@table @code
+@item run
+@itemx r
+@kindex run
+Use the @code{run} command to start your program under _GDBN__.
+_if__(_VXWORKS__)
+Except on VxWorks, you
+_fi__(_VXWORKS__)
+_if__(!_VXWORKS__)
+You
+_fi__(!_VXWORKS__)
+must first specify the program name with an argument to _GDBN__
+(@pxref{Invocation}), or using the @code{file} or @code{exec-file}
+command (@pxref{Files}).@refill
+@end table
+
+On targets that support processes, @code{run} creates an inferior
+process and makes that process run your program. On other targets,
+@code{run} jumps to the start of the program.
+
+The execution of a program is affected by certain information it
+receives from its superior. _GDBN__ provides ways to specify this
+information, which you must do @i{before} starting the program. (You
+can change it after starting the program, but such changes will only affect
+the program the next time you start it.) This information may be
+divided into four categories:
+
+@table @asis
+@item The @i{arguments.}
+You specify the arguments to give your program as the arguments of the
+@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}.@refill
+
+@item The @i{environment.}
+Your program normally inherits its environment from _GDBN__, but you can
+use the _GDBN__ commands @code{set environment} and @code{unset
+environment} to change parts of the environment that will be given to
+the program. @xref{Environment}.@refill
+
+@item The @i{working directory.}
+Your program inherits its working directory from _GDBN__. You can set
+_GDBN__'s working directory with the @code{cd} command in _GDBN__.
+@xref{Working Directory}.
+
+@item The @i{standard input and output.}
+Your program normally uses the same device for standard input and
+standard output as _GDBN__ is using. You can redirect input and output
+in the @code{run} command line, or you can use the @code{tty} command to
+set a different device for your program.
+@xref{Input/Output}.
+@end table
+
+When you issue the @code{run} command, your program begins to execute
+immediately. @xref{Stopping}, for discussion of how to arrange for your
+program to stop. Once your program has been started by the @code{run}
+command (and then stopped), you may evaluate expressions that involve
+calls to functions in the inferior, using the @code{print} or
+@code{call} commands. @xref{Data}.
+
+If the modification time of your symbol file has changed since the last
+time _GDBN__ read its symbols, _GDBN__ will discard its symbol table and re-read
+it. In this process, it tries to retain your current breakpoints.
+
+@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 the program.
+_GDBN__ uses the shell indicated by your environment variable
+@code{SHELL} if it exists; otherwise, _GDBN__ uses @code{/bin/sh}.
+
+@code{run} with no arguments uses the same arguments used by the previous
+@code{run}, or those set by the @code{set args} command.
+
+@kindex set args
+@table @code
+@item set args
+Specify the arguments to be used the next time your program is run. If
+@code{set args} has no arguments, @code{run} will execute your program
+with no arguments. Once you have run your program with arguments, this
+is the only way to run it again without arguments.
+
+@item show args
+@kindex show args
+Show the arguments to give your program when it is started.
+@end table
+
+@node Environment, Working Directory, Arguments, Running
+@section Your Program's Environment
+
+@cindex environment (of your program)
+The @dfn{environment} consists of a set of environment variables and
+their values. Environment variables conventionally record such things as
+your user name, your home directory, your terminal type, and your search
+path for programs to run. Usually you set up environment variables with
+the shell and they are inherited by all the other programs you run. When
+debugging, it can be useful to try running the program with a modified
+environment without having to start _GDBN__ over again.
+
+@table @code
+@item path @var{directory}
+@kindex path
+Add @var{directory} to the front of the @code{PATH} environment variable
+(the search path for executables), for both _GDBN__ and your program.
+You may specify several directory names, separated by @samp{:} or
+whitespace. If @var{directory} is already in the path, it is moved to
+the front, so it will be searched sooner. You can use the string
+@samp{$cwd} to refer to whatever is the current working directory at the
+time _GDBN__ searches the path. @footnote{If you use @samp{.} instead,
+it refers to the directory where you executed the @code{path} command.
+_GDBN__ fills in the current path where needed in the @var{directory}
+argument, before adding it to the search path.}
+@c 'path' is explicitly nonrepeatable, but RMS points out it's silly to
+@c document that, since repeating it would be a no-op.
+
+@item show paths
+@kindex show paths
+Display the list of search paths for executables (the @code{PATH}
+environment variable).
+
+@item show environment @var{varname}
+@kindex show environment
+Print the value of environment variable @var{varname} to be given to
+your program when it starts.
+
+@item show environment
+Print the names and values of all environment variables to be given to
+your program.
+
+@item set environment @var{varname} @var{value}
+@itemx set environment @var{varname} = @var{value}
+@kindex set environment
+Sets environment variable @var{varname} to @var{value}. The value
+changes for your program only, not for _GDBN__ itself. @var{value} may
+be any string; the values of environment variables are just strings, and
+any interpretation is supplied by your program itself. The @var{value}
+parameter is optional; if it is eliminated, the variable is set to a
+null value.
+@c "any string" here doesn't include leading, trailing
+@c blanks. Gnu asks: does anyone care?
+
+For example, this command:
+
+@example
+set env USER = foo
+@end example
+
+@noindent
+tells a Unix program, when subsequently run, that its user is named
+@samp{foo}. (The spaces around @samp{=} are used for clarity here; they
+are not actually required.)
+
+@item unset environment @var{varname}
+@kindex unset environment
+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,
+rather than assigning it an empty value.
+@end table
+
+@node Working Directory, Input/Output, Environment, Running
+@section Your Program's Working Directory
+
+@cindex working directory (of your program)
+Each time you start your program with @code{run}, it inherits its
+working directory from the current working directory of _GDBN__. _GDBN__'s
+working directory is initially whatever it inherited from its parent
+process (typically the shell), but you can specify a new working
+directory in _GDBN__ with the @code{cd} command.
+
+The _GDBN__ working directory also serves as a default for the commands
+that specify files for _GDBN__ to operate on. @xref{Files}.
+
+@table @code
+@item cd @var{directory}
+@kindex cd
+Set _GDBN__'s working directory to @var{directory}.
+
+@item pwd
+@kindex pwd
+Print _GDBN__'s working directory.
+@end table
+
+@node Input/Output, Attach, Working Directory, Running
+@section Your Program's Input and Output
+
+@cindex redirection
+@cindex i/o
+@cindex terminal
+@cindex controlling terminal
+By default, the program you run under _GDBN__ does input and output to
+the same terminal that _GDBN__ uses. _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
+Displays _GDBN__'s recorded information about the terminal modes your
+program is using.
+@end table
+
+You can redirect the program's input and/or output using shell
+redirection with the @code{run} command. For example,
+
+_0__@example
+run > outfile
+_1__@end example
+
+@noindent
+starts the program, diverting its output to the file @file{outfile}.
+
+@kindex tty
+Another way to specify where the program should do input and output is
+with the @code{tty} command. This command accepts a file name as
+argument, and causes this file to be the default for future @code{run}
+commands. It also resets the controlling terminal for the child
+process, for future @code{run} commands. For example,
+
+@example
+tty /dev/ttyb
+@end example
+
+@noindent
+directs that processes started with subsequent @code{run} commands
+default to do input and output on the terminal @file{/dev/ttyb} and have
+that as their controlling terminal.
+
+An explicit redirection in @code{run} overrides the @code{tty} command's
+effect on the input/output device, but not its effect on the controlling
+terminal.
+
+When you use the @code{tty} command or redirect input in the @code{run}
+command, only the input @emph{for your program} is affected. The input
+for _GDBN__ still comes from your terminal.
+
+@node Attach, Kill Process, Input/Output, Running
+@section Debugging an Already-Running Process
+@kindex attach
+@cindex attach
+
+@table @code
+@item attach @var{process-id}
+This command
+attaches to a running process---one that was started outside _GDBN__.
+(@code{info files} will show your active targets.) The command takes as
+argument a process ID. The usual way to find out the process-id of
+a Unix process is with the @code{ps} utility, or with the @samp{jobs -l}
+shell command.
+
+@code{attach} will not repeat if you press @key{RET} a second time after
+executing the command.
+@end table
+
+To use @code{attach}, you must be debugging in an environment which
+supports processes. You must also have permission to send the process a
+signal, and it must have the same effective user ID as the _GDBN__
+process.
+
+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}.
+
+The first thing _GDBN__ does after arranging to debug the specified
+process is to stop it. You can examine and modify an attached process
+with all the _GDBN__ commands that ordinarily available when you start
+processes with @code{run}. You can insert breakpoints; you can step and
+continue; you can modify storage. If you would rather the process
+continue running, you may use the @code{continue} command after
+attaching _GDBN__ to the process.
+
+@table @code
+@item detach
+@kindex detach
+When you have finished debugging the attached process, you can use the
+@code{detach} command to release it from _GDBN__'s control. Detaching
+the process continues its execution. After the @code{detach} command,
+that process and _GDBN__ become completely independent once more, and you
+are ready to @code{attach} another process or start one with @code{run}.
+@code{detach} will not repeat if you press @key{RET} again after
+executing the command.
+@end table
+
+If you exit _GDBN__ or use the @code{run} command while you have an attached
+process, you kill that process. By default, you will be asked for
+confirmation if you try to do either of these things; you can control
+whether or not you need to confirm by using the @code{set confirm} command
+(@pxref{Messages/Warnings}).
+
+@group
+@node Kill Process, , Attach, Running
+@section Killing the Child Process
+
+@table @code
+@item kill
+@kindex kill
+Kill the child process in which your program is running under _GDBN__.
+@end table
+
+This command is useful if you wish to debug a core dump instead of a
+running process. _GDBN__ ignores any core dump file while your program
+is running.
+@end group
+
+On some operating systems, you can't execute your program in another
+process while breakpoints are active inside _GDBN__. You can use the
+@code{kill} command in this situation to permit running the program
+outside the debugger.
+
+The @code{kill} command is also useful if you wish to recompile and
+relink the program, since on many systems it is impossible to modify an
+executable file which is running in a process. In this case, when you
+next type @code{run}, _GDBN__ will notice that the file has changed, and
+will re-read the symbol table (while trying to preserve your current
+breakpoint settings).