Debugging with GDB (February 2008)

Table Of Contents
Chapter 5: Stopping and Continuing 33
5 Stopping and Continuing
The principal purpose of a debugger is to let you stop your program before it terminates
abnormaly or runs into trouble, so that you can investigate and determine the reason.
Inside GDB, your program can stop for several reasons, such as a signal, a breakpoint, or
reaching a new line after a GDB command such as step. You can then examine and change
variables, set new breakpoints or remove old ones, and then continue execution. Usually,
the messages shown by GDB provide information on the status of your program—but you
can also explicitly request this information at any time.
info program
Display information about the status of your program: whether it is running
or not, what process it is, and why it stopped.
5.1 Breakpoints
A breakpoint 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 break command and its variants.
(see Section 5.1.1 [Setting breakpoints], page 33) You can stop your program by line number,
function name or an address in the program.
You can arrange to have values from your program displayed automatically whenever
GDB stops at a breakpoint. See Section 8.6 [Automatic display], page 68.
In HP-UX, SunOS 4.x, SVR4, and Alpha OSF/1 configurations, you can set breakpoints
in shared libraries before the executable is run. See Section 14.20 [Stopping and starting in
shared libraries], page 174.
A catchpoint is another special breakpoint that stops your program when a certain kind
of event occurs, such as the throwing of a C++ exception or the loading of a library. As with
watchpoints, you use a different command to set a catchpoint (see Section 5.1.2 [Setting
catchpoints], page 37), but aside from that, you can manage a catchpoint like any other
breakpoint. (To stop when your program receives a signal, use the handle command; see
Section 5.3 [Signals], page 46.)
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 enabled or disabled; if disabled,
it has no effect on your program until you enable it again.
Some GDB commands accept a range of breakpoints on which to operate. A breakpoint
range is either a single breakpoint number, like 5’, or two such numbers, in increasing
order, separated by a hyphen, like 5-7’. When a breakpoint range is given to a command,
all breakpoint in that range are operated on.
5.1.1 Setting breakpoints
Breakpoints are set with the break command (abbreviated b). The debugger conve-
nience variable $bpnum records the number of the breakpoint you’ve set most recently;