Debugging with GDB (September 2007)
40 Debugging with GDB
enable [breakpoints] delete range...
Enable the specified breakp oints to work once, then die. GDB deletes any of
these breakpoints as soon as your program stops there.
Except for a breakpoint set with tbreak (see Section 5.1.1 [Setting breakpoints],
page 33), breakpoints that you set are initially e nabled; subsequently, they become
disabled or enabled only when you use one of the commands above. (The command until
can set and delete a breakpoint of its own, but it does not change the state of your other
breakpoints; see Section 5.2 [Continuing and stepping], page 44.)
5.1.5 Break conditions
The simplest sort of breakp oint breaks every time your program reaches a specified place.
You can also specify a condition for a breakpoint. A condition is just a Boolean expression
in your programming language (see Section 8.1 [Expressions], page 63). A breakpoint with
a condition evaluates the expression each time your program reaches it, and your program
stops only if the condition is true.
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 expresse d by the condition assert, you should set the condition
‘! assert’ on the appropriate breakpoint.
Conditions are also accepted for watchpoints; you may not nee d 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.
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 5.1.6 [Breakpoint command lists], page 41).
Break conditions can be specified when a breakpoint is set, by using ‘if’ in the arguments
to the break command. See Section 5.1.1 [Setting breakpoints], page 33. They can also be
changed at any time with the condition command.
You can also use the if keyword w ith the watch command. The catch command does
not recognize the if keyword; condition is the only way to impose a further condition on
a catchpoint.
condition bnum expression
Specify expression as the break condition for breakpoint, watchpoint, or catch-
point number bnum. After you set a condition, breakpoint bnum stops your
program only if the value of expression is true (nonzero, in C). When you
use condition, GDB checks expression immediately for syntactic correctness,
and to determine whether symbols in it have referents in the context of your