1346 lines
		
	
	
	
		
			56 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			1346 lines
		
	
	
	
		
			56 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<HTML>
 | 
						|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | 
						|
<!-- Created on March, 27  2008 by texi2html 1.64 -->
 | 
						|
<!-- 
 | 
						|
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
 | 
						|
            Karl Berry  <karl@freefriends.org>
 | 
						|
            Olaf Bachmann <obachman@mathematik.uni-kl.de>
 | 
						|
            and many others.
 | 
						|
Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
 | 
						|
Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
 | 
						|
 
 | 
						|
-->
 | 
						|
<HEAD>
 | 
						|
<TITLE>Debugging with GDB: Remote Debugging</TITLE>
 | 
						|
 | 
						|
<META NAME="description" CONTENT="Debugging with GDB: Remote Debugging">
 | 
						|
<META NAME="keywords" CONTENT="Debugging with GDB: Remote Debugging">
 | 
						|
<META NAME="resource-type" CONTENT="document">
 | 
						|
<META NAME="distribution" CONTENT="global">
 | 
						|
<META NAME="Generator" CONTENT="texi2html 1.64">
 | 
						|
 | 
						|
</HEAD>
 | 
						|
 | 
						|
<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
 | 
						|
 | 
						|
<A NAME="SEC162"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_17.html#SEC161"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC163"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_3.html#SEC6"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H1> 17. Debugging Remote Programs </H1>
 | 
						|
<!--docid::SEC162::-->
 | 
						|
<P>
 | 
						|
 | 
						|
If you are trying to debug a program running on a machine that cannot run
 | 
						|
GDB in the usual way, it is often useful to use remote debugging.
 | 
						|
For example, you might use remote debugging on an operating system kernel,
 | 
						|
or on a small system which does not have a general purpose operating system
 | 
						|
powerful enough to run a full-featured debugger.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Some configurations of GDB have special serial or TCP/IP interfaces
 | 
						|
to make this work with particular debugging targets.  In addition,
 | 
						|
GDB comes with a generic serial protocol (specific to GDB,
 | 
						|
but not specific to any particular target system) which you can use if you
 | 
						|
write the remote stubs--the code that runs on the remote system to
 | 
						|
communicate with GDB.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Other remote targets may be available in your
 | 
						|
configuration of GDB; use <CODE>help target</CODE> to list them.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_18.html#SEC163">17.1 Connecting to a Remote Target</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Connecting to a remote target</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_18.html#SEC164">17.2 Sending files to a remote system</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_18.html#SEC165">17.3 Using the <CODE>gdbserver</CODE> Program</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Using the gdbserver program</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_18.html#SEC172">17.4 Remote Configuration</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Remote configuration</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_18.html#SEC173">17.5 Implementing a Remote Stub</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Implementing a remote stub</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Connecting"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC163"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC164"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 17.1 Connecting to a Remote Target </H2>
 | 
						|
<!--docid::SEC163::-->
 | 
						|
<P>
 | 
						|
 | 
						|
On the GDB host machine, you will need an unstripped copy of
 | 
						|
your program, since GDB needs symbol and debugging information.
 | 
						|
Start up GDB as usual, using the name of the local copy of your
 | 
						|
program as the first argument.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX792"></A>
 | 
						|
GDB can communicate with the target over a serial line, or
 | 
						|
over an <FONT SIZE="-1">IP</FONT> network using <FONT SIZE="-1">TCP</FONT> or <FONT SIZE="-1">UDP</FONT>.  In
 | 
						|
each case, GDB uses the same protocol for debugging your
 | 
						|
program; only the medium carrying the debugging packets varies.  The
 | 
						|
<CODE>target remote</CODE> command establishes a connection to the target.
 | 
						|
Its arguments indicate which medium to use:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
 | 
						|
<DT><CODE>target remote <VAR>serial-device</VAR></CODE>
 | 
						|
<DD><A NAME="IDX793"></A>
 | 
						|
Use <VAR>serial-device</VAR> to communicate with the target.  For example,
 | 
						|
to use a serial line connected to the device named <TT>`/dev/ttyb'</TT>:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>target remote /dev/ttyb
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
If you're using a serial line, you may want to give GDB the
 | 
						|
<SAMP>`--baud'</SAMP> option, or use the <CODE>set remotebaud</CODE> command
 | 
						|
(see section <A HREF="gdb_18.html#SEC172">set remotebaud</A>) before the
 | 
						|
<CODE>target</CODE> command.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>target remote <CODE><VAR>host</VAR>:<VAR>port</VAR></CODE></CODE>
 | 
						|
<DD><DT><CODE>target remote <CODE>tcp:<VAR>host</VAR>:<VAR>port</VAR></CODE></CODE>
 | 
						|
<DD><A NAME="IDX794"></A>
 | 
						|
Debug using a <FONT SIZE="-1">TCP</FONT> connection to <VAR>port</VAR> on <VAR>host</VAR>.
 | 
						|
The <VAR>host</VAR> may be either a host name or a numeric <FONT SIZE="-1">IP</FONT>
 | 
						|
address; <VAR>port</VAR> must be a decimal number.  The <VAR>host</VAR> could be
 | 
						|
the target machine itself, if it is directly connected to the net, or
 | 
						|
it might be a terminal server which in turn has a serial line to the
 | 
						|
target.
 | 
						|
<P>
 | 
						|
 | 
						|
For example, to connect to port 2828 on a terminal server named
 | 
						|
<CODE>manyfarms</CODE>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>target remote manyfarms:2828
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
If your remote target is actually running on the same machine as your
 | 
						|
debugger session (e.g. a simulator for your target running on the
 | 
						|
same host), you can omit the hostname.  For example, to connect to
 | 
						|
port 1234 on your local machine:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>target remote :1234
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Note that the colon is still required here.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>target remote <CODE>udp:<VAR>host</VAR>:<VAR>port</VAR></CODE></CODE>
 | 
						|
<DD><A NAME="IDX795"></A>
 | 
						|
Debug using <FONT SIZE="-1">UDP</FONT> packets to <VAR>port</VAR> on <VAR>host</VAR>.  For example, to
 | 
						|
connect to <FONT SIZE="-1">UDP</FONT> port 2828 on a terminal server named <CODE>manyfarms</CODE>:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>target remote udp:manyfarms:2828
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
When using a <FONT SIZE="-1">UDP</FONT> connection for remote debugging, you should
 | 
						|
keep in mind that the `U' stands for "Unreliable".  <FONT SIZE="-1">UDP</FONT>
 | 
						|
can silently drop packets on busy or unreliable networks, which will
 | 
						|
cause havoc with your debugging session.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>target remote | <VAR>command</VAR></CODE>
 | 
						|
<DD><A NAME="IDX796"></A>
 | 
						|
Run <VAR>command</VAR> in the background and communicate with it using a
 | 
						|
pipe.  The <VAR>command</VAR> is a shell command, to be parsed and expanded
 | 
						|
by the system's command shell, <CODE>/bin/sh</CODE>; it should expect remote
 | 
						|
protocol packets on its standard input, and send replies on its
 | 
						|
standard output.  You could use this to run a stand-alone simulator
 | 
						|
that speaks the remote debugging protocol, to make net connections
 | 
						|
using programs like <CODE>ssh</CODE>, or for other similar tricks.
 | 
						|
<P>
 | 
						|
 | 
						|
If <VAR>command</VAR> closes its standard output (perhaps by exiting),
 | 
						|
GDB will try to send it a <CODE>SIGTERM</CODE> signal.  (If the
 | 
						|
program has already exited, this will have no effect.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Once the connection has been established, you can use all the usual
 | 
						|
commands to examine and change data and to step and continue the
 | 
						|
remote program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX797"></A>
 | 
						|
<A NAME="IDX798"></A>
 | 
						|
Whenever GDB is waiting for the remote program, if you type the
 | 
						|
interrupt character (often <KBD>Ctrl-c</KBD>), GDB attempts to stop the
 | 
						|
program.  This may or may not succeed, depending in part on the hardware
 | 
						|
and the serial drivers the remote system uses.  If you type the
 | 
						|
interrupt character once again, GDB displays this prompt:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>Interrupted while waiting for the program.
 | 
						|
Give up (and stop debugging it)?  (y or n)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
If you type <KBD>y</KBD>, GDB abandons the remote debugging session.
 | 
						|
(If you decide you want to try again later, you can use <SAMP>`target
 | 
						|
remote'</SAMP> again to connect once more.)  If you type <KBD>n</KBD>, GDB
 | 
						|
goes back to waiting.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX799"></A>
 | 
						|
<DT><CODE>detach</CODE>
 | 
						|
<DD>When you have finished debugging the remote program, you can use the
 | 
						|
<CODE>detach</CODE> command to release it from GDB control.
 | 
						|
Detaching from the target normally resumes its execution, but the results
 | 
						|
will depend on your particular remote stub.  After the <CODE>detach</CODE>
 | 
						|
command, GDB is free to connect to another target.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX800"></A>
 | 
						|
<DT><CODE>disconnect</CODE>
 | 
						|
<DD>The <CODE>disconnect</CODE> command behaves like <CODE>detach</CODE>, except that
 | 
						|
the target is generally not resumed.  It will wait for GDB
 | 
						|
(this instance or another one) to connect and continue debugging.  After
 | 
						|
the <CODE>disconnect</CODE> command, GDB is again free to connect to
 | 
						|
another target.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX801"></A>
 | 
						|
<A NAME="IDX802"></A>
 | 
						|
<A NAME="IDX803"></A>
 | 
						|
<A NAME="IDX804"></A>
 | 
						|
<DT><CODE>monitor <VAR>cmd</VAR></CODE>
 | 
						|
<DD>This command allows you to send arbitrary commands directly to the
 | 
						|
remote monitor.  Since GDB doesn't care about the commands it
 | 
						|
sends like this, this command is the way to extend GDB---you
 | 
						|
can add new commands that only the external monitor will understand
 | 
						|
and implement.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="File Transfer"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC164"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC163"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC165"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC165"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 17.2 Sending files to a remote system </H2>
 | 
						|
<!--docid::SEC164::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Some remote targets offer the ability to transfer files over the same
 | 
						|
connection used to communicate with GDB.  This is convenient
 | 
						|
for targets accessible through other means, e.g. GNU/Linux systems
 | 
						|
running <CODE>gdbserver</CODE> over a network interface.  For other targets,
 | 
						|
e.g. embedded devices with only a single serial port, this may be
 | 
						|
the only way to upload or download files.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Not all remote targets support these commands.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX805"></A>
 | 
						|
<DT><CODE>remote put <VAR>hostfile</VAR> <VAR>targetfile</VAR></CODE>
 | 
						|
<DD>Copy file <VAR>hostfile</VAR> from the host system (the machine running
 | 
						|
GDB) to <VAR>targetfile</VAR> on the target system.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX806"></A>
 | 
						|
<DT><CODE>remote get <VAR>targetfile</VAR> <VAR>hostfile</VAR></CODE>
 | 
						|
<DD>Copy file <VAR>targetfile</VAR> from the target system to <VAR>hostfile</VAR>
 | 
						|
on the host system.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX807"></A>
 | 
						|
<DT><CODE>remote delete <VAR>targetfile</VAR></CODE>
 | 
						|
<DD>Delete <VAR>targetfile</VAR> from the target system.
 | 
						|
<P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Server"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC165"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC164"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC166"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 17.3 Using the <CODE>gdbserver</CODE> Program </H2>
 | 
						|
<!--docid::SEC165::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX808"></A>
 | 
						|
<A NAME="IDX809"></A>
 | 
						|
<CODE>gdbserver</CODE> is a control program for Unix-like systems, which
 | 
						|
allows you to connect your program with a remote GDB via
 | 
						|
<CODE>target remote</CODE>---but without linking in the usual debugging stub.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<CODE>gdbserver</CODE> is not a complete replacement for the debugging stubs,
 | 
						|
because it requires essentially the same operating-system facilities
 | 
						|
that GDB itself does.  In fact, a system that can run
 | 
						|
<CODE>gdbserver</CODE> to connect to a remote GDB could also run
 | 
						|
GDB locally!  <CODE>gdbserver</CODE> is sometimes useful nevertheless,
 | 
						|
because it is a much smaller program than GDB itself.  It is
 | 
						|
also easier to port than all of GDB, so you may be able to get
 | 
						|
started more quickly on a new system by using <CODE>gdbserver</CODE>.
 | 
						|
Finally, if you develop code for real-time systems, you may find that
 | 
						|
the tradeoffs involved in real-time operation make it more convenient to
 | 
						|
do as much development work as possible on another system, for example
 | 
						|
by cross-compiling.  You can use <CODE>gdbserver</CODE> to make a similar
 | 
						|
choice for debugging.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB and <CODE>gdbserver</CODE> communicate via either a serial line
 | 
						|
or a TCP connection, using the standard GDB remote serial
 | 
						|
protocol.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM> <CODE>gdbserver</CODE> does not have any built-in security.
 | 
						|
Do not run <CODE>gdbserver</CODE> connected to any public network; a
 | 
						|
GDB connection to <CODE>gdbserver</CODE> provides access to the
 | 
						|
target system with the same privileges as the user running
 | 
						|
<CODE>gdbserver</CODE>.
 | 
						|
</BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC166"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC165"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC167"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC165"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC170"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 17.3.1 Running <CODE>gdbserver</CODE> </H3>
 | 
						|
<!--docid::SEC166::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Run <CODE>gdbserver</CODE> on the target system.  You need a copy of the
 | 
						|
program you want to debug, including any libraries it requires.
 | 
						|
<CODE>gdbserver</CODE> does not need your program's symbol table, so you can
 | 
						|
strip the program if necessary to save space.  GDB on the host
 | 
						|
system does all the symbol handling.
 | 
						|
</P><P>
 | 
						|
 | 
						|
To use the server, you must tell it how to communicate with GDB;
 | 
						|
the name of your program; and the arguments for your program.  The usual
 | 
						|
syntax is:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>target> gdbserver <VAR>comm</VAR> <VAR>program</VAR> [ <VAR>args</VAR> <small>...</small> ]
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<VAR>comm</VAR> is either a device name (to use a serial line) or a TCP
 | 
						|
hostname and portnumber.  For example, to debug Emacs with the argument
 | 
						|
<SAMP>`foo.txt'</SAMP> and communicate with GDB over the serial port
 | 
						|
<TT>`/dev/com1'</TT>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>target> gdbserver /dev/com1 emacs foo.txt
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<CODE>gdbserver</CODE> waits passively for the host GDB to communicate
 | 
						|
with it.
 | 
						|
</P><P>
 | 
						|
 | 
						|
To use a TCP connection instead of a serial line:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>target> gdbserver host:2345 emacs foo.txt
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The only difference from the previous example is the first argument,
 | 
						|
specifying that you are communicating with the host GDB via
 | 
						|
TCP.  The <SAMP>`host:2345'</SAMP> argument means that <CODE>gdbserver</CODE> is to
 | 
						|
expect a TCP connection from machine <SAMP>`host'</SAMP> to local TCP port 2345.
 | 
						|
(Currently, the <SAMP>`host'</SAMP> part is ignored.)  You can choose any number
 | 
						|
you want for the port number as long as it does not conflict with any
 | 
						|
TCP ports already in use on the target system (for example, <CODE>23</CODE> is
 | 
						|
reserved for <CODE>telnet</CODE>).<A NAME="DOCF7" HREF="gdb_fot.html#FOOT7">(7)</A>  You must use the same port number with the host GDB
 | 
						|
<CODE>target remote</CODE> command.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC167"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC166"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC168"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC166"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC170"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 17.3.1.1 Attaching to a Running Program </H4>
 | 
						|
<!--docid::SEC167::-->
 | 
						|
<P>
 | 
						|
 | 
						|
On some targets, <CODE>gdbserver</CODE> can also attach to running programs.
 | 
						|
This is accomplished via the <CODE>--attach</CODE> argument.  The syntax is:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>target> gdbserver --attach <VAR>comm</VAR> <VAR>pid</VAR>
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<VAR>pid</VAR> is the process ID of a currently running process.  It isn't necessary
 | 
						|
to point <CODE>gdbserver</CODE> at a binary for the running process.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX810"></A>
 | 
						|
<A NAME="IDX811"></A>
 | 
						|
You can debug processes by name instead of process ID if your target has the
 | 
						|
<CODE>pidof</CODE> utility:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>target> gdbserver --attach <VAR>comm</VAR> `pidof <VAR>program</VAR>`
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
In case more than one copy of <VAR>program</VAR> is running, or <VAR>program</VAR>
 | 
						|
has multiple threads, most versions of <CODE>pidof</CODE> support the
 | 
						|
<CODE>-s</CODE> option to only return the first process ID.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC168"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC167"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC169"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC169"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC166"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC170"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 17.3.1.2 Multi-Process Mode for <CODE>gdbserver</CODE> </H4>
 | 
						|
<!--docid::SEC168::-->
 | 
						|
<P>
 | 
						|
 | 
						|
When you connect to <CODE>gdbserver</CODE> using <CODE>target remote</CODE>,
 | 
						|
<CODE>gdbserver</CODE> debugs the specified program only once.  When the
 | 
						|
program exits, or you detach from it, GDB closes the connection
 | 
						|
and <CODE>gdbserver</CODE> exits.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you connect using <KBD>target extended-remote</KBD>, <CODE>gdbserver</CODE>
 | 
						|
enters multi-process mode.  When the debugged program exits, or you
 | 
						|
detach from it, GDB stays connected to <CODE>gdbserver</CODE> even
 | 
						|
though no program is running.  The <CODE>run</CODE> and <CODE>attach</CODE>
 | 
						|
commands instruct <CODE>gdbserver</CODE> to run or attach to a new program.
 | 
						|
The <CODE>run</CODE> command uses <CODE>set remote exec-file</CODE> (see  <A HREF="gdb_18.html#set remote exec-file">set remote exec-file</A>) to select the program to run.  Command line
 | 
						|
arguments are supported, except for wildcard expansion and I/O
 | 
						|
redirection (see section <A HREF="gdb_5.html#SEC21">4.3 Your Program's Arguments</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
To start <CODE>gdbserver</CODE> without supplying an initial command to run
 | 
						|
or process ID to attach, use the <SAMP>`--multi'</SAMP> command line option.
 | 
						|
Then you can connect using <KBD>target extended-remote</KBD> and start
 | 
						|
the program you want to debug.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<CODE>gdbserver</CODE> does not automatically exit in multi-process mode.
 | 
						|
You can terminate it by using <CODE>monitor exit</CODE>
 | 
						|
(see  <A HREF="gdb_18.html#Monitor Commands for gdbserver">Monitor Commands for gdbserver</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC169"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC168"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC170"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC166"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC170"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H4> 17.3.1.3 Other Command-Line Arguments for <CODE>gdbserver</CODE> </H4>
 | 
						|
<!--docid::SEC169::-->
 | 
						|
<P>
 | 
						|
 | 
						|
You can include <SAMP>`--debug'</SAMP> on the <CODE>gdbserver</CODE> command line.
 | 
						|
<CODE>gdbserver</CODE> will display extra status information about the debugging
 | 
						|
process.  This option is intended for <CODE>gdbserver</CODE> development and
 | 
						|
for bug reports to the developers.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC170"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC169"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC171"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC171"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC165"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 17.3.2 Connecting to <CODE>gdbserver</CODE> </H3>
 | 
						|
<!--docid::SEC170::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Run GDB on the host system.
 | 
						|
</P><P>
 | 
						|
 | 
						|
First make sure you have the necessary symbol files.  Load symbols for
 | 
						|
your application using the <CODE>file</CODE> command before you connect.  Use
 | 
						|
<CODE>set sysroot</CODE> to locate target libraries (unless your GDB
 | 
						|
was compiled with the correct sysroot using <CODE>--with-sysroot</CODE>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
The symbol file and target libraries must exactly match the executable
 | 
						|
and libraries on the target, with one exception: the files on the host
 | 
						|
system should not be stripped, even if the files on the target system
 | 
						|
are.  Mismatched or missing files will lead to confusing results
 | 
						|
during debugging.  On GNU/Linux targets, mismatched or missing
 | 
						|
files may also prevent <CODE>gdbserver</CODE> from debugging multi-threaded
 | 
						|
programs.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Connect to your target (see section <A HREF="gdb_18.html#SEC163">Connecting to a Remote Target</A>).
 | 
						|
For TCP connections, you must start up <CODE>gdbserver</CODE> prior to using
 | 
						|
the <CODE>target remote</CODE> command.  Otherwise you may get an error whose
 | 
						|
text depends on the host system, but which usually looks something like
 | 
						|
<SAMP>`Connection refused'</SAMP>.  Don't use the <CODE>load</CODE>
 | 
						|
command in GDB when using <CODE>gdbserver</CODE>, since the program is
 | 
						|
already on the target.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC171"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC170"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC165"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 17.3.3 Monitor Commands for <CODE>gdbserver</CODE> </H3>
 | 
						|
<!--docid::SEC171::-->
 | 
						|
<A NAME="Monitor Commands for gdbserver"></A>
 | 
						|
<P>
 | 
						|
 | 
						|
During a GDB session using <CODE>gdbserver</CODE>, you can use the
 | 
						|
<CODE>monitor</CODE> command to send special requests to <CODE>gdbserver</CODE>.
 | 
						|
Here are the available commands.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>monitor help</CODE>
 | 
						|
<DD>List the available monitor commands.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>monitor set debug 0</CODE>
 | 
						|
<DD><DT><CODE>monitor set debug 1</CODE>
 | 
						|
<DD>Disable or enable general debugging messages.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>monitor set remote-debug 0</CODE>
 | 
						|
<DD><DT><CODE>monitor set remote-debug 1</CODE>
 | 
						|
<DD>Disable or enable specific debugging messages associated with the remote
 | 
						|
protocol (see section <A HREF="gdb_33.html#SEC694">D. GDB Remote Serial Protocol</A>).
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>monitor exit</CODE>
 | 
						|
<DD>Tell gdbserver to exit immediately.  This command should be followed by
 | 
						|
<CODE>disconnect</CODE> to close the debugging session.  <CODE>gdbserver</CODE> will
 | 
						|
detach from any attached processes and kill any processes it created.
 | 
						|
Use <CODE>monitor exit</CODE> to terminate <CODE>gdbserver</CODE> at the end
 | 
						|
of a multi-process mode debug session.
 | 
						|
<P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Remote Configuration"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC172"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC171"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC173"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC173"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 17.4 Remote Configuration </H2>
 | 
						|
<!--docid::SEC172::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX812"></A>
 | 
						|
<A NAME="IDX813"></A>
 | 
						|
This section documents the configuration options available when
 | 
						|
debugging remote programs.  For the options related to the File I/O
 | 
						|
extensions of the remote protocol, see <A HREF="gdb_33.html#SEC722">system-call-allowed</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set remoteaddresssize <VAR>bits</VAR></CODE>
 | 
						|
<DD><A NAME="IDX814"></A>
 | 
						|
<A NAME="IDX815"></A>
 | 
						|
Set the maximum size of address in a memory packet to the specified
 | 
						|
number of bits.  GDB will mask off the address bits above
 | 
						|
that number, when it passes addresses to the remote target.  The
 | 
						|
default value is the number of bits in the target's address.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show remoteaddresssize</CODE>
 | 
						|
<DD>Show the current value of remote address size in bits.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set remotebaud <VAR>n</VAR></CODE>
 | 
						|
<DD><A NAME="IDX816"></A>
 | 
						|
Set the baud rate for the remote serial I/O to <VAR>n</VAR> baud.  The
 | 
						|
value is used to set the speed of the serial port used for debugging
 | 
						|
remote targets.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show remotebaud</CODE>
 | 
						|
<DD>Show the current speed of the remote connection.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set remotebreak</CODE>
 | 
						|
<DD><A NAME="IDX817"></A>
 | 
						|
<A NAME="IDX818"></A>
 | 
						|
<A NAME="set remotebreak"></A>
 | 
						|
If set to on, GDB sends a <CODE>BREAK</CODE> signal to the remote
 | 
						|
when you type <KBD>Ctrl-c</KBD> to interrupt the program running
 | 
						|
on the remote.  If set to off, GDB sends the <SAMP>`Ctrl-C'</SAMP>
 | 
						|
character instead.  The default is off, since most remote systems
 | 
						|
expect to see <SAMP>`Ctrl-C'</SAMP> as the interrupt signal.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show remotebreak</CODE>
 | 
						|
<DD>Show whether GDB sends <CODE>BREAK</CODE> or <SAMP>`Ctrl-C'</SAMP> to
 | 
						|
interrupt the remote program.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set remoteflow on</CODE>
 | 
						|
<DD><DT><CODE>set remoteflow off</CODE>
 | 
						|
<DD><A NAME="IDX819"></A>
 | 
						|
Enable or disable hardware flow control (<CODE>RTS</CODE>/<CODE>CTS</CODE>)
 | 
						|
on the serial port used to communicate to the remote target.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show remoteflow</CODE>
 | 
						|
<DD><A NAME="IDX820"></A>
 | 
						|
Show the current setting of hardware flow control.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set remotelogbase <VAR>base</VAR></CODE>
 | 
						|
<DD>Set the base (a.k.a. radix) of logging serial protocol
 | 
						|
communications to <VAR>base</VAR>.  Supported values of <VAR>base</VAR> are:
 | 
						|
<CODE>ascii</CODE>, <CODE>octal</CODE>, and <CODE>hex</CODE>.  The default is
 | 
						|
<CODE>ascii</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show remotelogbase</CODE>
 | 
						|
<DD>Show the current setting of the radix for logging remote serial
 | 
						|
protocol.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set remotelogfile <VAR>file</VAR></CODE>
 | 
						|
<DD><A NAME="IDX821"></A>
 | 
						|
Record remote serial communications on the named <VAR>file</VAR>.  The
 | 
						|
default is not to record at all.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show remotelogfile.</CODE>
 | 
						|
<DD>Show the current setting  of the file name on which to record the
 | 
						|
serial communications.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set remotetimeout <VAR>num</VAR></CODE>
 | 
						|
<DD><A NAME="IDX822"></A>
 | 
						|
<A NAME="IDX823"></A>
 | 
						|
Set the timeout limit to wait for the remote target to respond to
 | 
						|
<VAR>num</VAR> seconds.  The default is 2 seconds.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show remotetimeout</CODE>
 | 
						|
<DD>Show the current number of seconds to wait for the remote target
 | 
						|
responses.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX824"></A>
 | 
						|
<A NAME="IDX825"></A>
 | 
						|
<A NAME="set remote hardware-watchpoint-limit"></A>
 | 
						|
<A NAME="set remote hardware-breakpoint-limit"></A>
 | 
						|
<DT><CODE>set remote hardware-watchpoint-limit <VAR>limit</VAR></CODE>
 | 
						|
<DD><DT><CODE>set remote hardware-breakpoint-limit <VAR>limit</VAR></CODE>
 | 
						|
<DD>Restrict GDB to using <VAR>limit</VAR> remote hardware breakpoint or
 | 
						|
watchpoints.  A limit of -1, the default, is treated as unlimited.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set remote exec-file <VAR>filename</VAR></CODE>
 | 
						|
<DD><DT><CODE>show remote exec-file</CODE>
 | 
						|
<DD><A NAME="set remote exec-file"></A>
 | 
						|
<A NAME="IDX826"></A>
 | 
						|
Select the file used for <CODE>run</CODE> with <CODE>target
 | 
						|
extended-remote</CODE>.  This should be set to a filename valid on the
 | 
						|
target system.  If it is not set, the target will use a default
 | 
						|
filename (e.g. the last program run).
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX827"></A>
 | 
						|
The GDB remote protocol autodetects the packets supported by
 | 
						|
your debugging stub.  If you need to override the autodetection, you
 | 
						|
can use these commands to enable or disable individual packets.  Each
 | 
						|
packet can be set to <SAMP>`on'</SAMP> (the remote target supports this
 | 
						|
packet), <SAMP>`off'</SAMP> (the remote target does not support this packet),
 | 
						|
or <SAMP>`auto'</SAMP> (detect remote target support for this packet).  They
 | 
						|
all default to <SAMP>`auto'</SAMP>.  For more information about each packet,
 | 
						|
see <A HREF="gdb_33.html#SEC694">D. GDB Remote Serial Protocol</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
During normal use, you should not have to use any of these commands.
 | 
						|
If you do, that may be a bug in your remote debugging stub, or a bug
 | 
						|
in GDB.  You may want to report the problem to the
 | 
						|
GDB developers.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For each packet <VAR>name</VAR>, the command to enable or disable the
 | 
						|
packet is <CODE>set remote <VAR>name</VAR>-packet</CODE>.  The available settings
 | 
						|
are:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE>
 | 
						|
<TR><TD>Command Name</TD>
 | 
						|
</TD><TD> Remote Packet
 | 
						|
</TD><TD> Related Features
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>fetch-register</CODE></TD>
 | 
						|
</TD><TD> <CODE>p</CODE>
 | 
						|
</TD><TD> <CODE>info registers</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>set-register</CODE></TD>
 | 
						|
</TD><TD> <CODE>P</CODE>
 | 
						|
</TD><TD> <CODE>set</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>binary-download</CODE></TD>
 | 
						|
</TD><TD> <CODE>X</CODE>
 | 
						|
</TD><TD> <CODE>load</CODE>, <CODE>set</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>read-aux-vector</CODE></TD>
 | 
						|
</TD><TD> <CODE>qXfer:auxv:read</CODE>
 | 
						|
</TD><TD> <CODE>info auxv</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>symbol-lookup</CODE></TD>
 | 
						|
</TD><TD> <CODE>qSymbol</CODE>
 | 
						|
</TD><TD> Detecting multiple threads
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>attach</CODE></TD>
 | 
						|
</TD><TD> <CODE>vAttach</CODE>
 | 
						|
</TD><TD> <CODE>attach</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>verbose-resume</CODE></TD>
 | 
						|
</TD><TD> <CODE>vCont</CODE>
 | 
						|
</TD><TD> Stepping or resuming multiple threads
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>run</CODE></TD>
 | 
						|
</TD><TD> <CODE>vRun</CODE>
 | 
						|
</TD><TD> <CODE>run</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>software-breakpoint</CODE></TD>
 | 
						|
</TD><TD> <CODE>Z0</CODE>
 | 
						|
</TD><TD> <CODE>break</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>hardware-breakpoint</CODE></TD>
 | 
						|
</TD><TD> <CODE>Z1</CODE>
 | 
						|
</TD><TD> <CODE>hbreak</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>write-watchpoint</CODE></TD>
 | 
						|
</TD><TD> <CODE>Z2</CODE>
 | 
						|
</TD><TD> <CODE>watch</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>read-watchpoint</CODE></TD>
 | 
						|
</TD><TD> <CODE>Z3</CODE>
 | 
						|
</TD><TD> <CODE>rwatch</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>access-watchpoint</CODE></TD>
 | 
						|
</TD><TD> <CODE>Z4</CODE>
 | 
						|
</TD><TD> <CODE>awatch</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>target-features</CODE></TD>
 | 
						|
</TD><TD> <CODE>qXfer:features:read</CODE>
 | 
						|
</TD><TD> <CODE>set architecture</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>library-info</CODE></TD>
 | 
						|
</TD><TD> <CODE>qXfer:libraries:read</CODE>
 | 
						|
</TD><TD> <CODE>info sharedlibrary</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>memory-map</CODE></TD>
 | 
						|
</TD><TD> <CODE>qXfer:memory-map:read</CODE>
 | 
						|
</TD><TD> <CODE>info mem</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>read-spu-object</CODE></TD>
 | 
						|
</TD><TD> <CODE>qXfer:spu:read</CODE>
 | 
						|
</TD><TD> <CODE>info spu</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>write-spu-object</CODE></TD>
 | 
						|
</TD><TD> <CODE>qXfer:spu:write</CODE>
 | 
						|
</TD><TD> <CODE>info spu</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>get-thread-local-<BR>storage-address</CODE></TD>
 | 
						|
</TD><TD> <CODE>qGetTLSAddr</CODE>
 | 
						|
</TD><TD> Displaying <CODE>__thread</CODE> variables
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>supported-packets</CODE></TD>
 | 
						|
</TD><TD> <CODE>qSupported</CODE>
 | 
						|
</TD><TD> Remote communications parameters
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>pass-signals</CODE></TD>
 | 
						|
</TD><TD> <CODE>QPassSignals</CODE>
 | 
						|
</TD><TD> <CODE>handle <VAR>signal</VAR></CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>hostio-close-packet</CODE></TD>
 | 
						|
</TD><TD> <CODE>vFile:close</CODE>
 | 
						|
</TD><TD> <CODE>remote get</CODE>, <CODE>remote put</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>hostio-open-packet</CODE></TD>
 | 
						|
</TD><TD> <CODE>vFile:open</CODE>
 | 
						|
</TD><TD> <CODE>remote get</CODE>, <CODE>remote put</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>hostio-pread-packet</CODE></TD>
 | 
						|
</TD><TD> <CODE>vFile:pread</CODE>
 | 
						|
</TD><TD> <CODE>remote get</CODE>, <CODE>remote put</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>hostio-pwrite-packet</CODE></TD>
 | 
						|
</TD><TD> <CODE>vFile:pwrite</CODE>
 | 
						|
</TD><TD> <CODE>remote get</CODE>, <CODE>remote put</CODE>
 | 
						|
 | 
						|
</TR>
 | 
						|
<TR><TD><CODE>hostio-unlink-packet</CODE></TD>
 | 
						|
</TD><TD> <CODE>vFile:unlink</CODE>
 | 
						|
</TD><TD> <CODE>remote delete</CODE>
 | 
						|
</TR></TABLE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Remote Stub"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC173"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC172"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC174"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 17.5 Implementing a Remote Stub </H2>
 | 
						|
<!--docid::SEC173::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX828"></A>
 | 
						|
<A NAME="IDX829"></A>
 | 
						|
<A NAME="IDX830"></A>
 | 
						|
The stub files provided with GDB implement the target side of the
 | 
						|
communication protocol, and the GDB side is implemented in the
 | 
						|
GDB source file <TT>`remote.c'</TT>.  Normally, you can simply allow
 | 
						|
these subroutines to communicate, and ignore the details.  (If you're
 | 
						|
implementing your own stub file, you can still ignore the details: start
 | 
						|
with one of the existing stub files.  <TT>`sparc-stub.c'</TT> is the best
 | 
						|
organized, and therefore the easiest to read.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX831"></A>
 | 
						|
To debug a program running on another machine (the debugging
 | 
						|
<EM>target</EM> machine), you must first arrange for all the usual
 | 
						|
prerequisites for the program to run by itself.  For example, for a C
 | 
						|
program, you need:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<OL>
 | 
						|
<LI>
 | 
						|
A startup routine to set up the C runtime environment; these usually
 | 
						|
have a name like <TT>`crt0'</TT>.  The startup routine may be supplied by
 | 
						|
your hardware supplier, or you may have to write your own.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
A C subroutine library to support your program's
 | 
						|
subroutine calls, notably managing input and output.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
A way of getting your program to the other machine--for example, a
 | 
						|
download program.  These are often supplied by the hardware
 | 
						|
manufacturer, but you may have to write your own from hardware
 | 
						|
documentation.
 | 
						|
</OL>
 | 
						|
<P>
 | 
						|
 | 
						|
The next step is to arrange for your program to use a serial port to
 | 
						|
communicate with the machine where GDB is running (the <EM>host</EM>
 | 
						|
machine).  In general terms, the scheme looks like this:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><EM>On the host,</EM>
 | 
						|
<DD>GDB already understands how to use this protocol; when everything
 | 
						|
else is set up, you can simply use the <SAMP>`target remote'</SAMP> command
 | 
						|
(see section <A HREF="gdb_17.html#SEC158">Specifying a Debugging Target</A>).
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><EM>On the target,</EM>
 | 
						|
<DD>you must link with your program a few special-purpose subroutines that
 | 
						|
implement the GDB remote serial protocol.  The file containing these
 | 
						|
subroutines is called  a <EM>debugging stub</EM>.
 | 
						|
<P>
 | 
						|
 | 
						|
On certain remote targets, you can use an auxiliary program
 | 
						|
<CODE>gdbserver</CODE> instead of linking a stub into your program.
 | 
						|
See section <A HREF="gdb_18.html#SEC165">Using the <CODE>gdbserver</CODE> Program</A>, for details.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
The debugging stub is specific to the architecture of the remote
 | 
						|
machine; for example, use <TT>`sparc-stub.c'</TT> to debug programs on
 | 
						|
SPARC boards.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX832"></A>
 | 
						|
These working remote stubs are distributed with GDB:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
 | 
						|
<DT><CODE>i386-stub.c</CODE>
 | 
						|
<DD><A NAME="IDX833"></A>
 | 
						|
<A NAME="IDX834"></A>
 | 
						|
<A NAME="IDX835"></A>
 | 
						|
For Intel 386 and compatible architectures.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>m68k-stub.c</CODE>
 | 
						|
<DD><A NAME="IDX836"></A>
 | 
						|
<A NAME="IDX837"></A>
 | 
						|
<A NAME="IDX838"></A>
 | 
						|
For Motorola 680x0 architectures.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>sh-stub.c</CODE>
 | 
						|
<DD><A NAME="IDX839"></A>
 | 
						|
<A NAME="IDX840"></A>
 | 
						|
<A NAME="IDX841"></A>
 | 
						|
For Renesas SH architectures.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>sparc-stub.c</CODE>
 | 
						|
<DD><A NAME="IDX842"></A>
 | 
						|
<A NAME="IDX843"></A>
 | 
						|
For SPARC architectures.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>sparcl-stub.c</CODE>
 | 
						|
<DD><A NAME="IDX844"></A>
 | 
						|
<A NAME="IDX845"></A>
 | 
						|
<A NAME="IDX846"></A>
 | 
						|
For Fujitsu SPARCLITE architectures.
 | 
						|
<P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
The <TT>`README'</TT> file in the GDB distribution may list other
 | 
						|
recently added stubs.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_18.html#SEC174">17.5.1 What the Stub Can Do for You</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">What the stub can do for you</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_18.html#SEC175">17.5.2 What You Must Do for the Stub</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">What you must do for the stub</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_18.html#SEC176">17.5.3 Putting it All Together</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Putting it all together</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Stub Contents"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC174"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC173"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC175"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC173"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 17.5.1 What the Stub Can Do for You </H3>
 | 
						|
<!--docid::SEC174::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX847"></A>
 | 
						|
The debugging stub for your architecture supplies these three
 | 
						|
subroutines:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set_debug_traps</CODE>
 | 
						|
<DD><A NAME="IDX848"></A>
 | 
						|
<A NAME="IDX849"></A>
 | 
						|
This routine arranges for <CODE>handle_exception</CODE> to run when your
 | 
						|
program stops.  You must call this subroutine explicitly near the
 | 
						|
beginning of your program.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>handle_exception</CODE>
 | 
						|
<DD><A NAME="IDX850"></A>
 | 
						|
<A NAME="IDX851"></A>
 | 
						|
This is the central workhorse, but your program never calls it
 | 
						|
explicitly--the setup code arranges for <CODE>handle_exception</CODE> to
 | 
						|
run when a trap is triggered.
 | 
						|
<P>
 | 
						|
 | 
						|
<CODE>handle_exception</CODE> takes control when your program stops during
 | 
						|
execution (for example, on a breakpoint), and mediates communications
 | 
						|
with GDB on the host machine.  This is where the communications
 | 
						|
protocol is implemented; <CODE>handle_exception</CODE> acts as the GDB
 | 
						|
representative on the target machine.  It begins by sending summary
 | 
						|
information on the state of your program, then continues to execute,
 | 
						|
retrieving and transmitting any information GDB needs, until you
 | 
						|
execute a GDB command that makes your program resume; at that point,
 | 
						|
<CODE>handle_exception</CODE> returns control to your own code on the target
 | 
						|
machine.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>breakpoint</CODE>
 | 
						|
<DD><A NAME="IDX852"></A>
 | 
						|
Use this auxiliary subroutine to make your program contain a
 | 
						|
breakpoint.  Depending on the particular situation, this may be the only
 | 
						|
way for GDB to get control.  For instance, if your target
 | 
						|
machine has some sort of interrupt button, you won't need to call this;
 | 
						|
pressing the interrupt button transfers control to
 | 
						|
<CODE>handle_exception</CODE>---in effect, to GDB.  On some machines,
 | 
						|
simply receiving characters on the serial port may also trigger a trap;
 | 
						|
again, in that situation, you don't need to call <CODE>breakpoint</CODE> from
 | 
						|
your own program--simply running <SAMP>`target remote'</SAMP> from the host
 | 
						|
GDB session gets control.
 | 
						|
<P>
 | 
						|
 | 
						|
Call <CODE>breakpoint</CODE> if none of these is true, or if you simply want
 | 
						|
to make certain your program stops at a predetermined point for the
 | 
						|
start of your debugging session.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Bootstrapping"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC175"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC174"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC176"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC176"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC173"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 17.5.2 What You Must Do for the Stub </H3>
 | 
						|
<!--docid::SEC175::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX853"></A>
 | 
						|
The debugging stubs that come with GDB are set up for a particular
 | 
						|
chip architecture, but they have no information about the rest of your
 | 
						|
debugging target machine.
 | 
						|
</P><P>
 | 
						|
 | 
						|
First of all you need to tell the stub how to communicate with the
 | 
						|
serial port.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>int getDebugChar()</CODE>
 | 
						|
<DD><A NAME="IDX854"></A>
 | 
						|
Write this subroutine to read a single character from the serial port.
 | 
						|
It may be identical to <CODE>getchar</CODE> for your target system; a
 | 
						|
different name is used to allow you to distinguish the two if you wish.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>void putDebugChar(int)</CODE>
 | 
						|
<DD><A NAME="IDX855"></A>
 | 
						|
Write this subroutine to write a single character to the serial port.
 | 
						|
It may be identical to <CODE>putchar</CODE> for your target system; a
 | 
						|
different name is used to allow you to distinguish the two if you wish.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX856"></A>
 | 
						|
<A NAME="IDX857"></A>
 | 
						|
If you want GDB to be able to stop your program while it is
 | 
						|
running, you need to use an interrupt-driven serial driver, and arrange
 | 
						|
for it to stop when it receives a <CODE>^C</CODE> (<SAMP>`\003'</SAMP>, the control-C
 | 
						|
character).  That is the character which GDB uses to tell the
 | 
						|
remote system to stop.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Getting the debugging target to return the proper status to GDB
 | 
						|
probably requires changes to the standard stub; one quick and dirty way
 | 
						|
is to just execute a breakpoint instruction (the "dirty" part is that
 | 
						|
GDB reports a <CODE>SIGTRAP</CODE> instead of a <CODE>SIGINT</CODE>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
Other routines you need to supply are:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>void exceptionHandler (int <VAR>exception_number</VAR>, void *<VAR>exception_address</VAR>)</CODE>
 | 
						|
<DD><A NAME="IDX858"></A>
 | 
						|
Write this function to install <VAR>exception_address</VAR> in the exception
 | 
						|
handling tables.  You need to do this because the stub does not have any
 | 
						|
way of knowing what the exception handling tables on your target system
 | 
						|
are like (for example, the processor's table might be in ROM,
 | 
						|
containing entries which point to a table in RAM).
 | 
						|
<VAR>exception_number</VAR> is the exception number which should be changed;
 | 
						|
its meaning is architecture-dependent (for example, different numbers
 | 
						|
might represent divide by zero, misaligned access, etc).  When this
 | 
						|
exception occurs, control should be transferred directly to
 | 
						|
<VAR>exception_address</VAR>, and the processor state (stack, registers,
 | 
						|
and so on) should be just as it is when a processor exception occurs.  So if
 | 
						|
you want to use a jump instruction to reach <VAR>exception_address</VAR>, it
 | 
						|
should be a simple jump, not a jump to subroutine.
 | 
						|
<P>
 | 
						|
 | 
						|
For the 386, <VAR>exception_address</VAR> should be installed as an interrupt
 | 
						|
gate so that interrupts are masked while the handler runs.  The gate
 | 
						|
should be at privilege level 0 (the most privileged level).  The
 | 
						|
SPARC and 68k stubs are able to mask interrupts themselves without
 | 
						|
help from <CODE>exceptionHandler</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>void flush_i_cache()</CODE>
 | 
						|
<DD><A NAME="IDX859"></A>
 | 
						|
On SPARC and SPARCLITE only, write this subroutine to flush the
 | 
						|
instruction cache, if any, on your target machine.  If there is no
 | 
						|
instruction cache, this subroutine may be a no-op.
 | 
						|
<P>
 | 
						|
 | 
						|
On target machines that have instruction caches, GDB requires this
 | 
						|
function to make certain that the state of your program is stable.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
You must also make sure this library routine is available:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>void *memset(void *, int, int)</CODE>
 | 
						|
<DD><A NAME="IDX860"></A>
 | 
						|
This is the standard library function <CODE>memset</CODE> that sets an area of
 | 
						|
memory to a known value.  If you have one of the free versions of
 | 
						|
<CODE>libc.a</CODE>, <CODE>memset</CODE> can be found there; otherwise, you must
 | 
						|
either obtain it from your hardware manufacturer, or write your own.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
If you do not use the GNU C compiler, you may need other standard
 | 
						|
library subroutines as well; this varies from one stub to another,
 | 
						|
but in general the stubs are likely to use any of the common library
 | 
						|
subroutines which <CODE>GCC</CODE> generates as inline code.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Debug Session"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC176"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC175"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC173"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 17.5.3 Putting it All Together </H3>
 | 
						|
<!--docid::SEC176::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX861"></A>
 | 
						|
In summary, when your program is ready to debug, you must follow these
 | 
						|
steps.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<OL>
 | 
						|
<LI>
 | 
						|
Make sure you have defined the supporting low-level routines
 | 
						|
(see section <A HREF="gdb_18.html#SEC175">What You Must Do for the Stub</A>):
 | 
						|
<TABLE><tr><td> </td><td class=display><pre style="font-family: serif"><CODE>getDebugChar</CODE>, <CODE>putDebugChar</CODE>,
 | 
						|
<CODE>flush_i_cache</CODE>, <CODE>memset</CODE>, <CODE>exceptionHandler</CODE>.
 | 
						|
</pre></td></tr></table><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Insert these lines near the top of your program:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>set_debug_traps();
 | 
						|
breakpoint();
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
For the 680x0 stub only, you need to provide a variable called
 | 
						|
<CODE>exceptionHook</CODE>.  Normally you just use:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>void (*exceptionHook)() = 0;
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
but if before calling <CODE>set_debug_traps</CODE>, you set it to point to a
 | 
						|
function in your program, that function is called when
 | 
						|
<CODE>GDB</CODE> continues after stopping on a trap (for example, bus
 | 
						|
error).  The function indicated by <CODE>exceptionHook</CODE> is called with
 | 
						|
one parameter: an <CODE>int</CODE> which is the exception number.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Compile and link together: your program, the GDB debugging stub for
 | 
						|
your target architecture, and the supporting subroutines.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Make sure you have a serial connection between your target machine and
 | 
						|
the GDB host, and identify the serial port on the host.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Download your program to your target machine (or get it there by
 | 
						|
whatever means the manufacturer provides), and start it.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Start GDB on the host, and connect to the target
 | 
						|
(see section <A HREF="gdb_18.html#SEC163">Connecting to a Remote Target</A>).
 | 
						|
<P>
 | 
						|
 | 
						|
</OL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Configurations"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_18.html#SEC162"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_19.html#SEC177"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<BR>  
 | 
						|
<FONT SIZE="-1">
 | 
						|
 | 
						|
<address>
 | 
						|
 | 
						|
<p>Please send FSF & GNU inquiries & questions to <a
 | 
						|
href="mailto:gnu@gnu.org">gnu@gnu.org</a>.  There are also <a
 | 
						|
href="http://www.gnu.org/home.html#ContactInfo">other ways to
 | 
						|
contact</a> the FSF.</p>
 | 
						|
 | 
						|
<p>These pages are maintained by <a
 | 
						|
href="http://www.gnu.org/software/gdb/">the GDB developers</a>.</p>
 | 
						|
 | 
						|
<p>Copyright Free Software Foundation, Inc., 59 Temple Place - Suite
 | 
						|
330, Boston, MA 02111, USA.</p>
 | 
						|
 | 
						|
<p>Verbatim copying and distribution of this entire article is
 | 
						|
permitted in any medium, provided this notice is preserved.</p>
 | 
						|
 | 
						|
</address>
 | 
						|
 | 
						|
This document was generated
 | 
						|
by <I>GDB Administrator</I> on <I>March, 27  2008</I>
 | 
						|
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 | 
						|
"><I>texi2html</I></A>
 | 
						|
 | 
						|
</BODY>
 | 
						|
</HTML>
 |