Debugging with GDB Manual (5900-1473; WDB 6.2; January 2011)

Table Of Contents
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 assert, you should set the condition
'! assert' on the appropriate breakpoint.
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.
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 “Breakpoint command lists” (page 56)).
Break conditions can be specified when a breakpoint is set, by using 'if' in the arguments
to the break command. See “Setting breakpoints (page 47). They can also be changed
at any time with the condition command.
You can also use the if keyword with 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 catchpoint 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 breakpoint. If expression
uses symbols not referenced in the context of the
breakpoint, GDB prints an error message:
No symbol "foo" in current context.
GDB does not actually evaluate expression at the
time the condition command (or a command
that sets a breakpoint with a condition, like break
if ...) is given, however. See “Expressions
(page 76).
5.1 Breakpoints 55