Previous: Breakpoints In Python, Up: Python API


23.2.2.21 Finish Breakpoints

A finish breakpoint is a temporary breakpoint set at the return address of a frame, based on the finish command. gdb.FinishBreakpoint extends gdb.Breakpoint. The underlying breakpoint will be disabled and deleted when the execution will run out of the breakpoint scope (i.e. Breakpoint.stop or FinishBreakpoint.out_of_scope triggered). Finish breakpoints are thread specific and must be create with the right thread selected.

— Function: FinishBreakpoint.__init__ ([frame] [, internal])

Create a finish breakpoint at the return address of the gdb.Frame object frame. If frame is not provided, this defaults to the newest frame. The optional internal argument allows the breakpoint to become invisible to the user. See Breakpoints In Python, for further details about this argument.

— Function: FinishBreakpoint.out_of_scope (self)

In some circumstances (e.g. longjmp, C++ exceptions, gdb return command, ...), a function may not properly terminate, and thus never hit the finish breakpoint. When gdb notices such a situation, the out_of_scope callback will be triggered.

You may want to sub-class gdb.FinishBreakpoint and override this method:

          class MyFinishBreakpoint (gdb.FinishBreakpoint)
              def stop (self):
                  print "normal finish"
                  return True
          
              def out_of_scope ():
                  print "abnormal finish"
     
— Variable: FinishBreakpoint.return_value

When gdb is stopped at a finish breakpoint and the frame used to build the gdb.FinishBreakpoint object had debug symbols, this attribute will contain a gdb.Value object corresponding to the return value of the function. The value will be None if the function return type is void or if the return value was not computable. This attribute is not writable.