.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
.\"
.\" 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 "GDBSERVER 1"
.TH GDBSERVER 1 "2015-02-06" "gdb-7.8.1" "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"
gdbserver \- Remote Server for the GNU Debugger
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
gdbserver \fIcomm\fR \fIprog\fR [\fIargs\fR...]
.PP
gdbserver \-\-attach \fIcomm\fR \fIpid\fR
.PP
gdbserver \-\-multi \fIcomm\fR
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fBgdbserver\fR is a program that allows you to run \s-1GDB\s0 on a different machine
than the one which is running the program being debugged.
.PP
Usage (server (target) side):
.PP
First, you need to have a copy of the program you want to debug put onto
the target system.  The program can be stripped to save space if needed, as
\&\fBgdbserver\fR doesn't care about symbols.  All symbol handling is taken care of by
the \s-1GDB\s0 running on the host system.
.PP
To use the server, you log on to the target system, and run the \fBgdbserver\fR
program.  You must tell it (a) how to communicate with \s-1GDB, \s0(b) the name of
your program, and (c) its arguments.  The general syntax is:
.PP
.Vb 1
\&        target> gdbserver <comm> <program> [<args> ...]
.Ve
.PP
For example, using a serial port, you might say:
.PP
.Vb 1
\&        target> gdbserver /dev/com1 emacs foo.txt
.Ve
.PP
This tells \fBgdbserver\fR to debug emacs with an argument of foo.txt, and
to communicate with \s-1GDB\s0 via \fI/dev/com1\fR.  \fBgdbserver\fR now
waits patiently for the host \s-1GDB\s0 to communicate with it.
.PP
To use a \s-1TCP\s0 connection, you could say:
.PP
.Vb 1
\&        target> gdbserver host:2345 emacs foo.txt
.Ve
.PP
This says pretty much the same thing as the last example, except that we are
going to communicate with the \f(CW\*(C`host\*(C'\fR \s-1GDB\s0 via \s-1TCP. \s0 The \f(CW\*(C`host:2345\*(C'\fR argument means
that we are expecting to see a \s-1TCP\s0 connection from \f(CW\*(C`host\*(C'\fR to local \s-1TCP\s0 port
2345.  (Currently, the \f(CW\*(C`host\*(C'\fR part is ignored.)  You can choose any number you
want for the port number as long as it does not conflict with any existing \s-1TCP\s0
ports on the target system.  This same port number must be used in the host
GDBs \f(CW\*(C`target remote\*(C'\fR command, which will be described shortly.  Note that if
you chose a port number that conflicts with another service, \fBgdbserver\fR will
print an error message and exit.
.PP
\&\fBgdbserver\fR can also attach to running programs.
This is accomplished via the \fB\-\-attach\fR argument.  The syntax is:
.PP
.Vb 1
\&        target> gdbserver \-\-attach <comm> <pid>
.Ve
.PP
\&\fIpid\fR is the process \s-1ID\s0 of a currently running process.  It isn't
necessary to point \fBgdbserver\fR at a binary for the running process.
.PP
To start \f(CW\*(C`gdbserver\*(C'\fR without supplying an initial command to run
or process \s-1ID\s0 to attach, use the \fB\-\-multi\fR command line option.
In such case you should connect using \f(CW\*(C`target extended\-remote\*(C'\fR to start
the program you want to debug.
.PP
.Vb 1
\&        target> gdbserver \-\-multi <comm>
.Ve
.PP
Usage (host side):
.PP
You need an unstripped copy of the target program on your host system, since
\&\s-1GDB\s0 needs to examine it's symbol tables and such.  Start up \s-1GDB\s0 as you normally
would, with the target program as the first argument.  (You may need to use the
\&\fB\-\-baud\fR option if the serial line is running at anything except 9600 baud.)
That is \f(CW\*(C`gdb TARGET\-PROG\*(C'\fR, or \f(CW\*(C`gdb \-\-baud BAUD TARGET\-PROG\*(C'\fR.  After that, the only
new command you need to know about is \f(CW\*(C`target remote\*(C'\fR
(or \f(CW\*(C`target extended\-remote\*(C'\fR).  Its argument is either
a device name (usually a serial device, like \fI/dev/ttyb\fR), or a \f(CW\*(C`HOST:PORT\*(C'\fR
descriptor.  For example:
.PP
.Vb 1
\&        (gdb) target remote /dev/ttyb
.Ve
.PP
communicates with the server via serial line \fI/dev/ttyb\fR, and:
.PP
.Vb 1
\&        (gdb) target remote the\-target:2345
.Ve
.PP
communicates via a \s-1TCP\s0 connection to port 2345 on host `the\-target', where
you previously started up \fBgdbserver\fR with the same port number.  Note that for
\&\s-1TCP\s0 connections, you must start up \fBgdbserver\fR prior to using the `target remote'
command, otherwise you may get an error that looks something like
`Connection refused'.
.PP
\&\fBgdbserver\fR can also debug multiple inferiors at once,
described in
the \s-1GDB\s0 manual in node \f(CW\*(C`Inferiors and Programs\*(C'\fR
\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqInferiors and Programs\*(Aq\*(C'\fR.
In such case use the \f(CW\*(C`extended\-remote\*(C'\fR \s-1GDB\s0 command variant:
.PP
.Vb 1
\&        (gdb) target extended\-remote the\-target:2345
.Ve
.PP
The \fBgdbserver\fR option \fB\-\-multi\fR may or may not be used in such
case.
.SH "OPTIONS"
.IX Header "OPTIONS"
There are three different modes for invoking \fBgdbserver\fR:
.IP "\(bu" 4
Debug a specific program specified by its program name:
.Sp
.Vb 1
\&        gdbserver <comm> <prog> [<args>...]
.Ve
.Sp
The \fIcomm\fR parameter specifies how should the server communicate
with \s-1GDB\s0; it is either a device name (to use a serial line),
a \s-1TCP\s0 port number (\f(CW\*(C`:1234\*(C'\fR), or \f(CW\*(C`\-\*(C'\fR or \f(CW\*(C`stdio\*(C'\fR to use
stdin/stdout of \f(CW\*(C`gdbserver\*(C'\fR.  Specify the name of the program to
debug in \fIprog\fR.  Any remaining arguments will be passed to the
program verbatim.  When the program exits, \s-1GDB\s0 will close the
connection, and \f(CW\*(C`gdbserver\*(C'\fR will exit.
.IP "\(bu" 4
Debug a specific program by specifying the process \s-1ID\s0 of a running
program:
.Sp
.Vb 1
\&        gdbserver \-\-attach <comm> <pid>
.Ve
.Sp
The \fIcomm\fR parameter is as described above.  Supply the process \s-1ID\s0
of a running program in \fIpid\fR; \s-1GDB\s0 will do everything
else.  Like with the previous mode, when the process \fIpid\fR exits,
\&\s-1GDB\s0 will close the connection, and \f(CW\*(C`gdbserver\*(C'\fR will exit.
.IP "\(bu" 4
Multi-process mode \*(-- debug more than one program/process:
.Sp
.Vb 1
\&        gdbserver \-\-multi <comm>
.Ve
.Sp
In this mode, \s-1GDB\s0 can instruct \fBgdbserver\fR which
command(s) to run.  Unlike the other 2 modes, \s-1GDB\s0 will not
close the connection when a process being debugged exits, so you can
debug several processes in the same session.
.PP
In each of the modes you may specify these options:
.IP "\fB\-\-help\fR" 4
.IX Item "--help"
List all options, with brief explanations.
.IP "\fB\-\-version\fR" 4
.IX Item "--version"
This option causes \fBgdbserver\fR to print its version number and exit.
.IP "\fB\-\-attach\fR" 4
.IX Item "--attach"
\&\fBgdbserver\fR will attach to a running program.  The syntax is:
.Sp
.Vb 1
\&        target> gdbserver \-\-attach <comm> <pid>
.Ve
.Sp
\&\fIpid\fR is the process \s-1ID\s0 of a currently running process.  It isn't
necessary to point \fBgdbserver\fR at a binary for the running process.
.IP "\fB\-\-multi\fR" 4
.IX Item "--multi"
To start \f(CW\*(C`gdbserver\*(C'\fR without supplying an initial command to run
or process \s-1ID\s0 to attach, use this command line option.
Then you can connect using \f(CW\*(C`target extended\-remote\*(C'\fR and start
the program you want to debug.  The syntax is:
.Sp
.Vb 1
\&        target> gdbserver \-\-multi <comm>
.Ve
.IP "\fB\-\-debug\fR" 4
.IX Item "--debug"
Instruct \f(CW\*(C`gdbserver\*(C'\fR to display extra status information about the debugging
process.
This option is intended for \f(CW\*(C`gdbserver\*(C'\fR development and for bug reports to
the developers.
.IP "\fB\-\-remote\-debug\fR" 4
.IX Item "--remote-debug"
Instruct \f(CW\*(C`gdbserver\*(C'\fR to display remote protocol debug output.
This option is intended for \f(CW\*(C`gdbserver\*(C'\fR development and for bug reports to
the developers.
.IP "\fB\-\-debug\-format=option1\fR[\fB,option2,...\fR]" 4
.IX Item "--debug-format=option1[,option2,...]"
Instruct \f(CW\*(C`gdbserver\*(C'\fR to include extra information in each line
of debugging output.
.IP "\fB\-\-wrapper\fR" 4
.IX Item "--wrapper"
Specify a wrapper to launch programs
for debugging.  The option should be followed by the name of the
wrapper, then any command-line arguments to pass to the wrapper, then
\&\f(CW\*(C`\-\-\*(C'\fR indicating the end of the wrapper arguments.
.IP "\fB\-\-once\fR" 4
.IX Item "--once"
By default, \fBgdbserver\fR keeps the listening \s-1TCP\s0 port open, so that
additional connections are possible.  However, if you start \f(CW\*(C`gdbserver\*(C'\fR
with the \fB\-\-once\fR option, it will stop listening for any further
connection attempts after connecting to the first \s-1GDB\s0 session.
.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\-2014 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"
