Debugging with GDB (September 2007)

42 Debugging with GDB
To remove all commands from a breakpoint, type commands and follow it im-
mediately with end; that is, give no commands.
With no bnum argument, commands refers to the last breakpoint, watchpoint,
or catchpoint set (not to the breakp oint most recently encountered).
Pressing
h
RET
i
as a means of repeating the las t GDB command is disabled within a
command-list.
You can use breakpoint commands to start your program up again. Simply use the
continue command, or step, or any other command that resumes execution.
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 next or step),
you may encounter another breakpoint—which could have its own command list, leading
to ambiguities about which list to execute.
If the first command you spec ify in a command list is silent, 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. silent is meaningful only at
the beginning of a breakpoint command list.
The commands echo, output, and printf allow you to print precisely controlled output,
and are often useful in silent breakpoints. See Section 18.4 [Commands for controlled
output], page 254.
For example, here is how you could use breakpoint commands to print the value of x at
entry to foo whenever x is p ositive.
break foo if x>0
commands
silent
printf "x is %d\n",x
cont
end
One application for breakpoint commands is to comp e nsate 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 c ommands to
assign correct values to any variables that need them. End with the continue command so
that your program does not stop, and start with the silent command so that no output
is produced. Here is an example:
break 403
commands
silent
set x = y + 4
cont
end
5.1.7 Breakpoint menus
Some programming languages (notably C++) permit a single function name to be de-
fined several times, for application in different contexts. This is called overloading. When a