Debugging with GDB (September 2007)

Chapter 5: Stopping and Continuing 43
function name is overloaded, break function is not enough to tell GDB where you want
a breakpoint. If you realize this is a problem, you c an use something like break func-
tion (types ) 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 >’. The first two options are always [0] cancel and
[1] all’. Typing 1 sets a breakpoint at each definition of function, and typing 0 aborts
the break command without setting any new breakp oints.
For example, the following session excerpt shows an attempt to set a breakpoint at the
overloaded symbol String::after. We choose three particular definitions of that function
name:
(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)
5.1.8 “Cannot insert breakpoints”
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:
Cannot insert breakpoints.
The same program may be running in another process.
When this happens, you have three ways to pro c eed:
1. Remove or disable the breakpoints, then continue.
2. Suspend GDB, and copy the file containing your program to a new name. Resume
GDB and use the exec-file command to specify that GDB should run your program
under that name. Then start your program again.
3. Relink your program so that the text segment is nonsharable, using the linker option
-N’. The operating system limitation may not apply to nonsharable executables.
A similar message can be printed if you request too many active hardware-assisted
breakpoints and watchpoints:
Stopped; cannot insert breakpoints.
You may have requested too many hardware breakpoints and watchpoints.
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.