Debugging with GDB: Finish Breakpoints in Python |
---|
Next: Lazy Strings In Python, Previous: Breakpoints In Python, Up: Python API [Contents][Index]
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.
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.
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"
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.
Next: Lazy Strings In Python, Previous: Breakpoints In Python, Up: Python API [Contents][Index]