2160 lines
		
	
	
	
		
			95 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			2160 lines
		
	
	
	
		
			95 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: Stopping</TITLE>
 | 
						|
 | 
						|
<META NAME="description" CONTENT="Debugging with GDB: Stopping">
 | 
						|
<META NAME="keywords" CONTENT="Debugging with GDB: Stopping">
 | 
						|
<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="SEC31"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_5.html#SEC30"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> >> </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> 5. Stopping and Continuing </H1>
 | 
						|
<!--docid::SEC31::-->
 | 
						|
<P>
 | 
						|
 | 
						|
The principal purposes of using a debugger are so that you can stop your
 | 
						|
program before it terminates; or so that, if your program runs into
 | 
						|
trouble, you can investigate and find out why.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Inside GDB, your program may stop for any of several reasons,
 | 
						|
such as a signal, a breakpoint, or reaching a new line after a
 | 
						|
GDB command such as <CODE>step</CODE>.  You may then examine and
 | 
						|
change variables, set new breakpoints or remove old ones, and then
 | 
						|
continue execution.  Usually, the messages shown by GDB provide
 | 
						|
ample explanation of the status of your program--but you can also
 | 
						|
explicitly request this information at any time.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX171"></A>
 | 
						|
<DT><CODE>info program</CODE>
 | 
						|
<DD>Display information about the status of your program: whether it is
 | 
						|
running or not, what process it is, and why it stopped.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC32">5.1 Breakpoints, Watchpoints, and Catchpoints</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Breakpoints, watchpoints, and catchpoints</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC43">5.2 Continuing and Stepping</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Resuming execution</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC44">5.3 Signals</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC45">5.4 Stopping and Starting Multi-thread Programs</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Stopping and starting multi-thread programs</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Breakpoints"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC32"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC33"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1 Breakpoints, Watchpoints, and Catchpoints </H2>
 | 
						|
<!--docid::SEC32::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX172"></A>
 | 
						|
A <EM>breakpoint</EM> makes your program stop whenever a certain point in
 | 
						|
the program is reached.  For each breakpoint, you can add conditions to
 | 
						|
control in finer detail whether your program stops.  You can set
 | 
						|
breakpoints with the <CODE>break</CODE> command and its variants (see section <A HREF="gdb_6.html#SEC33">Setting Breakpoints</A>), to specify the place where your program
 | 
						|
should stop by line number, function name or exact address in the
 | 
						|
program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
On some systems, you can set breakpoints in shared libraries before
 | 
						|
the executable is run.  There is a minor limitation on HP-UX systems:
 | 
						|
you must wait until the executable is run in order to set breakpoints
 | 
						|
in shared library routines that are not called directly by the program
 | 
						|
(for example, routines that are arguments in a <CODE>pthread_create</CODE>
 | 
						|
call).
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX173"></A>
 | 
						|
<A NAME="IDX174"></A>
 | 
						|
<A NAME="IDX175"></A>
 | 
						|
<A NAME="IDX176"></A>
 | 
						|
<A NAME="IDX177"></A>
 | 
						|
A <EM>watchpoint</EM> is a special breakpoint that stops your program
 | 
						|
when the value of an expression changes.  The expression may be a value
 | 
						|
of a variable, or it could involve values of one or more variables
 | 
						|
combined by operators, such as <SAMP>`a + b'</SAMP>.  This is sometimes called
 | 
						|
<EM>data breakpoints</EM>.  You must use a different command to set
 | 
						|
watchpoints (see section <A HREF="gdb_6.html#SEC34">Setting Watchpoints</A>), but aside
 | 
						|
from that, you can manage a watchpoint like any other breakpoint: you
 | 
						|
enable, disable, and delete both breakpoints and watchpoints using the
 | 
						|
same commands.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You can arrange to have values from your program displayed automatically
 | 
						|
whenever GDB stops at a breakpoint.  See section <A HREF="gdb_9.html#SEC65">Automatic Display</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX178"></A>
 | 
						|
<A NAME="IDX179"></A>
 | 
						|
A <EM>catchpoint</EM> is another special breakpoint that stops your program
 | 
						|
when a certain kind of event occurs, such as the throwing of a C<TT>++</TT>
 | 
						|
exception or the loading of a library.  As with watchpoints, you use a
 | 
						|
different command to set a catchpoint (see section <A HREF="gdb_6.html#SEC35">Setting Catchpoints</A>), but aside from that, you can manage a catchpoint like any
 | 
						|
other breakpoint.  (To stop when your program receives a signal, use the
 | 
						|
<CODE>handle</CODE> command; see <A HREF="gdb_6.html#SEC44">Signals</A>.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX180"></A>
 | 
						|
<A NAME="IDX181"></A>
 | 
						|
GDB assigns a number to each breakpoint, watchpoint, or
 | 
						|
catchpoint when you create it; these numbers are successive integers
 | 
						|
starting with one.  In many of the commands for controlling various
 | 
						|
features of breakpoints you use the breakpoint number to say which
 | 
						|
breakpoint you want to change.  Each breakpoint may be <EM>enabled</EM> or
 | 
						|
<EM>disabled</EM>; if disabled, it has no effect on your program until you
 | 
						|
enable it again.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX182"></A>
 | 
						|
<A NAME="IDX183"></A>
 | 
						|
Some GDB commands accept a range of breakpoints on which to
 | 
						|
operate.  A breakpoint range is either a single breakpoint number, like
 | 
						|
<SAMP>`5'</SAMP>, or two such numbers, in increasing order, separated by a
 | 
						|
hyphen, like <SAMP>`5-7'</SAMP>.  When a breakpoint range is given to a command,
 | 
						|
all breakpoints in that range are operated on.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC33">5.1.1 Setting Breakpoints</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Setting breakpoints</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC34">5.1.2 Setting Watchpoints</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Setting watchpoints</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC35">5.1.3 Setting Catchpoints</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Setting catchpoints</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC36">5.1.4 Deleting Breakpoints</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Deleting breakpoints</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC37">5.1.5 Disabling Breakpoints</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Disabling breakpoints</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC38">5.1.6 Break Conditions</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Break conditions</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC39">5.1.7 Breakpoint Command Lists</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Breakpoint command lists</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC40">5.1.8 Breakpoint Menus</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Breakpoint menus</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC41">5.1.9 "Cannot insert breakpoints"</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_6.html#SEC42">5.1.10 "Breakpoint address adjusted..."</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Set Breaks"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC33"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC34"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.1 Setting Breakpoints </H3>
 | 
						|
<!--docid::SEC33::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX184"></A>
 | 
						|
<A NAME="IDX185"></A>
 | 
						|
<A NAME="IDX186"></A>
 | 
						|
<A NAME="IDX187"></A>
 | 
						|
Breakpoints are set with the <CODE>break</CODE> command (abbreviated
 | 
						|
<CODE>b</CODE>).  The debugger convenience variable <SAMP>`$bpnum'</SAMP> records the
 | 
						|
number of the breakpoint you've set most recently; see <A HREF="gdb_9.html#SEC68">Convenience Variables</A>, for a discussion of what you can do with
 | 
						|
convenience variables.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>break <VAR>location</VAR></CODE>
 | 
						|
<DD>Set a breakpoint at the given <VAR>location</VAR>, which can specify a
 | 
						|
function name, a line number, or an address of an instruction.
 | 
						|
(See section <A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A>, for a list of all the possible ways to
 | 
						|
specify a <VAR>location</VAR>.)  The breakpoint will stop your program just
 | 
						|
before it executes any of the code in the specified <VAR>location</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
When using source languages that permit overloading of symbols, such as
 | 
						|
C<TT>++</TT>, a function name may refer to more than one possible place to break.
 | 
						|
See section <A HREF="gdb_6.html#SEC40">Breakpoint Menus</A>, for a discussion of that situation.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>break</CODE>
 | 
						|
<DD>When called without any arguments, <CODE>break</CODE> sets a breakpoint at
 | 
						|
the next instruction to be executed in the selected stack frame
 | 
						|
(see section <A HREF="gdb_7.html#SEC46">Examining the Stack</A>).  In any selected frame but the
 | 
						|
innermost, this makes your program stop as soon as control
 | 
						|
returns to that frame.  This is similar to the effect of a
 | 
						|
<CODE>finish</CODE> command in the frame inside the selected frame--except
 | 
						|
that <CODE>finish</CODE> does not leave an active breakpoint.  If you use
 | 
						|
<CODE>break</CODE> without an argument in the innermost frame, GDB stops
 | 
						|
the next time it reaches the current location; this may be useful
 | 
						|
inside loops.
 | 
						|
<P>
 | 
						|
 | 
						|
GDB normally ignores breakpoints when it resumes execution, until at
 | 
						|
least one instruction has been executed.  If it did not do this, you
 | 
						|
would be unable to proceed past a breakpoint without first disabling the
 | 
						|
breakpoint.  This rule applies whether or not the breakpoint already
 | 
						|
existed when your program stopped.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>break <small>...</small> if <VAR>cond</VAR></CODE>
 | 
						|
<DD>Set a breakpoint with condition <VAR>cond</VAR>; evaluate the expression
 | 
						|
<VAR>cond</VAR> each time the breakpoint is reached, and stop only if the
 | 
						|
value is nonzero--that is, if <VAR>cond</VAR> evaluates as true.
 | 
						|
<SAMP>`<small>...</small>'</SAMP> stands for one of the possible arguments described
 | 
						|
above (or no argument) specifying where to break.  See section <A HREF="gdb_6.html#SEC38">Break Conditions</A>, for more information on breakpoint conditions.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX188"></A>
 | 
						|
<DT><CODE>tbreak <VAR>args</VAR></CODE>
 | 
						|
<DD>Set a breakpoint enabled only for one stop.  <VAR>args</VAR> are the
 | 
						|
same as for the <CODE>break</CODE> command, and the breakpoint is set in the same
 | 
						|
way, but the breakpoint is automatically deleted after the first time your
 | 
						|
program stops there.  See section <A HREF="gdb_6.html#SEC37">Disabling Breakpoints</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX189"></A>
 | 
						|
<A NAME="IDX190"></A>
 | 
						|
<DT><CODE>hbreak <VAR>args</VAR></CODE>
 | 
						|
<DD>Set a hardware-assisted breakpoint.  <VAR>args</VAR> are the same as for the
 | 
						|
<CODE>break</CODE> command and the breakpoint is set in the same way, but the
 | 
						|
breakpoint requires hardware support and some target hardware may not
 | 
						|
have this support.  The main purpose of this is EPROM/ROM code
 | 
						|
debugging, so you can set a breakpoint at an instruction without
 | 
						|
changing the instruction.  This can be used with the new trap-generation
 | 
						|
provided by SPARClite DSU and most x86-based targets.  These targets
 | 
						|
will generate traps when a program accesses some data or instruction
 | 
						|
address that is assigned to the debug registers.  However the hardware
 | 
						|
breakpoint registers can take a limited number of breakpoints.  For
 | 
						|
example, on the DSU, only two data breakpoints can be set at a time, and
 | 
						|
GDB will reject this command if more than two are used.  Delete
 | 
						|
or disable unused hardware breakpoints before setting new ones
 | 
						|
(see section <A HREF="gdb_6.html#SEC37">Disabling Breakpoints</A>).
 | 
						|
See section <A HREF="gdb_6.html#SEC38">Break Conditions</A>.
 | 
						|
For remote targets, you can restrict the number of hardware
 | 
						|
breakpoints GDB will use, see  <A HREF="gdb_18.html#set remote hardware-breakpoint-limit">set remote hardware-breakpoint-limit</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX191"></A>
 | 
						|
<DT><CODE>thbreak <VAR>args</VAR></CODE>
 | 
						|
<DD>Set a hardware-assisted breakpoint enabled only for one stop.  <VAR>args</VAR>
 | 
						|
are the same as for the <CODE>hbreak</CODE> command and the breakpoint is set in
 | 
						|
the same way.  However, like the <CODE>tbreak</CODE> command,
 | 
						|
the breakpoint is automatically deleted after the
 | 
						|
first time your program stops there.  Also, like the <CODE>hbreak</CODE>
 | 
						|
command, the breakpoint requires hardware support and some target hardware
 | 
						|
may not have this support.  See section <A HREF="gdb_6.html#SEC37">Disabling Breakpoints</A>.
 | 
						|
See also <A HREF="gdb_6.html#SEC38">Break Conditions</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX192"></A>
 | 
						|
<A NAME="IDX193"></A>
 | 
						|
<A NAME="IDX194"></A>
 | 
						|
<A NAME="IDX195"></A>
 | 
						|
<DT><CODE>rbreak <VAR>regex</VAR></CODE>
 | 
						|
<DD>Set breakpoints on all functions matching the regular expression
 | 
						|
<VAR>regex</VAR>.  This command sets an unconditional breakpoint on all
 | 
						|
matches, printing a list of all breakpoints it set.  Once these
 | 
						|
breakpoints are set, they are treated just like the breakpoints set with
 | 
						|
the <CODE>break</CODE> command.  You can delete them, disable them, or make
 | 
						|
them conditional the same way as any other breakpoint.
 | 
						|
<P>
 | 
						|
 | 
						|
The syntax of the regular expression is the standard one used with tools
 | 
						|
like <TT>`grep'</TT>.  Note that this is different from the syntax used by
 | 
						|
shells, so for instance <CODE>foo*</CODE> matches all functions that include
 | 
						|
an <CODE>fo</CODE> followed by zero or more <CODE>o</CODE>s.  There is an implicit
 | 
						|
<CODE>.*</CODE> leading and trailing the regular expression you supply, so to
 | 
						|
match only functions that begin with <CODE>foo</CODE>, use <CODE>^foo</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX196"></A>
 | 
						|
When debugging C<TT>++</TT> programs, <CODE>rbreak</CODE> is useful for setting
 | 
						|
breakpoints on overloaded functions that are not members of any special
 | 
						|
classes.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX197"></A>
 | 
						|
The <CODE>rbreak</CODE> command can be used to set breakpoints in
 | 
						|
<STRONG>all</STRONG> the functions in a program, like this:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) rbreak .
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="IDX198"></A>
 | 
						|
<A NAME="IDX199"></A>
 | 
						|
<DT><CODE>info breakpoints [<VAR>n</VAR>]</CODE>
 | 
						|
<DD><DT><CODE>info break [<VAR>n</VAR>]</CODE>
 | 
						|
<DD><DT><CODE>info watchpoints [<VAR>n</VAR>]</CODE>
 | 
						|
<DD>Print a table of all breakpoints, watchpoints, and catchpoints set and
 | 
						|
not deleted.  Optional argument <VAR>n</VAR> means print information only
 | 
						|
about the specified breakpoint (or watchpoint or catchpoint).  For
 | 
						|
each breakpoint, following columns are printed:
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><EM>Breakpoint Numbers</EM>
 | 
						|
<DD><DT><EM>Type</EM>
 | 
						|
<DD>Breakpoint, watchpoint, or catchpoint.
 | 
						|
<DT><EM>Disposition</EM>
 | 
						|
<DD>Whether the breakpoint is marked to be disabled or deleted when hit.
 | 
						|
<DT><EM>Enabled or Disabled</EM>
 | 
						|
<DD>Enabled breakpoints are marked with <SAMP>`y'</SAMP>.  <SAMP>`n'</SAMP> marks breakpoints
 | 
						|
that are not enabled.
 | 
						|
<DT><EM>Address</EM>
 | 
						|
<DD>Where the breakpoint is in your program, as a memory address.  For a
 | 
						|
pending breakpoint whose address is not yet known, this field will
 | 
						|
contain <SAMP>`<PENDING>'</SAMP>.  Such breakpoint won't fire until a shared
 | 
						|
library that has the symbol or line referred by breakpoint is loaded.
 | 
						|
See below for details.  A breakpoint with several locations will
 | 
						|
have <SAMP>`<MULTIPLE>'</SAMP> in this field--see below for details.
 | 
						|
<DT><EM>What</EM>
 | 
						|
<DD>Where the breakpoint is in the source for your program, as a file and
 | 
						|
line number.  For a pending breakpoint, the original string passed to
 | 
						|
the breakpoint command will be listed as it cannot be resolved until
 | 
						|
the appropriate shared library is loaded in the future.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
If a breakpoint is conditional, <CODE>info break</CODE> shows the condition on
 | 
						|
the line following the affected breakpoint; breakpoint commands, if any,
 | 
						|
are listed after that.  A pending breakpoint is allowed to have a condition
 | 
						|
specified for it.  The condition is not parsed for validity until a shared
 | 
						|
library is loaded that allows the pending breakpoint to resolve to a
 | 
						|
valid location.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<CODE>info break</CODE> with a breakpoint
 | 
						|
number <VAR>n</VAR> as argument lists only that breakpoint.  The
 | 
						|
convenience variable <CODE>$_</CODE> and the default examining-address for
 | 
						|
the <CODE>x</CODE> command are set to the address of the last breakpoint
 | 
						|
listed (see section <A HREF="gdb_9.html#SEC64">Examining Memory</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
<CODE>info break</CODE> displays a count of the number of times the breakpoint
 | 
						|
has been hit.  This is especially useful in conjunction with the
 | 
						|
<CODE>ignore</CODE> command.  You can ignore a large number of breakpoint
 | 
						|
hits, look at the breakpoint info to see how many times the breakpoint
 | 
						|
was hit, and then run again, ignoring one less than that number.  This
 | 
						|
will get you quickly to the last hit of that breakpoint.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
GDB allows you to set any number of breakpoints at the same place in
 | 
						|
your program.  There is nothing silly or meaningless about this.  When
 | 
						|
the breakpoints are conditional, this is even useful
 | 
						|
(see section <A HREF="gdb_6.html#SEC38">Break Conditions</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
It is possible that a breakpoint corresponds to several locations
 | 
						|
in your program.  Examples of this situation are:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
 | 
						|
<LI>
 | 
						|
For a C<TT>++</TT> constructor, the GCC compiler generates several
 | 
						|
instances of the function body, used in different cases.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
For a C<TT>++</TT> template function, a given line in the function can
 | 
						|
correspond to any number of instantiations.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
For an inlined function, a given source line can correspond to
 | 
						|
several places where that function is inlined.
 | 
						|
<P>
 | 
						|
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
In all those cases, GDB will insert a breakpoint at all
 | 
						|
the relevant locations.
 | 
						|
</P><P>
 | 
						|
 | 
						|
A breakpoint with multiple locations is displayed in the breakpoint
 | 
						|
table using several rows--one header row, followed by one row for
 | 
						|
each breakpoint location.  The header row has <SAMP>`<MULTIPLE>'</SAMP> in the
 | 
						|
address column.  The rows for individual locations contain the actual
 | 
						|
addresses for locations, and show the functions to which those
 | 
						|
locations belong.  The number column for a location is of the form
 | 
						|
<VAR>breakpoint-number</VAR>.<VAR>location-number</VAR>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For example:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>Num     Type           Disp Enb  Address    What
 | 
						|
1       breakpoint     keep y    <MULTIPLE>
 | 
						|
        stop only if i==1
 | 
						|
        breakpoint already hit 1 time
 | 
						|
1.1                         y    0x080486a2 in void foo<int>() at t.cc:8
 | 
						|
1.2                         y    0x080486ca in void foo<double>() at t.cc:8
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Each location can be individually enabled or disabled by passing
 | 
						|
<VAR>breakpoint-number</VAR>.<VAR>location-number</VAR> as argument to the
 | 
						|
<CODE>enable</CODE> and <CODE>disable</CODE> commands.  Note that you cannot
 | 
						|
delete the individual locations from the list, you can only delete the
 | 
						|
entire list of locations that belong to their parent breakpoint (with
 | 
						|
the <KBD>delete <VAR>num</VAR></KBD> command, where <VAR>num</VAR> is the number of
 | 
						|
the parent breakpoint, 1 in the above example).  Disabling or enabling
 | 
						|
the parent breakpoint (see section <A HREF="gdb_6.html#SEC37">5.1.5 Disabling Breakpoints</A>) affects all of the locations
 | 
						|
that belong to that breakpoint.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX200"></A>
 | 
						|
It's quite common to have a breakpoint inside a shared library.
 | 
						|
Shared libraries can be loaded and unloaded explicitly,
 | 
						|
and possibly repeatedly, as the program is executed.  To support
 | 
						|
this use case, GDB updates breakpoint locations whenever
 | 
						|
any shared library is loaded or unloaded.  Typically, you would
 | 
						|
set a breakpoint in a shared library at the beginning of your
 | 
						|
debugging session, when the library is not loaded, and when the
 | 
						|
symbols from the library are not available.  When you try to set
 | 
						|
breakpoint, GDB will ask you if you want to set
 | 
						|
a so called <EM>pending breakpoint</EM>---breakpoint whose address
 | 
						|
is not yet resolved.
 | 
						|
</P><P>
 | 
						|
 | 
						|
After the program is run, whenever a new shared library is loaded,
 | 
						|
GDB reevaluates all the breakpoints.  When a newly loaded
 | 
						|
shared library contains the symbol or line referred to by some
 | 
						|
pending breakpoint, that breakpoint is resolved and becomes an
 | 
						|
ordinary breakpoint.  When a library is unloaded, all breakpoints
 | 
						|
that refer to its symbols or source lines become pending again.
 | 
						|
</P><P>
 | 
						|
 | 
						|
This logic works for breakpoints with multiple locations, too.  For
 | 
						|
example, if you have a breakpoint in a C<TT>++</TT> template function, and
 | 
						|
a newly loaded shared library has an instantiation of that template,
 | 
						|
a new location is added to the list of locations for the breakpoint.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Except for having unresolved address, pending breakpoints do not
 | 
						|
differ from regular breakpoints.  You can set conditions or commands,
 | 
						|
enable and disable them and perform other breakpoint operations.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB provides some additional commands for controlling what
 | 
						|
happens when the <SAMP>`break'</SAMP> command cannot resolve breakpoint
 | 
						|
address specification to an address:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX201"></A>
 | 
						|
<A NAME="IDX202"></A>
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set breakpoint pending auto</CODE>
 | 
						|
<DD>This is the default behavior.  When GDB cannot find the breakpoint
 | 
						|
location, it queries you whether a pending breakpoint should be created.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set breakpoint pending on</CODE>
 | 
						|
<DD>This indicates that an unrecognized breakpoint location should automatically
 | 
						|
result in a pending breakpoint being created.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set breakpoint pending off</CODE>
 | 
						|
<DD>This indicates that pending breakpoints are not to be created.  Any
 | 
						|
unrecognized breakpoint location results in an error.  This setting does
 | 
						|
not affect any pending breakpoints previously created.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show breakpoint pending</CODE>
 | 
						|
<DD>Show the current behavior setting for creating pending breakpoints.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
The settings above only affect the <CODE>break</CODE> command and its
 | 
						|
variants.  Once breakpoint is set, it will be automatically updated
 | 
						|
as shared libraries are loaded and unloaded.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX203"></A>
 | 
						|
For some targets, GDB can automatically decide if hardware or
 | 
						|
software breakpoints should be used, depending on whether the
 | 
						|
breakpoint address is read-only or read-write.  This applies to
 | 
						|
breakpoints set with the <CODE>break</CODE> command as well as to internal
 | 
						|
breakpoints set by commands like <CODE>next</CODE> and <CODE>finish</CODE>.  For
 | 
						|
breakpoints set with <CODE>hbreak</CODE>, GDB will always use hardware
 | 
						|
breakpoints.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You can control this automatic behaviour with the following commands::
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX204"></A>
 | 
						|
<A NAME="IDX205"></A>
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set breakpoint auto-hw on</CODE>
 | 
						|
<DD>This is the default behavior.  When GDB sets a breakpoint, it
 | 
						|
will try to use the target memory map to decide if software or hardware
 | 
						|
breakpoint must be used.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set breakpoint auto-hw off</CODE>
 | 
						|
<DD>This indicates GDB should not automatically select breakpoint
 | 
						|
type.  If the target provides a memory map, GDB will warn when
 | 
						|
trying to set software breakpoint at a read-only address.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX206"></A>
 | 
						|
<A NAME="IDX207"></A>
 | 
						|
GDB itself sometimes sets breakpoints in your program for
 | 
						|
special purposes, such as proper handling of <CODE>longjmp</CODE> (in C
 | 
						|
programs).  These internal breakpoints are assigned negative numbers,
 | 
						|
starting with <CODE>-1</CODE>; <SAMP>`info breakpoints'</SAMP> does not display them.
 | 
						|
You can see these breakpoints with the GDB maintenance command
 | 
						|
<SAMP>`maint info breakpoints'</SAMP> (see  <A HREF="gdb_32.html#maint info breakpoints">maint info breakpoints</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Set Watchpoints"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC34"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC33"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC35"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC35"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.2 Setting Watchpoints </H3>
 | 
						|
<!--docid::SEC34::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX208"></A>
 | 
						|
You can use a watchpoint to stop execution whenever the value of an
 | 
						|
expression changes, without having to predict a particular place where
 | 
						|
this may happen.  (This is sometimes called a <EM>data breakpoint</EM>.)
 | 
						|
The expression may be as simple as the value of a single variable, or
 | 
						|
as complex as many variables combined by operators.  Examples include:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
A reference to the value of a single variable.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
An address cast to an appropriate data type.  For example,
 | 
						|
<SAMP>`*(int *)0x12345678'</SAMP> will watch a 4-byte region at the specified
 | 
						|
address (assuming an <CODE>int</CODE> occupies 4 bytes).
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
An arbitrarily complex expression, such as <SAMP>`a*b + c/d'</SAMP>.  The
 | 
						|
expression can use any operators valid in the program's native
 | 
						|
language (see section <A HREF="gdb_13.html#SEC102">12. Using GDB with Different Languages</A>).
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX209"></A>
 | 
						|
<A NAME="IDX210"></A>
 | 
						|
Depending on your system, watchpoints may be implemented in software or
 | 
						|
hardware.  GDB does software watchpointing by single-stepping your
 | 
						|
program and testing the variable's value each time, which is hundreds of
 | 
						|
times slower than normal execution.  (But this may still be worth it, to
 | 
						|
catch errors where you have no clue what part of your program is the
 | 
						|
culprit.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
On some systems, such as HP-UX, PowerPC, GNU/Linux and most other
 | 
						|
x86-based targets, GDB includes support for hardware
 | 
						|
watchpoints, which do not slow down the running of your program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX211"></A>
 | 
						|
<DT><CODE>watch <VAR>expr</VAR> [thread <VAR>threadnum</VAR>]</CODE>
 | 
						|
<DD>Set a watchpoint for an expression.  GDB will break when the
 | 
						|
expression <VAR>expr</VAR> is written into by the program and its value
 | 
						|
changes.  The simplest (and the most popular) use of this command is
 | 
						|
to watch the value of a single variable:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) watch foo
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
If the command includes a <CODE>[thread <VAR>threadnum</VAR>]</CODE>
 | 
						|
clause, GDB breaks only when the thread identified by
 | 
						|
<VAR>threadnum</VAR> changes the value of <VAR>expr</VAR>.  If any other threads
 | 
						|
change the value of <VAR>expr</VAR>, GDB will not break.  Note
 | 
						|
that watchpoints restricted to a single thread in this way only work
 | 
						|
with Hardware Watchpoints.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX212"></A>
 | 
						|
<DT><CODE>rwatch <VAR>expr</VAR> [thread <VAR>threadnum</VAR>]</CODE>
 | 
						|
<DD>Set a watchpoint that will break when the value of <VAR>expr</VAR> is read
 | 
						|
by the program.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX213"></A>
 | 
						|
<DT><CODE>awatch <VAR>expr</VAR> [thread <VAR>threadnum</VAR>]</CODE>
 | 
						|
<DD>Set a watchpoint that will break when <VAR>expr</VAR> is either read from
 | 
						|
or written into by the program.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX214"></A>
 | 
						|
<DT><CODE>info watchpoints</CODE>
 | 
						|
<DD>This command prints a list of watchpoints, breakpoints, and catchpoints;
 | 
						|
it is the same as <CODE>info break</CODE> (see section <A HREF="gdb_6.html#SEC33">5.1.1 Setting Breakpoints</A>).
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
GDB sets a <EM>hardware watchpoint</EM> if possible.  Hardware
 | 
						|
watchpoints execute very quickly, and the debugger reports a change in
 | 
						|
value at the exact instruction where the change occurs.  If GDB
 | 
						|
cannot set a hardware watchpoint, it sets a software watchpoint, which
 | 
						|
executes more slowly and reports the change in value at the next
 | 
						|
<EM>statement</EM>, not the instruction, after the change occurs.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX215"></A>
 | 
						|
You can force GDB to use only software watchpoints with the
 | 
						|
<KBD>set can-use-hw-watchpoints 0</KBD> command.  With this variable set to
 | 
						|
zero, GDB will never try to use hardware watchpoints, even if
 | 
						|
the underlying system supports them.  (Note that hardware-assisted
 | 
						|
watchpoints that were set <EM>before</EM> setting
 | 
						|
<CODE>can-use-hw-watchpoints</CODE> to zero will still use the hardware
 | 
						|
mechanism of watching expression values.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set can-use-hw-watchpoints</CODE>
 | 
						|
<DD><A NAME="IDX216"></A>
 | 
						|
Set whether or not to use hardware watchpoints.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show can-use-hw-watchpoints</CODE>
 | 
						|
<DD><A NAME="IDX217"></A>
 | 
						|
Show the current mode of using hardware watchpoints.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
For remote targets, you can restrict the number of hardware
 | 
						|
watchpoints GDB will use, see  <A HREF="gdb_18.html#set remote hardware-breakpoint-limit">set remote hardware-breakpoint-limit</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
When you issue the <CODE>watch</CODE> command, GDB reports
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>Hardware watchpoint <VAR>num</VAR>: <VAR>expr</VAR>
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
if it was able to set a hardware watchpoint.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Currently, the <CODE>awatch</CODE> and <CODE>rwatch</CODE> commands can only set
 | 
						|
hardware watchpoints, because accesses to data that don't change the
 | 
						|
value of the watched expression cannot be detected without examining
 | 
						|
every instruction as it is being executed, and GDB does not do
 | 
						|
that currently.  If GDB finds that it is unable to set a
 | 
						|
hardware breakpoint with the <CODE>awatch</CODE> or <CODE>rwatch</CODE> command, it
 | 
						|
will print a message like this:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>Expression cannot be implemented with read/access watchpoint.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Sometimes, GDB cannot set a hardware watchpoint because the
 | 
						|
data type of the watched expression is wider than what a hardware
 | 
						|
watchpoint on the target machine can handle.  For example, some systems
 | 
						|
can only watch regions that are up to 4 bytes wide; on such systems you
 | 
						|
cannot set hardware watchpoints for an expression that yields a
 | 
						|
double-precision floating-point number (which is typically 8 bytes
 | 
						|
wide).  As a work-around, it might be possible to break the large region
 | 
						|
into a series of smaller ones and watch them with separate watchpoints.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you set too many hardware watchpoints, GDB might be unable
 | 
						|
to insert all of them when you resume the execution of your program.
 | 
						|
Since the precise number of active watchpoints is unknown until such
 | 
						|
time as the program is about to be resumed, GDB might not be
 | 
						|
able to warn you about this when you set the watchpoints, and the
 | 
						|
warning will be printed only when the program is resumed:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>Hardware watchpoint <VAR>num</VAR>: Could not insert watchpoint
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
If this happens, delete or disable some of the watchpoints.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Watching complex expressions that reference many variables can also
 | 
						|
exhaust the resources available for hardware-assisted watchpoints.
 | 
						|
That's because GDB needs to watch every variable in the
 | 
						|
expression with separately allocated resources.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The SPARClite DSU will generate traps when a program accesses some data
 | 
						|
or instruction address that is assigned to the debug registers.  For the
 | 
						|
data addresses, DSU facilitates the <CODE>watch</CODE> command.  However the
 | 
						|
hardware breakpoint registers can only take two data watchpoints, and
 | 
						|
both watchpoints must be the same kind.  For example, you can set two
 | 
						|
watchpoints with <CODE>watch</CODE> commands, two with <CODE>rwatch</CODE> commands,
 | 
						|
<STRONG>or</STRONG> two with <CODE>awatch</CODE> commands, but you cannot set one
 | 
						|
watchpoint with one command and the other with a different command.
 | 
						|
GDB will reject the command if you try to mix watchpoints.
 | 
						|
Delete or disable unused watchpoint commands before setting new ones.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you call a function interactively using <CODE>print</CODE> or <CODE>call</CODE>,
 | 
						|
any watchpoints you have set will be inactive until GDB reaches another
 | 
						|
kind of breakpoint or the call completes.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB automatically deletes watchpoints that watch local
 | 
						|
(automatic) variables, or expressions that involve such variables, when
 | 
						|
they go out of scope, that is, when the execution leaves the block in
 | 
						|
which these variables were defined.  In particular, when the program
 | 
						|
being debugged terminates, <EM>all</EM> local variables go out of scope,
 | 
						|
and so only watchpoints that watch global variables remain set.  If you
 | 
						|
rerun the program, you will need to set all such watchpoints again.  One
 | 
						|
way of doing that would be to set a code breakpoint at the entry to the
 | 
						|
<CODE>main</CODE> function and when it breaks, set all the watchpoints.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX218"></A>
 | 
						|
<A NAME="IDX219"></A>
 | 
						|
In multi-threaded programs, watchpoints will detect changes to the
 | 
						|
watched expression from every thread.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM> In multi-threaded programs, software watchpoints
 | 
						|
have only limited usefulness.  If GDB creates a software
 | 
						|
watchpoint, it can only watch the value of an expression <EM>in a
 | 
						|
single thread</EM>.  If you are confident that the expression can only
 | 
						|
change due to the current thread's activity (and if you are also
 | 
						|
confident that no other thread can become current), then you can use
 | 
						|
software watchpoints as usual.  However, GDB may not notice
 | 
						|
when a non-current thread's activity changes the expression.  (Hardware
 | 
						|
watchpoints, in contrast, watch an expression in all threads.)
 | 
						|
</BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
See  <A HREF="gdb_18.html#set remote hardware-watchpoint-limit">set remote hardware-watchpoint-limit</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Set Catchpoints"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC35"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC34"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC36"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC36"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.3 Setting Catchpoints </H3>
 | 
						|
<!--docid::SEC35::-->
 | 
						|
<P>
 | 
						|
 | 
						|
You can use <EM>catchpoints</EM> to cause the debugger to stop for certain
 | 
						|
kinds of program events, such as C<TT>++</TT> exceptions or the loading of a
 | 
						|
shared library.  Use the <CODE>catch</CODE> command to set a catchpoint.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX220"></A>
 | 
						|
<DT><CODE>catch <VAR>event</VAR></CODE>
 | 
						|
<DD>Stop when <VAR>event</VAR> occurs.  <VAR>event</VAR> can be any of the following:
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>throw</CODE>
 | 
						|
<DD><A NAME="IDX221"></A>
 | 
						|
The throwing of a C<TT>++</TT> exception.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>catch</CODE>
 | 
						|
<DD>The catching of a C<TT>++</TT> exception.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>exception</CODE>
 | 
						|
<DD><A NAME="IDX222"></A>
 | 
						|
<A NAME="IDX223"></A>
 | 
						|
An Ada exception being raised.  If an exception name is specified
 | 
						|
at the end of the command (eg <CODE>catch exception Program_Error</CODE>),
 | 
						|
the debugger will stop only when this specific exception is raised.
 | 
						|
Otherwise, the debugger stops execution when any Ada exception is raised.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>exception unhandled</CODE>
 | 
						|
<DD>An exception that was raised but is not handled by the program.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>assert</CODE>
 | 
						|
<DD>A failed Ada assertion.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>exec</CODE>
 | 
						|
<DD><A NAME="IDX224"></A>
 | 
						|
A call to <CODE>exec</CODE>.  This is currently only available for HP-UX
 | 
						|
and GNU/Linux.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>fork</CODE>
 | 
						|
<DD>A call to <CODE>fork</CODE>.  This is currently only available for HP-UX
 | 
						|
and GNU/Linux.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>vfork</CODE>
 | 
						|
<DD>A call to <CODE>vfork</CODE>.  This is currently only available for HP-UX
 | 
						|
and GNU/Linux.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>load</CODE>
 | 
						|
<DD><DT><CODE>load <VAR>libname</VAR></CODE>
 | 
						|
<DD><A NAME="IDX225"></A>
 | 
						|
The dynamic loading of any shared library, or the loading of the library
 | 
						|
<VAR>libname</VAR>.  This is currently only available for HP-UX.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>unload</CODE>
 | 
						|
<DD><DT><CODE>unload <VAR>libname</VAR></CODE>
 | 
						|
<DD>The unloading of any dynamically loaded shared library, or the unloading
 | 
						|
of the library <VAR>libname</VAR>.  This is currently only available for HP-UX.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>tcatch <VAR>event</VAR></CODE>
 | 
						|
<DD>Set a catchpoint that is enabled only for one stop.  The catchpoint is
 | 
						|
automatically deleted after the first time the event is caught.
 | 
						|
<P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Use the <CODE>info break</CODE> command to list the current catchpoints.
 | 
						|
</P><P>
 | 
						|
 | 
						|
There are currently some limitations to C<TT>++</TT> exception handling
 | 
						|
(<CODE>catch throw</CODE> and <CODE>catch catch</CODE>) in GDB:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
If you call a function interactively, GDB normally returns
 | 
						|
control to you when the function has finished executing.  If the call
 | 
						|
raises an exception, however, the call may bypass the mechanism that
 | 
						|
returns control to you and cause your program either to abort or to
 | 
						|
simply continue running until it hits a breakpoint, catches a signal
 | 
						|
that GDB is listening for, or exits.  This is the case even if
 | 
						|
you set a catchpoint for the exception; catchpoints on exceptions are
 | 
						|
disabled within interactive calls.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
You cannot raise an exception interactively.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
You cannot install an exception handler interactively.
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX226"></A>
 | 
						|
Sometimes <CODE>catch</CODE> is not the best way to debug exception handling:
 | 
						|
if you need to know exactly where an exception is raised, it is better to
 | 
						|
stop <EM>before</EM> the exception handler is called, since that way you
 | 
						|
can see the stack before any unwinding takes place.  If you set a
 | 
						|
breakpoint in an exception handler instead, it may not be easy to find
 | 
						|
out where the exception was raised.
 | 
						|
</P><P>
 | 
						|
 | 
						|
To stop just before an exception handler is called, you need some
 | 
						|
knowledge of the implementation.  In the case of GNU C<TT>++</TT>, exceptions are
 | 
						|
raised by calling a library function named <CODE>__raise_exception</CODE>
 | 
						|
which has the following ANSI C interface:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>    /* <VAR>addr</VAR> is where the exception identifier is stored.
 | 
						|
       <VAR>id</VAR> is the exception identifier.  */
 | 
						|
    void __raise_exception (void **addr, void *id);
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
To make the debugger catch all exceptions before any stack
 | 
						|
unwinding takes place, set a breakpoint on <CODE>__raise_exception</CODE>
 | 
						|
(see section <A HREF="gdb_6.html#SEC32">Breakpoints; Watchpoints; and Exceptions</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
With a conditional breakpoint (see section <A HREF="gdb_6.html#SEC38">Break Conditions</A>)
 | 
						|
that depends on the value of <VAR>id</VAR>, you can stop your program when
 | 
						|
a specific exception is raised.  You can use multiple conditional
 | 
						|
breakpoints to stop your program when any of a number of exceptions are
 | 
						|
raised.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Delete Breaks"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC36"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC35"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC37"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC37"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.4 Deleting Breakpoints </H3>
 | 
						|
<!--docid::SEC36::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX227"></A>
 | 
						|
<A NAME="IDX228"></A>
 | 
						|
It is often necessary to eliminate a breakpoint, watchpoint, or
 | 
						|
catchpoint once it has done its job and you no longer want your program
 | 
						|
to stop there.  This is called <EM>deleting</EM> the breakpoint.  A
 | 
						|
breakpoint that has been deleted no longer exists; it is forgotten.
 | 
						|
</P><P>
 | 
						|
 | 
						|
With the <CODE>clear</CODE> command you can delete breakpoints according to
 | 
						|
where they are in your program.  With the <CODE>delete</CODE> command you can
 | 
						|
delete individual breakpoints, watchpoints, or catchpoints by specifying
 | 
						|
their breakpoint numbers.
 | 
						|
</P><P>
 | 
						|
 | 
						|
It is not necessary to delete a breakpoint to proceed past it.  GDB
 | 
						|
automatically ignores breakpoints on the first instruction to be executed
 | 
						|
when you continue execution without changing the execution address.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX229"></A>
 | 
						|
<DT><CODE>clear</CODE>
 | 
						|
<DD>Delete any breakpoints at the next instruction to be executed in the
 | 
						|
selected stack frame (see section <A HREF="gdb_7.html#SEC49">Selecting a Frame</A>).  When
 | 
						|
the innermost frame is selected, this is a good way to delete a
 | 
						|
breakpoint where your program just stopped.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>clear <VAR>location</VAR></CODE>
 | 
						|
<DD>Delete any breakpoints set at the specified <VAR>location</VAR>.
 | 
						|
See section <A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A>, for the various forms of <VAR>location</VAR>; the
 | 
						|
most useful ones are listed below:
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>clear <VAR>function</VAR></CODE>
 | 
						|
<DD><DT><CODE>clear <VAR>filename</VAR>:<VAR>function</VAR></CODE>
 | 
						|
<DD>Delete any breakpoints set at entry to the named <VAR>function</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>clear <VAR>linenum</VAR></CODE>
 | 
						|
<DD><DT><CODE>clear <VAR>filename</VAR>:<VAR>linenum</VAR></CODE>
 | 
						|
<DD>Delete any breakpoints set at or within the code of the specified
 | 
						|
<VAR>linenum</VAR> of the specified <VAR>filename</VAR>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX230"></A>
 | 
						|
<A NAME="IDX231"></A>
 | 
						|
<A NAME="IDX232"></A>
 | 
						|
<DT><CODE>delete [breakpoints] [<VAR>range</VAR><small>...</small>]</CODE>
 | 
						|
<DD>Delete the breakpoints, watchpoints, or catchpoints of the breakpoint
 | 
						|
ranges specified as arguments.  If no argument is specified, delete all
 | 
						|
breakpoints (GDB asks confirmation, unless you have <CODE>set
 | 
						|
confirm off</CODE>).  You can abbreviate this command as <CODE>d</CODE>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Disabling"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC37"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC36"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC38"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC38"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.5 Disabling Breakpoints </H3>
 | 
						|
<!--docid::SEC37::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX233"></A>
 | 
						|
Rather than deleting a breakpoint, watchpoint, or catchpoint, you might
 | 
						|
prefer to <EM>disable</EM> it.  This makes the breakpoint inoperative as if
 | 
						|
it had been deleted, but remembers the information on the breakpoint so
 | 
						|
that you can <EM>enable</EM> it again later.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You disable and enable breakpoints, watchpoints, and catchpoints with
 | 
						|
the <CODE>enable</CODE> and <CODE>disable</CODE> commands, optionally specifying one
 | 
						|
or more breakpoint numbers as arguments.  Use <CODE>info break</CODE> or
 | 
						|
<CODE>info watch</CODE> to print a list of breakpoints, watchpoints, and
 | 
						|
catchpoints if you do not know which numbers to use.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Disabling and enabling a breakpoint that has multiple locations
 | 
						|
affects all of its locations.
 | 
						|
</P><P>
 | 
						|
 | 
						|
A breakpoint, watchpoint, or catchpoint can have any of four different
 | 
						|
states of enablement:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
Enabled.  The breakpoint stops your program.  A breakpoint set
 | 
						|
with the <CODE>break</CODE> command starts out in this state.
 | 
						|
<LI>
 | 
						|
Disabled.  The breakpoint has no effect on your program.
 | 
						|
<LI>
 | 
						|
Enabled once.  The breakpoint stops your program, but then becomes
 | 
						|
disabled.
 | 
						|
<LI>
 | 
						|
Enabled for deletion.  The breakpoint stops your program, but
 | 
						|
immediately after it does so it is deleted permanently.  A breakpoint
 | 
						|
set with the <CODE>tbreak</CODE> command starts out in this state.
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
You can use the following commands to enable or disable breakpoints,
 | 
						|
watchpoints, and catchpoints:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX234"></A>
 | 
						|
<A NAME="IDX235"></A>
 | 
						|
<DT><CODE>disable [breakpoints] [<VAR>range</VAR><small>...</small>]</CODE>
 | 
						|
<DD>Disable the specified breakpoints--or all breakpoints, if none are
 | 
						|
listed.  A disabled breakpoint has no effect but is not forgotten.  All
 | 
						|
options such as ignore-counts, conditions and commands are remembered in
 | 
						|
case the breakpoint is enabled again later.  You may abbreviate
 | 
						|
<CODE>disable</CODE> as <CODE>dis</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX236"></A>
 | 
						|
<DT><CODE>enable [breakpoints] [<VAR>range</VAR><small>...</small>]</CODE>
 | 
						|
<DD>Enable the specified breakpoints (or all defined breakpoints).  They
 | 
						|
become effective once again in stopping your program.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>enable [breakpoints] once <VAR>range</VAR><small>...</small></CODE>
 | 
						|
<DD>Enable the specified breakpoints temporarily.  GDB disables any
 | 
						|
of these breakpoints immediately after stopping your program.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>enable [breakpoints] delete <VAR>range</VAR><small>...</small></CODE>
 | 
						|
<DD>Enable the specified breakpoints to work once, then die.  GDB
 | 
						|
deletes any of these breakpoints as soon as your program stops there.
 | 
						|
Breakpoints set by the <CODE>tbreak</CODE> command start out in this state.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Except for a breakpoint set with <CODE>tbreak</CODE> (see section <A HREF="gdb_6.html#SEC33">Setting Breakpoints</A>), breakpoints that you set are initially enabled;
 | 
						|
subsequently, they become disabled or enabled only when you use one of
 | 
						|
the commands above.  (The command <CODE>until</CODE> can set and delete a
 | 
						|
breakpoint of its own, but it does not change the state of your other
 | 
						|
breakpoints; see <A HREF="gdb_6.html#SEC43">Continuing and Stepping</A>.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Conditions"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC38"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC37"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC39"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC39"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.6 Break Conditions </H3>
 | 
						|
<!--docid::SEC38::-->
 | 
						|
<P>
 | 
						|
 | 
						|
The simplest sort of breakpoint breaks every time your program reaches a
 | 
						|
specified place.  You can also specify a <EM>condition</EM> for a
 | 
						|
breakpoint.  A condition is just a Boolean expression in your
 | 
						|
programming language (see section <A HREF="gdb_9.html#SEC60">Expressions</A>).  A breakpoint with
 | 
						|
a condition evaluates the expression each time your program reaches it,
 | 
						|
and your program stops only if the condition is <EM>true</EM>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
This is the converse of using assertions for program validation; in that
 | 
						|
situation, you want to stop when the assertion is violated--that is,
 | 
						|
when the condition is false.  In C, if you want to test an assertion expressed
 | 
						|
by the condition <VAR>assert</VAR>, you should set the condition
 | 
						|
<SAMP>`! <VAR>assert</VAR>'</SAMP> on the appropriate breakpoint.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Conditions are also accepted for watchpoints; you may not need them,
 | 
						|
since a watchpoint is inspecting the value of an expression anyhow--but
 | 
						|
it might be simpler, say, to just set a watchpoint on a variable name,
 | 
						|
and specify a condition that tests whether the new value is an interesting
 | 
						|
one.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Break conditions can have side effects, and may even call functions in
 | 
						|
your program.  This can be useful, for example, to activate functions
 | 
						|
that log program progress, or to use your own print functions to
 | 
						|
format special data structures. The effects are completely predictable
 | 
						|
unless there is another enabled breakpoint at the same address.  (In
 | 
						|
that case, GDB might see the other breakpoint first and stop your
 | 
						|
program without checking the condition of this one.)  Note that
 | 
						|
breakpoint commands are usually more convenient and flexible than break
 | 
						|
conditions for the
 | 
						|
purpose of performing side effects when a breakpoint is reached
 | 
						|
(see section <A HREF="gdb_6.html#SEC39">Breakpoint Command Lists</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
Break conditions can be specified when a breakpoint is set, by using
 | 
						|
<SAMP>`if'</SAMP> in the arguments to the <CODE>break</CODE> command.  See section <A HREF="gdb_6.html#SEC33">Setting Breakpoints</A>.  They can also be changed at any time
 | 
						|
with the <CODE>condition</CODE> command.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You can also use the <CODE>if</CODE> keyword with the <CODE>watch</CODE> command.
 | 
						|
The <CODE>catch</CODE> command does not recognize the <CODE>if</CODE> keyword;
 | 
						|
<CODE>condition</CODE> is the only way to impose a further condition on a
 | 
						|
catchpoint.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX237"></A>
 | 
						|
<DT><CODE>condition <VAR>bnum</VAR> <VAR>expression</VAR></CODE>
 | 
						|
<DD>Specify <VAR>expression</VAR> as the break condition for breakpoint,
 | 
						|
watchpoint, or catchpoint number <VAR>bnum</VAR>.  After you set a condition,
 | 
						|
breakpoint <VAR>bnum</VAR> stops your program only if the value of
 | 
						|
<VAR>expression</VAR> is true (nonzero, in C).  When you use
 | 
						|
<CODE>condition</CODE>, GDB checks <VAR>expression</VAR> immediately for
 | 
						|
syntactic correctness, and to determine whether symbols in it have
 | 
						|
referents in the context of your breakpoint.  If <VAR>expression</VAR> uses
 | 
						|
symbols not referenced in the context of the breakpoint, GDB
 | 
						|
prints an error message:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>No symbol "foo" in current context.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
GDB does
 | 
						|
not actually evaluate <VAR>expression</VAR> at the time the <CODE>condition</CODE>
 | 
						|
command (or a command that sets a breakpoint with a condition, like
 | 
						|
<CODE>break if <small>...</small></CODE>) is given, however.  See section <A HREF="gdb_9.html#SEC60">Expressions</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>condition <VAR>bnum</VAR></CODE>
 | 
						|
<DD>Remove the condition from breakpoint number <VAR>bnum</VAR>.  It becomes
 | 
						|
an ordinary unconditional breakpoint.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX238"></A>
 | 
						|
A special case of a breakpoint condition is to stop only when the
 | 
						|
breakpoint has been reached a certain number of times.  This is so
 | 
						|
useful that there is a special way to do it, using the <EM>ignore
 | 
						|
count</EM> of the breakpoint.  Every breakpoint has an ignore count, which
 | 
						|
is an integer.  Most of the time, the ignore count is zero, and
 | 
						|
therefore has no effect.  But if your program reaches a breakpoint whose
 | 
						|
ignore count is positive, then instead of stopping, it just decrements
 | 
						|
the ignore count by one and continues.  As a result, if the ignore count
 | 
						|
value is <VAR>n</VAR>, the breakpoint does not stop the next <VAR>n</VAR> times
 | 
						|
your program reaches it.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX239"></A>
 | 
						|
<DT><CODE>ignore <VAR>bnum</VAR> <VAR>count</VAR></CODE>
 | 
						|
<DD>Set the ignore count of breakpoint number <VAR>bnum</VAR> to <VAR>count</VAR>.
 | 
						|
The next <VAR>count</VAR> times the breakpoint is reached, your program's
 | 
						|
execution does not stop; other than to decrement the ignore count, GDB
 | 
						|
takes no action.
 | 
						|
<P>
 | 
						|
 | 
						|
To make the breakpoint stop the next time it is reached, specify
 | 
						|
a count of zero.
 | 
						|
</P><P>
 | 
						|
 | 
						|
When you use <CODE>continue</CODE> to resume execution of your program from a
 | 
						|
breakpoint, you can specify an ignore count directly as an argument to
 | 
						|
<CODE>continue</CODE>, rather than using <CODE>ignore</CODE>.  See section <A HREF="gdb_6.html#SEC43">Continuing and Stepping</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If a breakpoint has a positive ignore count and a condition, the
 | 
						|
condition is not checked.  Once the ignore count reaches zero,
 | 
						|
GDB resumes checking the condition.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You could achieve the effect of the ignore count with a condition such
 | 
						|
as <SAMP>`$foo-- <= 0'</SAMP> using a debugger convenience variable that
 | 
						|
is decremented each time.  See section <A HREF="gdb_9.html#SEC68">Convenience Variables</A>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Ignore counts apply to breakpoints, watchpoints, and catchpoints.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Break Commands"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC39"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC38"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC40"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC40"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.7 Breakpoint Command Lists </H3>
 | 
						|
<!--docid::SEC39::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX240"></A>
 | 
						|
You can give any breakpoint (or watchpoint or catchpoint) a series of
 | 
						|
commands to execute when your program stops due to that breakpoint.  For
 | 
						|
example, you might want to print the values of certain expressions, or
 | 
						|
enable other breakpoints.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX241"></A>
 | 
						|
<A NAME="IDX242"></A>
 | 
						|
<DT><CODE>commands [<VAR>bnum</VAR>]</CODE>
 | 
						|
<DD><DT><CODE><small>...</small> <VAR>command-list</VAR> <small>...</small></CODE>
 | 
						|
<DD><DT><CODE>end</CODE>
 | 
						|
<DD>Specify a list of commands for breakpoint number <VAR>bnum</VAR>.  The commands
 | 
						|
themselves appear on the following lines.  Type a line containing just
 | 
						|
<CODE>end</CODE> to terminate the commands.
 | 
						|
<P>
 | 
						|
 | 
						|
To remove all commands from a breakpoint, type <CODE>commands</CODE> and
 | 
						|
follow it immediately with <CODE>end</CODE>; that is, give no commands.
 | 
						|
</P><P>
 | 
						|
 | 
						|
With no <VAR>bnum</VAR> argument, <CODE>commands</CODE> refers to the last
 | 
						|
breakpoint, watchpoint, or catchpoint set (not to the breakpoint most
 | 
						|
recently encountered).
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Pressing <KBD>RET</KBD> as a means of repeating the last GDB command is
 | 
						|
disabled within a <VAR>command-list</VAR>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You can use breakpoint commands to start your program up again.  Simply
 | 
						|
use the <CODE>continue</CODE> command, or <CODE>step</CODE>, or any other command
 | 
						|
that resumes execution.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Any other commands in the command list, after a command that resumes
 | 
						|
execution, are ignored.  This is because any time you resume execution
 | 
						|
(even with a simple <CODE>next</CODE> or <CODE>step</CODE>), you may encounter
 | 
						|
another breakpoint--which could have its own command list, leading to
 | 
						|
ambiguities about which list to execute.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX243"></A>
 | 
						|
If the first command you specify in a command list is <CODE>silent</CODE>, the
 | 
						|
usual message about stopping at a breakpoint is not printed.  This may
 | 
						|
be desirable for breakpoints that are to print a specific message and
 | 
						|
then continue.  If none of the remaining commands print anything, you
 | 
						|
see no sign that the breakpoint was reached.  <CODE>silent</CODE> is
 | 
						|
meaningful only at the beginning of a breakpoint command list.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The commands <CODE>echo</CODE>, <CODE>output</CODE>, and <CODE>printf</CODE> allow you to
 | 
						|
print precisely controlled output, and are often useful in silent
 | 
						|
breakpoints.  See section <A HREF="gdb_21.html#SEC233">Commands for Controlled Output</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For example, here is how you could use breakpoint commands to print the
 | 
						|
value of <CODE>x</CODE> at entry to <CODE>foo</CODE> whenever <CODE>x</CODE> is positive.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>break foo if x>0
 | 
						|
commands
 | 
						|
silent
 | 
						|
printf "x is %d\n",x
 | 
						|
cont
 | 
						|
end
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
One application for breakpoint commands is to compensate for one bug so
 | 
						|
you can test for another.  Put a breakpoint just after the erroneous line
 | 
						|
of code, give it a condition to detect the case in which something
 | 
						|
erroneous has been done, and give it commands to assign correct values
 | 
						|
to any variables that need them.  End with the <CODE>continue</CODE> command
 | 
						|
so that your program does not stop, and start with the <CODE>silent</CODE>
 | 
						|
command so that no output is produced.  Here is an example:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>break 403
 | 
						|
commands
 | 
						|
silent
 | 
						|
set x = y + 4
 | 
						|
cont
 | 
						|
end
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="Breakpoint Menus"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC40"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC39"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC41"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC41"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.8 Breakpoint Menus </H3>
 | 
						|
<!--docid::SEC40::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Some programming languages (notably C<TT>++</TT> and Objective-C) permit a
 | 
						|
single function name
 | 
						|
to be defined several times, for application in different contexts.
 | 
						|
This is called <EM>overloading</EM>.  When a function name is overloaded,
 | 
						|
<SAMP>`break <VAR>function</VAR>'</SAMP> is not enough to tell GDB where you want
 | 
						|
a breakpoint.  You can use explicit signature of the function, as in
 | 
						|
<SAMP>`break <VAR>function</VAR>(<VAR>types</VAR>)'</SAMP>, to specify which
 | 
						|
particular version of the function you want.  Otherwise, GDB offers
 | 
						|
you a menu of numbered choices for different possible breakpoints, and
 | 
						|
waits for your selection with the prompt <SAMP>`>'</SAMP>.  The first two
 | 
						|
options are always <SAMP>`[0] cancel'</SAMP> and <SAMP>`[1] all'</SAMP>.  Typing <KBD>1</KBD>
 | 
						|
sets a breakpoint at each definition of <VAR>function</VAR>, and typing
 | 
						|
<KBD>0</KBD> aborts the <CODE>break</CODE> command without setting any new
 | 
						|
breakpoints.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For example, the following session excerpt shows an attempt to set a
 | 
						|
breakpoint at the overloaded symbol <CODE>String::after</CODE>.
 | 
						|
We choose three particular definitions of that function name:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) b String::after
 | 
						|
[0] cancel
 | 
						|
[1] all
 | 
						|
[2] file:String.cc; line number:867
 | 
						|
[3] file:String.cc; line number:860
 | 
						|
[4] file:String.cc; line number:875
 | 
						|
[5] file:String.cc; line number:853
 | 
						|
[6] file:String.cc; line number:846
 | 
						|
[7] file:String.cc; line number:735
 | 
						|
> 2 4 6
 | 
						|
Breakpoint 1 at 0xb26c: file String.cc, line 867.
 | 
						|
Breakpoint 2 at 0xb344: file String.cc, line 875.
 | 
						|
Breakpoint 3 at 0xafcc: file String.cc, line 846.
 | 
						|
Multiple breakpoints were set.
 | 
						|
Use the "delete" command to delete unwanted
 | 
						|
 breakpoints.
 | 
						|
(gdb)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="Error in Breakpoints"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC41"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC40"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC42"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.9 "Cannot insert breakpoints" </H3>
 | 
						|
<!--docid::SEC41::-->
 | 
						|
Under some operating systems, breakpoints cannot be used in a program if
 | 
						|
any other process is running that program.  In this situation,
 | 
						|
attempting to run or continue a program with a breakpoint causes
 | 
						|
GDB to print an error message:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>Cannot insert breakpoints.
 | 
						|
The same program may be running in another process.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
When this happens, you have three ways to proceed:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<OL>
 | 
						|
<LI>
 | 
						|
Remove or disable the breakpoints, then continue.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Suspend GDB, and copy the file containing your program to a new
 | 
						|
name.  Resume GDB and use the <CODE>exec-file</CODE> command to specify
 | 
						|
that GDB should run your program under that name.
 | 
						|
Then start your program again.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Relink your program so that the text segment is nonsharable, using the
 | 
						|
linker option <SAMP>`-N'</SAMP>.  The operating system limitation may not apply
 | 
						|
to nonsharable executables.
 | 
						|
</OL>
 | 
						|
<P>
 | 
						|
 | 
						|
A similar message can be printed if you request too many active
 | 
						|
hardware-assisted breakpoints and watchpoints:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>Stopped; cannot insert breakpoints.
 | 
						|
You may have requested too many hardware breakpoints and watchpoints.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
This message is printed when you attempt to resume the program, since
 | 
						|
only then GDB knows exactly how many hardware breakpoints and
 | 
						|
watchpoints it needs to insert.
 | 
						|
</P><P>
 | 
						|
 | 
						|
When this message is printed, you need to disable or remove some of the
 | 
						|
hardware-assisted breakpoints and watchpoints, and then continue.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Breakpoint-related Warnings"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC42"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC41"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC34"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC32"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> >> </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> 5.1.10 "Breakpoint address adjusted..." </H3>
 | 
						|
<!--docid::SEC42::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Some processor architectures place constraints on the addresses at
 | 
						|
which breakpoints may be placed.  For architectures thus constrained,
 | 
						|
GDB will attempt to adjust the breakpoint's address to comply
 | 
						|
with the constraints dictated by the architecture.
 | 
						|
</P><P>
 | 
						|
 | 
						|
One example of such an architecture is the Fujitsu FR-V.  The FR-V is
 | 
						|
a VLIW architecture in which a number of RISC-like instructions may be
 | 
						|
bundled together for parallel execution.  The FR-V architecture
 | 
						|
constrains the location of a breakpoint instruction within such a
 | 
						|
bundle to the instruction with the lowest address.  GDB
 | 
						|
honors this constraint by adjusting a breakpoint's address to the
 | 
						|
first in the bundle.
 | 
						|
</P><P>
 | 
						|
 | 
						|
It is not uncommon for optimized code to have bundles which contain
 | 
						|
instructions from different source statements, thus it may happen that
 | 
						|
a breakpoint's address will be adjusted from one source statement to
 | 
						|
another.  Since this adjustment may significantly alter GDB's
 | 
						|
breakpoint related behavior from what the user expects, a warning is
 | 
						|
printed when the breakpoint is first set and also when the breakpoint
 | 
						|
is hit.
 | 
						|
</P><P>
 | 
						|
 | 
						|
A warning like the one below is printed when setting a breakpoint
 | 
						|
that's been subject to address adjustment:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>warning: Breakpoint address adjusted from 0x00010414 to 0x00010410.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Such warnings are printed both for user settable and GDB's
 | 
						|
internal breakpoints.  If you see one of these warnings, you should
 | 
						|
verify that a breakpoint set at the adjusted address will have the
 | 
						|
desired affect.  If not, the breakpoint in question may be removed and
 | 
						|
other breakpoints may be set which will have the desired behavior.
 | 
						|
E.g., it may be sufficient to place the breakpoint at a later
 | 
						|
instruction.  A conditional breakpoint may also be useful in some
 | 
						|
cases to prevent the breakpoint from triggering too often.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB will also issue a warning when stopping at one of these
 | 
						|
adjusted breakpoints:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>warning: Breakpoint 1 address previously adjusted from 0x00010414
 | 
						|
to 0x00010410.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
When this warning is encountered, it may be too late to take remedial
 | 
						|
action except in cases where the breakpoint is hit earlier or more
 | 
						|
frequently than expected.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Continuing and Stepping"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC43"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC42"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC44"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC44"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> >> </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> 5.2 Continuing and Stepping </H2>
 | 
						|
<!--docid::SEC43::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX244"></A>
 | 
						|
<A NAME="IDX245"></A>
 | 
						|
<A NAME="IDX246"></A>
 | 
						|
<EM>Continuing</EM> means resuming program execution until your program
 | 
						|
completes normally.  In contrast, <EM>stepping</EM> means executing just
 | 
						|
one more "step" of your program, where "step" may mean either one
 | 
						|
line of source code, or one machine instruction (depending on what
 | 
						|
particular command you use).  Either when continuing or when stepping,
 | 
						|
your program may stop even sooner, due to a breakpoint or a signal.  (If
 | 
						|
it stops due to a signal, you may want to use <CODE>handle</CODE>, or use
 | 
						|
<SAMP>`signal 0'</SAMP> to resume execution.  See section <A HREF="gdb_6.html#SEC44">Signals</A>.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX247"></A>
 | 
						|
<A NAME="IDX248"></A>
 | 
						|
<A NAME="IDX249"></A>
 | 
						|
<DT><CODE>continue [<VAR>ignore-count</VAR>]</CODE>
 | 
						|
<DD><DT><CODE>c [<VAR>ignore-count</VAR>]</CODE>
 | 
						|
<DD><DT><CODE>fg [<VAR>ignore-count</VAR>]</CODE>
 | 
						|
<DD>Resume program execution, at the address where your program last stopped;
 | 
						|
any breakpoints set at that address are bypassed.  The optional argument
 | 
						|
<VAR>ignore-count</VAR> allows you to specify a further number of times to
 | 
						|
ignore a breakpoint at this location; its effect is like that of
 | 
						|
<CODE>ignore</CODE> (see section <A HREF="gdb_6.html#SEC38">Break Conditions</A>).
 | 
						|
<P>
 | 
						|
 | 
						|
The argument <VAR>ignore-count</VAR> is meaningful only when your program
 | 
						|
stopped due to a breakpoint.  At other times, the argument to
 | 
						|
<CODE>continue</CODE> is ignored.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The synonyms <CODE>c</CODE> and <CODE>fg</CODE> (for <EM>foreground</EM>, as the
 | 
						|
debugged program is deemed to be the foreground program) are provided
 | 
						|
purely for convenience, and have exactly the same behavior as
 | 
						|
<CODE>continue</CODE>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
To resume execution at a different place, you can use <CODE>return</CODE>
 | 
						|
(see section <A HREF="gdb_15.html#SEC151">Returning from a Function</A>) to go back to the
 | 
						|
calling function; or <CODE>jump</CODE> (see section <A HREF="gdb_15.html#SEC149">Continuing at a Different Address</A>) to go to an arbitrary location in your program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
A typical technique for using stepping is to set a breakpoint
 | 
						|
(see section <A HREF="gdb_6.html#SEC32">Breakpoints; Watchpoints; and Catchpoints</A>) at the
 | 
						|
beginning of the function or the section of your program where a problem
 | 
						|
is believed to lie, run your program until it stops at that breakpoint,
 | 
						|
and then step through the suspect area, examining the variables that are
 | 
						|
interesting, until you see the problem happen.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX250"></A>
 | 
						|
<A NAME="IDX251"></A>
 | 
						|
<DT><CODE>step</CODE>
 | 
						|
<DD>Continue running your program until control reaches a different source
 | 
						|
line, then stop it and return control to GDB.  This command is
 | 
						|
abbreviated <CODE>s</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM> If you use the <CODE>step</CODE> command while control is
 | 
						|
within a function that was compiled without debugging information,
 | 
						|
execution proceeds until control reaches a function that does have
 | 
						|
debugging information.  Likewise, it will not step into a function which
 | 
						|
is compiled without debugging information.  To step through functions
 | 
						|
without debugging information, use the <CODE>stepi</CODE> command, described
 | 
						|
below.
 | 
						|
</BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
The <CODE>step</CODE> command only stops at the first instruction of a source
 | 
						|
line.  This prevents the multiple stops that could otherwise occur in
 | 
						|
<CODE>switch</CODE> statements, <CODE>for</CODE> loops, etc.  <CODE>step</CODE> continues
 | 
						|
to stop if a function that has debugging information is called within
 | 
						|
the line.  In other words, <CODE>step</CODE> <EM>steps inside</EM> any functions
 | 
						|
called within the line.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Also, the <CODE>step</CODE> command only enters a function if there is line
 | 
						|
number information for the function.  Otherwise it acts like the
 | 
						|
<CODE>next</CODE> command.  This avoids problems when using <CODE>cc -gl</CODE>
 | 
						|
on MIPS machines.  Previously, <CODE>step</CODE> entered subroutines if there
 | 
						|
was any debugging information about the routine.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>step <VAR>count</VAR></CODE>
 | 
						|
<DD>Continue running as in <CODE>step</CODE>, but do so <VAR>count</VAR> times.  If a
 | 
						|
breakpoint is reached, or a signal not related to stepping occurs before
 | 
						|
<VAR>count</VAR> steps, stepping stops right away.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX252"></A>
 | 
						|
<A NAME="IDX253"></A>
 | 
						|
<DT><CODE>next [<VAR>count</VAR>]</CODE>
 | 
						|
<DD>Continue to the next source line in the current (innermost) stack frame.
 | 
						|
This is similar to <CODE>step</CODE>, but function calls that appear within
 | 
						|
the line of code are executed without stopping.  Execution stops when
 | 
						|
control reaches a different line of code at the original stack level
 | 
						|
that was executing when you gave the <CODE>next</CODE> command.  This command
 | 
						|
is abbreviated <CODE>n</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
An argument <VAR>count</VAR> is a repeat count, as for <CODE>step</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The <CODE>next</CODE> command only stops at the first instruction of a
 | 
						|
source line.  This prevents multiple stops that could otherwise occur in
 | 
						|
<CODE>switch</CODE> statements, <CODE>for</CODE> loops, etc.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX254"></A>
 | 
						|
<DT><CODE>set step-mode</CODE>
 | 
						|
<DD><A NAME="IDX255"></A>
 | 
						|
<A NAME="IDX256"></A>
 | 
						|
<DT><CODE>set step-mode on</CODE>
 | 
						|
<DD>The <CODE>set step-mode on</CODE> command causes the <CODE>step</CODE> command to
 | 
						|
stop at the first instruction of a function which contains no debug line
 | 
						|
information rather than stepping over it.
 | 
						|
<P>
 | 
						|
 | 
						|
This is useful in cases where you may be interested in inspecting the
 | 
						|
machine instructions of a function which has no symbolic info and do not
 | 
						|
want GDB to automatically skip over this function.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>set step-mode off</CODE>
 | 
						|
<DD>Causes the <CODE>step</CODE> command to step over any functions which contains no
 | 
						|
debug information.  This is the default.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show step-mode</CODE>
 | 
						|
<DD>Show whether GDB will stop in or step over functions without
 | 
						|
source line debug information.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX257"></A>
 | 
						|
<DT><CODE>finish</CODE>
 | 
						|
<DD>Continue running until just after function in the selected stack frame
 | 
						|
returns.  Print the returned value (if any).
 | 
						|
<P>
 | 
						|
 | 
						|
Contrast this with the <CODE>return</CODE> command (see section <A HREF="gdb_15.html#SEC151">Returning from a Function</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX258"></A>
 | 
						|
<A NAME="IDX259"></A>
 | 
						|
<A NAME="IDX260"></A>
 | 
						|
<DT><CODE>until</CODE>
 | 
						|
<DD><DT><CODE>u</CODE>
 | 
						|
<DD>Continue running until a source line past the current line, in the
 | 
						|
current stack frame, is reached.  This command is used to avoid single
 | 
						|
stepping through a loop more than once.  It is like the <CODE>next</CODE>
 | 
						|
command, except that when <CODE>until</CODE> encounters a jump, it
 | 
						|
automatically continues execution until the program counter is greater
 | 
						|
than the address of the jump.
 | 
						|
<P>
 | 
						|
 | 
						|
This means that when you reach the end of a loop after single stepping
 | 
						|
though it, <CODE>until</CODE> makes your program continue execution until it
 | 
						|
exits the loop.  In contrast, a <CODE>next</CODE> command at the end of a loop
 | 
						|
simply steps back to the beginning of the loop, which forces you to step
 | 
						|
through the next iteration.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<CODE>until</CODE> always stops your program if it attempts to exit the current
 | 
						|
stack frame.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<CODE>until</CODE> may produce somewhat counterintuitive results if the order
 | 
						|
of machine code does not match the order of the source lines.  For
 | 
						|
example, in the following excerpt from a debugging session, the <CODE>f</CODE>
 | 
						|
(<CODE>frame</CODE>) command shows that execution is stopped at line
 | 
						|
<CODE>206</CODE>; yet when we use <CODE>until</CODE>, we get to line <CODE>195</CODE>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) f
 | 
						|
#0  main (argc=4, argv=0xf7fffae8) at m4.c:206
 | 
						|
206                 expand_input();
 | 
						|
(gdb) until
 | 
						|
195             for ( ; argc > 0; NEXTARG) {
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
This happened because, for execution efficiency, the compiler had
 | 
						|
generated code for the loop closure test at the end, rather than the
 | 
						|
start, of the loop--even though the test in a C <CODE>for</CODE>-loop is
 | 
						|
written before the body of the loop.  The <CODE>until</CODE> command appeared
 | 
						|
to step back to the beginning of the loop when it advanced to this
 | 
						|
expression; however, it has not really gone to an earlier
 | 
						|
statement--not in terms of the actual machine code.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<CODE>until</CODE> with no argument works by means of single
 | 
						|
instruction stepping, and hence is slower than <CODE>until</CODE> with an
 | 
						|
argument.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>until <VAR>location</VAR></CODE>
 | 
						|
<DD><DT><CODE>u <VAR>location</VAR></CODE>
 | 
						|
<DD>Continue running your program until either the specified location is
 | 
						|
reached, or the current stack frame returns.  <VAR>location</VAR> is any of
 | 
						|
the forms described in <A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A>.
 | 
						|
This form of the command uses temporary breakpoints, and
 | 
						|
hence is quicker than <CODE>until</CODE> without an argument.  The specified
 | 
						|
location is actually reached only if it is in the current frame.  This
 | 
						|
implies that <CODE>until</CODE> can be used to skip over recursive function
 | 
						|
invocations.  For instance in the code below, if the current location is
 | 
						|
line <CODE>96</CODE>, issuing <CODE>until 99</CODE> will execute the program up to
 | 
						|
line <CODE>99</CODE> in the same invocation of factorial, i.e., after the inner
 | 
						|
invocations have returned.
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>94	int factorial (int value)
 | 
						|
95	{
 | 
						|
96	    if (value > 1) {
 | 
						|
97            value *= factorial (value - 1);
 | 
						|
98	    }
 | 
						|
99	    return (value);
 | 
						|
100     }
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="IDX261"></A>
 | 
						|
<DT><CODE>advance <VAR>location</VAR></CODE>
 | 
						|
<DD>Continue running the program up to the given <VAR>location</VAR>.  An argument is
 | 
						|
required, which should be of one of the forms described in
 | 
						|
<A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A>.
 | 
						|
Execution will also stop upon exit from the current stack
 | 
						|
frame.  This command is similar to <CODE>until</CODE>, but <CODE>advance</CODE> will
 | 
						|
not skip over recursive function calls, and the target location doesn't
 | 
						|
have to be in the same frame as the current one.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX262"></A>
 | 
						|
<A NAME="IDX263"></A>
 | 
						|
<DT><CODE>stepi</CODE>
 | 
						|
<DD><DT><CODE>stepi <VAR>arg</VAR></CODE>
 | 
						|
<DD><DT><CODE>si</CODE>
 | 
						|
<DD>Execute one machine instruction, then stop and return to the debugger.
 | 
						|
<P>
 | 
						|
 | 
						|
It is often useful to do <SAMP>`display/i $pc'</SAMP> when stepping by machine
 | 
						|
instructions.  This makes GDB automatically display the next
 | 
						|
instruction to be executed, each time your program stops.  See section <A HREF="gdb_9.html#SEC65">Automatic Display</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
An argument is a repeat count, as in <CODE>step</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX264"></A>
 | 
						|
<A NAME="IDX265"></A>
 | 
						|
<DT><CODE>nexti</CODE>
 | 
						|
<DD><DT><CODE>nexti <VAR>arg</VAR></CODE>
 | 
						|
<DD><DT><CODE>ni</CODE>
 | 
						|
<DD>Execute one machine instruction, but if it is a function call,
 | 
						|
proceed until the function returns.
 | 
						|
<P>
 | 
						|
 | 
						|
An argument is a repeat count, as in <CODE>next</CODE>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Signals"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC44"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC43"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC45"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC45"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> >> </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> 5.3 Signals </H2>
 | 
						|
<!--docid::SEC44::-->
 | 
						|
<P>
 | 
						|
 | 
						|
A signal is an asynchronous event that can happen in a program.  The
 | 
						|
operating system defines the possible kinds of signals, and gives each
 | 
						|
kind a name and a number.  For example, in Unix <CODE>SIGINT</CODE> is the
 | 
						|
signal a program gets when you type an interrupt character (often <KBD>Ctrl-c</KBD>);
 | 
						|
<CODE>SIGSEGV</CODE> is the signal a program gets from referencing a place in
 | 
						|
memory far away from all the areas in use; <CODE>SIGALRM</CODE> occurs when
 | 
						|
the alarm clock timer goes off (which happens only if your program has
 | 
						|
requested an alarm).
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX266"></A>
 | 
						|
Some signals, including <CODE>SIGALRM</CODE>, are a normal part of the
 | 
						|
functioning of your program.  Others, such as <CODE>SIGSEGV</CODE>, indicate
 | 
						|
errors; these signals are <EM>fatal</EM> (they kill your program immediately) if the
 | 
						|
program has not specified in advance some other way to handle the signal.
 | 
						|
<CODE>SIGINT</CODE> does not indicate an error in your program, but it is normally
 | 
						|
fatal so it can carry out the purpose of the interrupt: to kill the program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB has the ability to detect any occurrence of a signal in your
 | 
						|
program.  You can tell GDB in advance what to do for each kind of
 | 
						|
signal.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX267"></A>
 | 
						|
Normally, GDB is set up to let the non-erroneous signals like
 | 
						|
<CODE>SIGALRM</CODE> be silently passed to your program
 | 
						|
(so as not to interfere with their role in the program's functioning)
 | 
						|
but to stop your program immediately whenever an error signal happens.
 | 
						|
You can change these settings with the <CODE>handle</CODE> command.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX268"></A>
 | 
						|
<A NAME="IDX269"></A>
 | 
						|
<DT><CODE>info signals</CODE>
 | 
						|
<DD><DT><CODE>info handle</CODE>
 | 
						|
<DD>Print a table of all the kinds of signals and how GDB has been told to
 | 
						|
handle each one.  You can use this to see the signal numbers of all
 | 
						|
the defined types of signals.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>info signals <VAR>sig</VAR></CODE>
 | 
						|
<DD>Similar, but print information only about the specified signal number.
 | 
						|
<P>
 | 
						|
 | 
						|
<CODE>info handle</CODE> is an alias for <CODE>info signals</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX270"></A>
 | 
						|
<DT><CODE>handle <VAR>signal</VAR> [<VAR>keywords</VAR><small>...</small>]</CODE>
 | 
						|
<DD>Change the way GDB handles signal <VAR>signal</VAR>.  <VAR>signal</VAR>
 | 
						|
can be the number of a signal or its name (with or without the
 | 
						|
<SAMP>`SIG'</SAMP> at the beginning); a list of signal numbers of the form
 | 
						|
<SAMP>`<VAR>low</VAR>-<VAR>high</VAR>'</SAMP>; or the word <SAMP>`all'</SAMP>, meaning all the
 | 
						|
known signals.  Optional arguments <VAR>keywords</VAR>, described below,
 | 
						|
say what change to make.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
The keywords allowed by the <CODE>handle</CODE> command can be abbreviated.
 | 
						|
Their full names are:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>nostop</CODE>
 | 
						|
<DD>GDB should not stop your program when this signal happens.  It may
 | 
						|
still print a message telling you that the signal has come in.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>stop</CODE>
 | 
						|
<DD>GDB should stop your program when this signal happens.  This implies
 | 
						|
the <CODE>print</CODE> keyword as well.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>print</CODE>
 | 
						|
<DD>GDB should print a message when this signal happens.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>noprint</CODE>
 | 
						|
<DD>GDB should not mention the occurrence of the signal at all.  This
 | 
						|
implies the <CODE>nostop</CODE> keyword as well.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>pass</CODE>
 | 
						|
<DD><DT><CODE>noignore</CODE>
 | 
						|
<DD>GDB should allow your program to see this signal; your program
 | 
						|
can handle the signal, or else it may terminate if the signal is fatal
 | 
						|
and not handled.  <CODE>pass</CODE> and <CODE>noignore</CODE> are synonyms.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>nopass</CODE>
 | 
						|
<DD><DT><CODE>ignore</CODE>
 | 
						|
<DD>GDB should not allow your program to see this signal.
 | 
						|
<CODE>nopass</CODE> and <CODE>ignore</CODE> are synonyms.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
When a signal stops your program, the signal is not visible to the
 | 
						|
program until you
 | 
						|
continue.  Your program sees the signal then, if <CODE>pass</CODE> is in
 | 
						|
effect for the signal in question <EM>at that time</EM>.  In other words,
 | 
						|
after GDB reports a signal, you can use the <CODE>handle</CODE>
 | 
						|
command with <CODE>pass</CODE> or <CODE>nopass</CODE> to control whether your
 | 
						|
program sees that signal when you continue.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The default is set to <CODE>nostop</CODE>, <CODE>noprint</CODE>, <CODE>pass</CODE> for
 | 
						|
non-erroneous signals such as <CODE>SIGALRM</CODE>, <CODE>SIGWINCH</CODE> and
 | 
						|
<CODE>SIGCHLD</CODE>, and to <CODE>stop</CODE>, <CODE>print</CODE>, <CODE>pass</CODE> for the
 | 
						|
erroneous signals.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You can also use the <CODE>signal</CODE> command to prevent your program from
 | 
						|
seeing a signal, or cause it to see a signal it normally would not see,
 | 
						|
or to give it any signal at any time.  For example, if your program stopped
 | 
						|
due to some sort of memory reference error, you might store correct
 | 
						|
values into the erroneous variables and continue, hoping to see more
 | 
						|
execution; but your program would probably terminate immediately as
 | 
						|
a result of the fatal signal once it saw the signal.  To prevent this,
 | 
						|
you can continue with <SAMP>`signal 0'</SAMP>.  See section <A HREF="gdb_15.html#SEC150">Giving your Program a Signal</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Thread Stops"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC45"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC44"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> >> </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> 5.4 Stopping and Starting Multi-thread Programs </H2>
 | 
						|
<!--docid::SEC45::-->
 | 
						|
<P>
 | 
						|
 | 
						|
When your program has multiple threads (see section <A HREF="gdb_5.html#SEC27">Debugging Programs with Multiple Threads</A>), you can choose whether to set
 | 
						|
breakpoints on all threads, or on a particular thread.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX271"></A>
 | 
						|
<A NAME="IDX272"></A>
 | 
						|
<A NAME="IDX273"></A>
 | 
						|
<DT><CODE>break <VAR>linespec</VAR> thread <VAR>threadno</VAR></CODE>
 | 
						|
<DD><DT><CODE>break <VAR>linespec</VAR> thread <VAR>threadno</VAR> if <small>...</small></CODE>
 | 
						|
<DD><VAR>linespec</VAR> specifies source lines; there are several ways of
 | 
						|
writing them (see section <A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A>), but the effect is always to
 | 
						|
specify some source line.
 | 
						|
<P>
 | 
						|
 | 
						|
Use the qualifier <SAMP>`thread <VAR>threadno</VAR>'</SAMP> with a breakpoint command
 | 
						|
to specify that you only want GDB to stop the program when a
 | 
						|
particular thread reaches this breakpoint.  <VAR>threadno</VAR> is one of the
 | 
						|
numeric thread identifiers assigned by GDB, shown in the first
 | 
						|
column of the <SAMP>`info threads'</SAMP> display.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you do not specify <SAMP>`thread <VAR>threadno</VAR>'</SAMP> when you set a
 | 
						|
breakpoint, the breakpoint applies to <EM>all</EM> threads of your
 | 
						|
program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You can use the <CODE>thread</CODE> qualifier on conditional breakpoints as
 | 
						|
well; in this case, place <SAMP>`thread <VAR>threadno</VAR>'</SAMP> before the
 | 
						|
breakpoint condition, like this:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) break frik.c:13 thread 28 if bartab > lim
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX274"></A>
 | 
						|
<A NAME="IDX275"></A>
 | 
						|
Whenever your program stops under GDB for any reason,
 | 
						|
<EM>all</EM> threads of execution stop, not just the current thread.  This
 | 
						|
allows you to examine the overall state of the program, including
 | 
						|
switching between threads, without worrying that things may change
 | 
						|
underfoot.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX276"></A>
 | 
						|
<A NAME="IDX277"></A>
 | 
						|
<A NAME="IDX278"></A>
 | 
						|
There is an unfortunate side effect.  If one thread stops for a
 | 
						|
breakpoint, or for some other reason, and another thread is blocked in a
 | 
						|
system call, then the system call may return prematurely.  This is a
 | 
						|
consequence of the interaction between multiple threads and the signals
 | 
						|
that GDB uses to implement breakpoints and other events that
 | 
						|
stop execution.
 | 
						|
</P><P>
 | 
						|
 | 
						|
To handle this problem, your program should check the return value of
 | 
						|
each system call and react appropriately.  This is good programming
 | 
						|
style anyways.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For example, do not write code like this:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>  sleep (10);
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The call to <CODE>sleep</CODE> will return early if a different thread stops
 | 
						|
at a breakpoint or for some other reason.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Instead, write this:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>  int unslept = 10;
 | 
						|
  while (unslept > 0)
 | 
						|
    unslept = sleep (unslept);
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
A system call is allowed to return early, so the system is still
 | 
						|
conforming to its specification.  But GDB does cause your
 | 
						|
multi-threaded program to behave differently than it would without
 | 
						|
GDB.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Also, GDB uses internal breakpoints in the thread library to
 | 
						|
monitor certain events such as thread creation and thread destruction.
 | 
						|
When such an event happens, a system call in another thread may return
 | 
						|
prematurely, even though your program does not appear to stop.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX279"></A>
 | 
						|
<A NAME="IDX280"></A>
 | 
						|
Conversely, whenever you restart the program, <EM>all</EM> threads start
 | 
						|
executing.  <EM>This is true even when single-stepping</EM> with commands
 | 
						|
like <CODE>step</CODE> or <CODE>next</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
In particular, GDB cannot single-step all threads in lockstep.
 | 
						|
Since thread scheduling is up to your debugging target's operating
 | 
						|
system (not controlled by GDB), other threads may
 | 
						|
execute more than one statement while the current thread completes a
 | 
						|
single step.  Moreover, in general other threads stop in the middle of a
 | 
						|
statement, rather than at a clean statement boundary, when the program
 | 
						|
stops.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You might even find your program stopped in another thread after
 | 
						|
continuing or even single-stepping.  This happens whenever some other
 | 
						|
thread runs into a breakpoint, a signal, or an exception before the
 | 
						|
first thread completes whatever you requested.
 | 
						|
</P><P>
 | 
						|
 | 
						|
On some OSes, you can lock the OS scheduler and thus allow only a single
 | 
						|
thread to run.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set scheduler-locking <VAR>mode</VAR></CODE>
 | 
						|
<DD><A NAME="IDX281"></A>
 | 
						|
<A NAME="IDX282"></A>
 | 
						|
Set the scheduler locking mode.  If it is <CODE>off</CODE>, then there is no
 | 
						|
locking and any thread may run at any time.  If <CODE>on</CODE>, then only the
 | 
						|
current thread may run when the inferior is resumed.  The <CODE>step</CODE>
 | 
						|
mode optimizes for single-stepping.  It stops other threads from
 | 
						|
"seizing the prompt" by preempting the current thread while you are
 | 
						|
stepping.  Other threads will only rarely (or never) get a chance to run
 | 
						|
when you step.  They are more likely to run when you <SAMP>`next'</SAMP> over a
 | 
						|
function call, and they are completely free to run when you use commands
 | 
						|
like <SAMP>`continue'</SAMP>, <SAMP>`until'</SAMP>, or <SAMP>`finish'</SAMP>.  However, unless another
 | 
						|
thread hits a breakpoint during its timeslice, they will never steal the
 | 
						|
GDB prompt away from the thread that you are debugging.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show scheduler-locking</CODE>
 | 
						|
<DD>Display the current scheduler locking mode.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Stack"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC31"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> >> </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>
 |