The Breakpoint List

The breakpoint list displays all breakpoints and watchpoints that are set and allows you to manipulate them. It can be displayed using View|Breakpoints.

The list of breakpoints

For each breakpoint the following is shown:

The icon in front of the entry indicates whether the breakpoint is enabled (a red dot) or disabled (a bright red dot), whether the breakpoint is temporary (a tiny clock is overlaid), whether the breakpoint is conditional (a tiny question mark is overlaid), or whether the breakpoint is orphaned (a 'x' is overlaid).

Watchpoints are indicated by an eye glas icon in front of the line.

Orphaned breakpoints

Orphaned breakpoints are breakpoints that gdb cannot implant immediately. Orphaned breakpoints occur if you try to set a breakpoint in a file that is not part of the executable. In particular, this is the case if the file belongs to a shared library or dynamically loaded module: When the executable is loaded, gdb does not yet know about dynamic modules and, hence, cannot set breakpoints there. However, KDbg does not forget about requests to set breakpoints in dynamic modules: It tries to set orphaned breakpoints each time that the program stops. When the breakpoint can be set successfully, it turns into a normal breakpoint.

But there is an important consequence: Orphaned breakpoints are not effective, and the program will not stop there. The remedy is to set a breakpoint in the executable at the earliest possible point after which it is known that the dynamic module is loaded. For shared libraries this is usually in main() and for dynamically loaded modules it is after the call to dlopen() (or equivalent). When the program stops at this breakpoint the orphaned breakpoints from the dynamic module are set and become effective.

Manipulating breakpoints

It is important to note that breakpoints and watchpoints cannot be manipulated while the program is running. If the program has already been started, it must stop first - either by hitting a breakpoint that is already set or forcefully by choosing Execution|Break. Note that this will not terminate the program, it just interrupts it. You can now manipulate the breakpoints; then choose Execution|Continue to let the program continue.

To set a breakpoint on a specific source line, it is easiest to do this in the source code window. If you don't know the exact file and line number of a function, you can set the breakpoint by typing the function name in the edit box above the list and click Add Breakpoint.

You can disable and enable breakpoints by selecting them in the list and clicking Disable or Enable. Or you simply click on the breakpoint in the list using the middle mouse button - just like you enable and disable breakpoints in the source window.

You can set a condition on a breakpoint (so that the program is only stopped if the condition is true) or set an ignore count (so that the program is not stopped the next n times that the breakpoint is hit). To do that, press the Conditional button and enter the condition and/or ignore count.

Manipulating watchpoints

Watchpoints are a like breakpoints, except that they interrupt the program when the value of a memory location changes. As with breakpoints, watchpoints cannot be manipulated while the program is running. See above for more information.

To set a watchpoint, type an expression in the edit box above the list, then click Add Watchpoint. The program will stop when the value of the expression changes. Note that watchpoints that involve local variables can only be set when the program is stopped in a breakpoint (or has been interrupted by Execution|Break).

To remove the watchpoint, select it from the list and click Remove. If the expression involves a local variable, the watchpoint will be removed automatically when the program leaves the current frame.

You can set a condition and an ignore count on the watchpoint just like on breakpoints by selecting it and clicking Conditional.