.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
.    ds C`
.    ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{
.    if \nF \{
.        de IX
.        tm Index:\\$1\t\\n%\t"\\$2"
..
.        if !\nF==2 \{
.            nr % 0
.            nr F 2
.        \}
.    \}
.\}
.rr rF
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "GDB 1"
.TH GDB 1 "2016-11-23" "gdb-7.10" "GNU Development Tools"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
gdb \- The GNU Debugger
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
gdb [\fB\-help\fR] [\fB\-nh\fR] [\fB\-nx\fR] [\fB\-q\fR]
[\fB\-batch\fR] [\fB\-cd=\fR\fIdir\fR] [\fB\-f\fR]
[\fB\-b\fR\ \fIbps\fR]
    [\fB\-tty=\fR\fIdev\fR] [\fB\-s\fR \fIsymfile\fR]
[\fB\-e\fR\ \fIprog\fR] [\fB\-se\fR\ \fIprog\fR]
[\fB\-c\fR\ \fIcore\fR] [\fB\-p\fR\ \fIprocID\fR]
    [\fB\-x\fR\ \fIcmds\fR] [\fB\-d\fR\ \fIdir\fR]
[\fIprog\fR|\fIprog\fR \fIprocID\fR|\fIprog\fR \fIcore\fR]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The purpose of a debugger such as \s-1GDB\s0 is to allow you to see what is
going on \*(L"inside\*(R" another program while it executes \*(-- or what another
program was doing at the moment it crashed.
.PP
\&\s-1GDB\s0 can do four main kinds of things (plus other things in support of
these) to help you catch bugs in the act:
.IP "\(bu" 4
Start your program, specifying anything that might affect its behavior.
.IP "\(bu" 4
Make your program stop on specified conditions.
.IP "\(bu" 4
Examine what has happened, when your program has stopped.
.IP "\(bu" 4
Change things in your program, so you can experiment with correcting the
effects of one bug and go on to learn about another.
.PP
You can use \s-1GDB\s0 to debug programs written in C, C@t{++}, Fortran and
Modula\-2.
.PP
\&\s-1GDB\s0 is invoked with the shell command \f(CW\*(C`gdb\*(C'\fR.  Once started, it reads
commands from the terminal until you tell it to exit with the \s-1GDB\s0
command \f(CW\*(C`quit\*(C'\fR.  You can get online help from \s-1GDB\s0 itself
by using the command \f(CW\*(C`help\*(C'\fR.
.PP
You can run \f(CW\*(C`gdb\*(C'\fR with no arguments or options; but the most
usual way to start \s-1GDB\s0 is with one argument or two, specifying an
executable program as the argument:
.PP
.Vb 1
\&        gdb program
.Ve
.PP
You can also start with both an executable program and a core file specified:
.PP
.Vb 1
\&        gdb program core
.Ve
.PP
You can, instead, specify a process \s-1ID\s0 as a second argument, if you want
to debug a running process:
.PP
.Vb 2
\&        gdb program 1234
\&        gdb \-p 1234
.Ve
.PP
would attach \s-1GDB\s0 to process \f(CW1234\fR (unless you also have a file
named \fI1234\fR; \s-1GDB\s0 does check for a core file first).
With option \fB\-p\fR you can omit the \fIprogram\fR filename.
.PP
Here are some of the most frequently needed \s-1GDB\s0 commands:
.IP "\fBbreak [\fR\fIfile\fR\fB:]\fR\fIfunctiop\fR" 4
.IX Item "break [file:]functiop"
Set a breakpoint at \fIfunction\fR (in \fIfile\fR).
.IP "\fBrun [\fR\fIarglist\fR\fB]\fR" 4
.IX Item "run [arglist]"
Start your program (with \fIarglist\fR, if specified).
.IP "\fBbt\fR" 4
.IX Item "bt"
Backtrace: display the program stack.
.IP "\fBprint\fR \fIexpr\fR" 4
.IX Item "print expr"
Display the value of an expression.
.IP "\fBc\fR" 4
.IX Item "c"
Continue running your program (after stopping, e.g. at a breakpoint).
.IP "\fBnext\fR" 4
.IX Item "next"
Execute next program line (after stopping); step \fIover\fR any
function calls in the line.
.IP "\fBedit [\fR\fIfile\fR\fB:]\fR\fIfunction\fR" 4
.IX Item "edit [file:]function"
look at the program line where it is presently stopped.
.IP "\fBlist [\fR\fIfile\fR\fB:]\fR\fIfunction\fR" 4
.IX Item "list [file:]function"
type the text of the program in the vicinity of where it is presently stopped.
.IP "\fBstep\fR" 4
.IX Item "step"
Execute next program line (after stopping); step \fIinto\fR any
function calls in the line.
.IP "\fBhelp [\fR\fIname\fR\fB]\fR" 4
.IX Item "help [name]"
Show information about \s-1GDB\s0 command \fIname\fR, or general information
about using \s-1GDB.\s0
.IP "\fBquit\fR" 4
.IX Item "quit"
Exit from \s-1GDB.\s0
.PP
For full details on \s-1GDB,\s0
see \fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
by Richard M. Stallman and Roland H. Pesch.  The same text is available online
as the \f(CW\*(C`gdb\*(C'\fR entry in the \f(CW\*(C`info\*(C'\fR program.
.SH "OPTIONS"
.IX Header "OPTIONS"
Any arguments other than options specify an executable
file and core file (or process \s-1ID\s0); that is, the first argument
encountered with no
associated option flag is equivalent to a \fB\-se\fR option, and the second,
if any, is equivalent to a \fB\-c\fR option if it's the name of a file.
Many options have
both long and short forms; both are shown here.  The long forms are also
recognized if you truncate them, so long as enough of the option is
present to be unambiguous.  (If you prefer, you can flag option
arguments with \fB+\fR rather than \fB\-\fR, though we illustrate the
more usual convention.)
.PP
All the options and command line arguments you give are processed
in sequential order.  The order makes a difference when the \fB\-x\fR
option is used.
.IP "\fB\-help\fR" 4
.IX Item "-help"
.PD 0
.IP "\fB\-h\fR" 4
.IX Item "-h"
.PD
List all options, with brief explanations.
.IP "\fB\-symbols=\fR\fIfile\fR" 4
.IX Item "-symbols=file"
.PD 0
.IP "\fB\-s\fR \fIfile\fR" 4
.IX Item "-s file"
.PD
Read symbol table from file \fIfile\fR.
.IP "\fB\-write\fR" 4
.IX Item "-write"
Enable writing into executable and core files.
.IP "\fB\-exec=\fR\fIfile\fR" 4
.IX Item "-exec=file"
.PD 0
.IP "\fB\-e\fR \fIfile\fR" 4
.IX Item "-e file"
.PD
Use file \fIfile\fR as the executable file to execute when
appropriate, and for examining pure data in conjunction with a core
dump.
.IP "\fB\-se=\fR\fIfile\fR" 4
.IX Item "-se=file"
Read symbol table from file \fIfile\fR and use it as the executable
file.
.IP "\fB\-core=\fR\fIfile\fR" 4
.IX Item "-core=file"
.PD 0
.IP "\fB\-c\fR \fIfile\fR" 4
.IX Item "-c file"
.PD
Use file \fIfile\fR as a core dump to examine.
.IP "\fB\-command=\fR\fIfile\fR" 4
.IX Item "-command=file"
.PD 0
.IP "\fB\-x\fR \fIfile\fR" 4
.IX Item "-x file"
.PD
Execute \s-1GDB\s0 commands from file \fIfile\fR.
.IP "\fB\-ex\fR \fIcommand\fR" 4
.IX Item "-ex command"
Execute given \s-1GDB \s0\fIcommand\fR.
.IP "\fB\-directory=\fR\fIdirectory\fR" 4
.IX Item "-directory=directory"
.PD 0
.IP "\fB\-d\fR \fIdirectory\fR" 4
.IX Item "-d directory"
.PD
Add \fIdirectory\fR to the path to search for source files.
.IP "\fB\-nh\fR" 4
.IX Item "-nh"
Do not execute commands from \fI~/.gdbinit\fR.
.IP "\fB\-nx\fR" 4
.IX Item "-nx"
.PD 0
.IP "\fB\-n\fR" 4
.IX Item "-n"
.PD
Do not execute commands from any \fI.gdbinit\fR initialization files.
.IP "\fB\-quiet\fR" 4
.IX Item "-quiet"
.PD 0
.IP "\fB\-q\fR" 4
.IX Item "-q"
.PD
\&\*(L"Quiet\*(R".  Do not print the introductory and copyright messages.  These
messages are also suppressed in batch mode.
.IP "\fB\-batch\fR" 4
.IX Item "-batch"
Run in batch mode.  Exit with status \f(CW0\fR after processing all the command
files specified with \fB\-x\fR (and \fI.gdbinit\fR, if not inhibited).
Exit with nonzero status if an error occurs in executing the \s-1GDB\s0
commands in the command files.
.Sp
Batch mode may be useful for running \s-1GDB\s0 as a filter, for example to
download and run a program on another computer; in order to make this
more useful, the message
.Sp
.Vb 1
\&        Program exited normally.
.Ve
.Sp
(which is ordinarily issued whenever a program running under \s-1GDB\s0 control
terminates) is not issued when running in batch mode.
.IP "\fB\-cd=\fR\fIdirectory\fR" 4
.IX Item "-cd=directory"
Run \s-1GDB\s0 using \fIdirectory\fR as its working directory,
instead of the current directory.
.IP "\fB\-fullname\fR" 4
.IX Item "-fullname"
.PD 0
.IP "\fB\-f\fR" 4
.IX Item "-f"
.PD
Emacs sets this option when it runs \s-1GDB\s0 as a subprocess.  It tells
\&\s-1GDB\s0 to output the full file name and line number in a standard,
recognizable fashion each time a stack frame is displayed (which
includes each time the program stops).  This recognizable format looks
like two \fB\e032\fR characters, followed by the file name, line number
and character position separated by colons, and a newline.  The
Emacs-to-GDB interface program uses the two \fB\e032\fR
characters as a signal to display the source code for the frame.
.IP "\fB\-b\fR \fIbps\fR" 4
.IX Item "-b bps"
Set the line speed (baud rate or bits per second) of any serial
interface used by \s-1GDB\s0 for remote debugging.
.IP "\fB\-tty=\fR\fIdevice\fR" 4
.IX Item "-tty=device"
Run using \fIdevice\fR for your program's standard input and output.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
The full documentation for \s-1GDB\s0 is maintained as a Texinfo manual.
If the \f(CW\*(C`info\*(C'\fR and \f(CW\*(C`gdb\*(C'\fR programs and \s-1GDB\s0's Texinfo
documentation are properly installed at your site, the command
.PP
.Vb 1
\&        info gdb
.Ve
.PP
should give you access to the complete manual.
.PP
\&\fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
Richard M. Stallman and Roland H. Pesch, July 1991.
.SH "COPYRIGHT"
.IX Header "COPYRIGHT"
Copyright (c) 1988\-2015 Free Software Foundation, Inc.
.PP
Permission is granted to copy, distribute and/or modify this document
under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being \*(L"Free Software\*(R" and \*(L"Free Software Needs
Free Documentation\*(R", with the Front-Cover Texts being \*(L"A \s-1GNU\s0 Manual,\*(R"
and with the Back-Cover Texts as in (a) below.
.PP
(a) The \s-1FSF\s0's Back-Cover Text is: \*(L"You are free to copy and modify
this \s-1GNU\s0 Manual.  Buying copies from \s-1GNU\s0 Press supports the \s-1FSF\s0 in
developing \s-1GNU\s0 and promoting software freedom.\*(R"
