# Copyright (C) 2011-2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # This file is part of the GDB testsuite. It tests python Finish # Breakpoints. class MyFinishBreakpoint (gdb.FinishBreakpoint): def __init__(self, val, frame): gdb.FinishBreakpoint.__init__ (self, frame) print "MyFinishBreakpoint init" self.val = val def stop(self): print "MyFinishBreakpoint stop with %d" % int (self.val.dereference ()) print "return_value is: %d" % int (self.return_value) gdb.execute ("where 1") return True def out_of_scope(self): print "MyFinishBreakpoint out of scope" class TestBreakpoint(gdb.Breakpoint): def __init__(self): gdb.Breakpoint.__init__ (self, spec="test_1", internal=1) self.silent = True self.count = 0 print "TestBreakpoint init" def stop(self): self.count += 1 try: TestFinishBreakpoint (gdb.newest_frame (), self.count) except ValueError as e: print e return False class TestFinishBreakpoint (gdb.FinishBreakpoint): def __init__ (self, frame, count): self.count = count gdb.FinishBreakpoint.__init__ (self, frame, internal=1) def stop(self): print "-->", self.number if (self.count == 3): print "test stop: %d" % self.count return True else: print "test don't stop: %d" % self.count return False def out_of_scope(self): print "test didn't finish: %d" % self.count class TestExplicitBreakpoint(gdb.Breakpoint): def stop(self): try: SimpleFinishBreakpoint (gdb.newest_frame ()) except ValueError as e: print e return False class SimpleFinishBreakpoint(gdb.FinishBreakpoint): def __init__(self, frame): gdb.FinishBreakpoint.__init__ (self, frame) print "SimpleFinishBreakpoint init" def stop(self): print "SimpleFinishBreakpoint stop" return True def out_of_scope(self): print "SimpleFinishBreakpoint out of scope" print "Python script imported"