gdb: Finish Breakpoints in Python
23.2.2.31 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. 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.