.\" 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 "GDBSERVER 1"
.TH GDBSERVER 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"
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\-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"
